[{"data":1,"prerenderedAt":175108},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch11-mian-xiang-dui-xiang-ji-chu":3,"wiki-doc-nav":2500},{"id":4,"title":5,"body":6,"description":2493,"extension":2494,"meta":2495,"navigation":69,"path":2496,"seo":2497,"stem":2498,"__hash__":2499},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":8,"toc":2470},"minimark",[9,13,18,22,25,135,138,239,242,246,249,293,307,311,314,383,386,390,393,477,486,490,496,646,649,662,670,677,792,796,799,802,1081,1084,1088,1091,1196,1199,1203,1354,1358,1365,1482,1486,1489,1595,1598,1602,1605,1636,1639,1744,1747,1751,1756,1766,1834,1838,1845,1915,1918,1922,1928,2026,2036,2040,2379,2388,2392,2420,2424,2466],[10,11,5],"h1",{"id":12},"_11-面向对象基础",[14,15,17],"h2",{"id":16},"_111-什么是面向对象","11.1 什么是面向对象",[19,20,21],"p",{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,23,24],{},"面向过程：",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n","python","",[33,34,35,52,64,71,84,124,129],"code",{"__ignoreMap":31},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sVt8B","name ",[36,45,47],{"class":46},"szBVR","=",[36,49,51],{"class":50},"sZZnC"," \"小明\"\n",[36,53,55,58,60],{"class":38,"line":54},2,[36,56,57],{"class":42},"age ",[36,59,47],{"class":46},[36,61,63],{"class":62},"sj4cs"," 18\n",[36,65,67],{"class":38,"line":66},3,[36,68,70],{"emptyLinePlaceholder":69},true,"\n",[36,72,74,77,81],{"class":38,"line":73},4,[36,75,76],{"class":46},"def",[36,78,80],{"class":79},"sScJk"," introduce",[36,82,83],{"class":42},"(name, age):\n",[36,85,87,90,93,96,99,102,105,108,111,113,116,118,121],{"class":38,"line":86},5,[36,88,89],{"class":62},"    print",[36,91,92],{"class":42},"(",[36,94,95],{"class":46},"f",[36,97,98],{"class":50},"\"我叫",[36,100,101],{"class":62},"{",[36,103,104],{"class":42},"name",[36,106,107],{"class":62},"}",[36,109,110],{"class":50},"，今年",[36,112,101],{"class":62},[36,114,115],{"class":42},"age",[36,117,107],{"class":62},[36,119,120],{"class":50},"岁\"",[36,122,123],{"class":42},")\n",[36,125,127],{"class":38,"line":126},6,[36,128,70],{"emptyLinePlaceholder":69},[36,130,132],{"class":38,"line":131},7,[36,133,134],{"class":42},"introduce(name, age)\n",[19,136,137],{},"面向对象：",[26,139,141],{"className":28,"code":140,"language":30,"meta":31,"style":31},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[33,142,143,154,164,196,200,204,214,223,233],{"__ignoreMap":31},[36,144,145,148,151],{"class":38,"line":39},[36,146,147],{"class":46},"class",[36,149,150],{"class":79}," Student",[36,152,153],{"class":42},":\n",[36,155,156,159,161],{"class":38,"line":54},[36,157,158],{"class":46},"    def",[36,160,80],{"class":79},[36,162,163],{"class":42},"(self):\n",[36,165,166,169,171,173,175,178,181,183,185,187,190,192,194],{"class":38,"line":66},[36,167,168],{"class":62},"        print",[36,170,92],{"class":42},[36,172,95],{"class":46},[36,174,98],{"class":50},[36,176,177],{"class":62},"{self",[36,179,180],{"class":42},".name",[36,182,107],{"class":62},[36,184,110],{"class":50},[36,186,177],{"class":62},[36,188,189],{"class":42},".age",[36,191,107],{"class":62},[36,193,120],{"class":50},[36,195,123],{"class":42},[36,197,198],{"class":38,"line":73},[36,199,70],{"emptyLinePlaceholder":69},[36,201,202],{"class":38,"line":86},[36,203,70],{"emptyLinePlaceholder":69},[36,205,206,209,211],{"class":38,"line":126},[36,207,208],{"class":42},"student ",[36,210,47],{"class":46},[36,212,213],{"class":42}," Student()\n",[36,215,216,219,221],{"class":38,"line":131},[36,217,218],{"class":42},"student.name ",[36,220,47],{"class":46},[36,222,51],{"class":50},[36,224,226,229,231],{"class":38,"line":225},8,[36,227,228],{"class":42},"student.age ",[36,230,47],{"class":46},[36,232,63],{"class":62},[36,234,236],{"class":38,"line":235},9,[36,237,238],{"class":42},"student.introduce()\n",[19,240,241],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,243,245],{"id":244},"_112-类和对象","11.2 类和对象",[19,247,248],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,250,252],{"className":28,"code":251,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,253,254,262,267,271,275,284],{"__ignoreMap":31},[36,255,256,258,260],{"class":38,"line":39},[36,257,147],{"class":46},[36,259,150],{"class":79},[36,261,153],{"class":42},[36,263,264],{"class":38,"line":54},[36,265,266],{"class":46},"    pass\n",[36,268,269],{"class":38,"line":66},[36,270,70],{"emptyLinePlaceholder":69},[36,272,273],{"class":38,"line":73},[36,274,70],{"emptyLinePlaceholder":69},[36,276,277,280,282],{"class":38,"line":86},[36,278,279],{"class":42},"student1 ",[36,281,47],{"class":46},[36,283,213],{"class":42},[36,285,286,289,291],{"class":38,"line":126},[36,287,288],{"class":42},"student2 ",[36,290,47],{"class":46},[36,292,213],{"class":42},[19,294,295,298,299,302,303,306],{},[33,296,297],{},"Student"," 是类，",[33,300,301],{},"student1"," 和 ",[33,304,305],{},"student2"," 是对象。",[14,308,310],{"id":309},"_113-属性","11.3 属性",[19,312,313],{},"属性是对象保存的数据。",[26,315,317],{"className":28,"code":316,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,318,319,327,331,335,339,347,355,363,367,375],{"__ignoreMap":31},[36,320,321,323,325],{"class":38,"line":39},[36,322,147],{"class":46},[36,324,150],{"class":79},[36,326,153],{"class":42},[36,328,329],{"class":38,"line":54},[36,330,266],{"class":46},[36,332,333],{"class":38,"line":66},[36,334,70],{"emptyLinePlaceholder":69},[36,336,337],{"class":38,"line":73},[36,338,70],{"emptyLinePlaceholder":69},[36,340,341,343,345],{"class":38,"line":86},[36,342,208],{"class":42},[36,344,47],{"class":46},[36,346,213],{"class":42},[36,348,349,351,353],{"class":38,"line":126},[36,350,218],{"class":42},[36,352,47],{"class":46},[36,354,51],{"class":50},[36,356,357,359,361],{"class":38,"line":131},[36,358,228],{"class":42},[36,360,47],{"class":46},[36,362,63],{"class":62},[36,364,365],{"class":38,"line":225},[36,366,70],{"emptyLinePlaceholder":69},[36,368,369,372],{"class":38,"line":235},[36,370,371],{"class":62},"print",[36,373,374],{"class":42},"(student.name)\n",[36,376,378,380],{"class":38,"line":377},10,[36,379,371],{"class":62},[36,381,382],{"class":42},"(student.age)\n",[19,384,385],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,387,389],{"id":388},"_114-方法","11.4 方法",[19,391,392],{},"类中的函数叫方法。",[26,394,395],{"className":28,"code":140,"language":30,"meta":31,"style":31},[33,396,397,405,413,441,445,449,457,465,473],{"__ignoreMap":31},[36,398,399,401,403],{"class":38,"line":39},[36,400,147],{"class":46},[36,402,150],{"class":79},[36,404,153],{"class":42},[36,406,407,409,411],{"class":38,"line":54},[36,408,158],{"class":46},[36,410,80],{"class":79},[36,412,163],{"class":42},[36,414,415,417,419,421,423,425,427,429,431,433,435,437,439],{"class":38,"line":66},[36,416,168],{"class":62},[36,418,92],{"class":42},[36,420,95],{"class":46},[36,422,98],{"class":50},[36,424,177],{"class":62},[36,426,180],{"class":42},[36,428,107],{"class":62},[36,430,110],{"class":50},[36,432,177],{"class":62},[36,434,189],{"class":42},[36,436,107],{"class":62},[36,438,120],{"class":50},[36,440,123],{"class":42},[36,442,443],{"class":38,"line":73},[36,444,70],{"emptyLinePlaceholder":69},[36,446,447],{"class":38,"line":86},[36,448,70],{"emptyLinePlaceholder":69},[36,450,451,453,455],{"class":38,"line":126},[36,452,208],{"class":42},[36,454,47],{"class":46},[36,456,213],{"class":42},[36,458,459,461,463],{"class":38,"line":131},[36,460,218],{"class":42},[36,462,47],{"class":46},[36,464,51],{"class":50},[36,466,467,469,471],{"class":38,"line":225},[36,468,228],{"class":42},[36,470,47],{"class":46},[36,472,63],{"class":62},[36,474,475],{"class":38,"line":235},[36,476,238],{"class":42},[19,478,479,482,483,485],{},[33,480,481],{},"self"," 表示当前对象。调用方法时不需要手动传入 ",[33,484,481],{},"，Python 会自动传。",[14,487,489],{"id":488},"_115-构造方法__init__","11.5 构造方法__init__",[19,491,492,495],{},[33,493,494],{},"__init__"," 在对象创建时自动执行，用于初始化属性。",[26,497,499],{"className":28,"code":498,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[33,500,501,509,519,532,544,556,560,568,607,611,615,641],{"__ignoreMap":31},[36,502,503,505,507],{"class":38,"line":39},[36,504,147],{"class":46},[36,506,150],{"class":79},[36,508,153],{"class":42},[36,510,511,513,516],{"class":38,"line":54},[36,512,158],{"class":46},[36,514,515],{"class":62}," __init__",[36,517,518],{"class":42},"(self, name, age, score):\n",[36,520,521,524,527,529],{"class":38,"line":66},[36,522,523],{"class":62},"        self",[36,525,526],{"class":42},".name ",[36,528,47],{"class":46},[36,530,531],{"class":42}," name\n",[36,533,534,536,539,541],{"class":38,"line":73},[36,535,523],{"class":62},[36,537,538],{"class":42},".age ",[36,540,47],{"class":46},[36,542,543],{"class":42}," age\n",[36,545,546,548,551,553],{"class":38,"line":86},[36,547,523],{"class":62},[36,549,550],{"class":42},".score ",[36,552,47],{"class":46},[36,554,555],{"class":42}," score\n",[36,557,558],{"class":38,"line":126},[36,559,70],{"emptyLinePlaceholder":69},[36,561,562,564,566],{"class":38,"line":131},[36,563,158],{"class":46},[36,565,80],{"class":79},[36,567,163],{"class":42},[36,569,570,572,574,576,578,580,582,584,586,588,590,592,595,597,600,602,605],{"class":38,"line":225},[36,571,168],{"class":62},[36,573,92],{"class":42},[36,575,95],{"class":46},[36,577,98],{"class":50},[36,579,177],{"class":62},[36,581,180],{"class":42},[36,583,107],{"class":62},[36,585,110],{"class":50},[36,587,177],{"class":62},[36,589,189],{"class":42},[36,591,107],{"class":62},[36,593,594],{"class":50},"岁，成绩",[36,596,177],{"class":62},[36,598,599],{"class":42},".score",[36,601,107],{"class":62},[36,603,604],{"class":50},"\"",[36,606,123],{"class":42},[36,608,609],{"class":38,"line":235},[36,610,70],{"emptyLinePlaceholder":69},[36,612,613],{"class":38,"line":377},[36,614,70],{"emptyLinePlaceholder":69},[36,616,618,620,622,625,628,631,634,636,639],{"class":38,"line":617},11,[36,619,208],{"class":42},[36,621,47],{"class":46},[36,623,624],{"class":42}," Student(",[36,626,627],{"class":50},"\"小明\"",[36,629,630],{"class":42},", ",[36,632,633],{"class":62},"18",[36,635,630],{"class":42},[36,637,638],{"class":62},"95",[36,640,123],{"class":42},[36,642,644],{"class":38,"line":643},12,[36,645,238],{"class":42},[19,647,648],{},"构造方法的好处：",[650,651,652,656,659],"ol",{},[653,654,655],"li",{},"创建对象时必须提供必要数据。",[653,657,658],{},"属性初始化集中，不容易漏。",[653,660,661],{},"对象状态更完整。",[14,663,665,666],{"id":664},"_116-str","11.6 ",[667,668,669],"strong",{},"str",[19,671,672,673,676],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,674,675],{},"__str__","。",[26,678,680],{"className":28,"code":679,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[33,681,682,690,699,709,719,723,732,761,765,769,785],{"__ignoreMap":31},[36,683,684,686,688],{"class":38,"line":39},[36,685,147],{"class":46},[36,687,150],{"class":79},[36,689,153],{"class":42},[36,691,692,694,696],{"class":38,"line":54},[36,693,158],{"class":46},[36,695,515],{"class":62},[36,697,698],{"class":42},"(self, name, age):\n",[36,700,701,703,705,707],{"class":38,"line":66},[36,702,523],{"class":62},[36,704,526],{"class":42},[36,706,47],{"class":46},[36,708,531],{"class":42},[36,710,711,713,715,717],{"class":38,"line":73},[36,712,523],{"class":62},[36,714,538],{"class":42},[36,716,47],{"class":46},[36,718,543],{"class":42},[36,720,721],{"class":38,"line":86},[36,722,70],{"emptyLinePlaceholder":69},[36,724,725,727,730],{"class":38,"line":126},[36,726,158],{"class":46},[36,728,729],{"class":62}," __str__",[36,731,163],{"class":42},[36,733,734,737,740,743,745,747,749,752,754,756,758],{"class":38,"line":131},[36,735,736],{"class":46},"        return",[36,738,739],{"class":46}," f",[36,741,742],{"class":50},"\"Student(name=",[36,744,177],{"class":62},[36,746,180],{"class":42},[36,748,107],{"class":62},[36,750,751],{"class":50},", age=",[36,753,177],{"class":62},[36,755,189],{"class":42},[36,757,107],{"class":62},[36,759,760],{"class":50},")\"\n",[36,762,763],{"class":38,"line":225},[36,764,70],{"emptyLinePlaceholder":69},[36,766,767],{"class":38,"line":235},[36,768,70],{"emptyLinePlaceholder":69},[36,770,771,773,775,777,779,781,783],{"class":38,"line":377},[36,772,208],{"class":42},[36,774,47],{"class":46},[36,776,624],{"class":42},[36,778,627],{"class":50},[36,780,630],{"class":42},[36,782,633],{"class":62},[36,784,123],{"class":42},[36,786,787,789],{"class":38,"line":617},[36,788,371],{"class":62},[36,790,791],{"class":42},"(student)\n",[14,793,795],{"id":794},"_117-封装","11.7 封装",[19,797,798],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,800,801],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,803,805],{"className":28,"code":804,"language":30,"meta":31,"style":31},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[33,806,807,816,825,837,849,853,862,872,876,886,902,914,919,932,937,947,960,972,977,992,1004,1009,1021,1026,1031,1051,1062,1073],{"__ignoreMap":31},[36,808,809,811,814],{"class":38,"line":39},[36,810,147],{"class":46},[36,812,813],{"class":79}," Account",[36,815,153],{"class":42},[36,817,818,820,822],{"class":38,"line":54},[36,819,158],{"class":46},[36,821,515],{"class":62},[36,823,824],{"class":42},"(self, owner, balance):\n",[36,826,827,829,832,834],{"class":38,"line":66},[36,828,523],{"class":62},[36,830,831],{"class":42},".owner ",[36,833,47],{"class":46},[36,835,836],{"class":42}," owner\n",[36,838,839,841,844,846],{"class":38,"line":73},[36,840,523],{"class":62},[36,842,843],{"class":42},".__balance ",[36,845,47],{"class":46},[36,847,848],{"class":42}," balance\n",[36,850,851],{"class":38,"line":86},[36,852,70],{"emptyLinePlaceholder":69},[36,854,855,857,860],{"class":38,"line":126},[36,856,158],{"class":46},[36,858,859],{"class":79}," get_balance",[36,861,163],{"class":42},[36,863,864,866,869],{"class":38,"line":131},[36,865,736],{"class":46},[36,867,868],{"class":62}," self",[36,870,871],{"class":42},".__balance\n",[36,873,874],{"class":38,"line":225},[36,875,70],{"emptyLinePlaceholder":69},[36,877,878,880,883],{"class":38,"line":235},[36,879,158],{"class":46},[36,881,882],{"class":79}," deposit",[36,884,885],{"class":42},"(self, money):\n",[36,887,888,891,894,897,900],{"class":38,"line":377},[36,889,890],{"class":46},"        if",[36,892,893],{"class":42}," money ",[36,895,896],{"class":46},"\u003C=",[36,898,899],{"class":62}," 0",[36,901,153],{"class":42},[36,903,904,907,909,912],{"class":38,"line":617},[36,905,906],{"class":62},"            print",[36,908,92],{"class":42},[36,910,911],{"class":50},"\"存款金额必须大于0\"",[36,913,123],{"class":42},[36,915,916],{"class":38,"line":643},[36,917,918],{"class":46},"            return\n",[36,920,922,924,926,929],{"class":38,"line":921},13,[36,923,523],{"class":62},[36,925,843],{"class":42},[36,927,928],{"class":46},"+=",[36,930,931],{"class":42}," money\n",[36,933,935],{"class":38,"line":934},14,[36,936,70],{"emptyLinePlaceholder":69},[36,938,940,942,945],{"class":38,"line":939},15,[36,941,158],{"class":46},[36,943,944],{"class":79}," withdraw",[36,946,885],{"class":42},[36,948,950,952,954,956,958],{"class":38,"line":949},16,[36,951,890],{"class":46},[36,953,893],{"class":42},[36,955,896],{"class":46},[36,957,899],{"class":62},[36,959,153],{"class":42},[36,961,963,965,967,970],{"class":38,"line":962},17,[36,964,906],{"class":62},[36,966,92],{"class":42},[36,968,969],{"class":50},"\"取款金额必须大于0\"",[36,971,123],{"class":42},[36,973,975],{"class":38,"line":974},18,[36,976,918],{"class":46},[36,978,980,982,984,987,989],{"class":38,"line":979},19,[36,981,890],{"class":46},[36,983,893],{"class":42},[36,985,986],{"class":46},">",[36,988,868],{"class":62},[36,990,991],{"class":42},".__balance:\n",[36,993,995,997,999,1002],{"class":38,"line":994},20,[36,996,906],{"class":62},[36,998,92],{"class":42},[36,1000,1001],{"class":50},"\"余额不足\"",[36,1003,123],{"class":42},[36,1005,1007],{"class":38,"line":1006},21,[36,1008,918],{"class":46},[36,1010,1012,1014,1016,1019],{"class":38,"line":1011},22,[36,1013,523],{"class":62},[36,1015,843],{"class":42},[36,1017,1018],{"class":46},"-=",[36,1020,931],{"class":42},[36,1022,1024],{"class":38,"line":1023},23,[36,1025,70],{"emptyLinePlaceholder":69},[36,1027,1029],{"class":38,"line":1028},24,[36,1030,70],{"emptyLinePlaceholder":69},[36,1032,1034,1037,1039,1042,1044,1046,1049],{"class":38,"line":1033},25,[36,1035,1036],{"class":42},"account ",[36,1038,47],{"class":46},[36,1040,1041],{"class":42}," Account(",[36,1043,627],{"class":50},[36,1045,630],{"class":42},[36,1047,1048],{"class":62},"1000",[36,1050,123],{"class":42},[36,1052,1054,1057,1060],{"class":38,"line":1053},26,[36,1055,1056],{"class":42},"account.deposit(",[36,1058,1059],{"class":62},"200",[36,1061,123],{"class":42},[36,1063,1065,1068,1071],{"class":38,"line":1064},27,[36,1066,1067],{"class":42},"account.withdraw(",[36,1069,1070],{"class":62},"100",[36,1072,123],{"class":42},[36,1074,1076,1078],{"class":38,"line":1075},28,[36,1077,371],{"class":62},[36,1079,1080],{"class":42},"(account.get_balance())\n",[19,1082,1083],{},"封装的意义是避免外部随意修改内部状态。",[14,1085,1087],{"id":1086},"_118-继承","11.8 继承",[19,1089,1090],{},"继承可以让子类复用父类的属性和方法。",[26,1092,1094],{"className":28,"code":1093,"language":30,"meta":31,"style":31},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[33,1095,1096,1105,1114,1125,1129,1133,1148,1157,1168,1172,1176,1186,1191],{"__ignoreMap":31},[36,1097,1098,1100,1103],{"class":38,"line":39},[36,1099,147],{"class":46},[36,1101,1102],{"class":79}," Animal",[36,1104,153],{"class":42},[36,1106,1107,1109,1112],{"class":38,"line":54},[36,1108,158],{"class":46},[36,1110,1111],{"class":79}," eat",[36,1113,163],{"class":42},[36,1115,1116,1118,1120,1123],{"class":38,"line":66},[36,1117,168],{"class":62},[36,1119,92],{"class":42},[36,1121,1122],{"class":50},"\"吃东西\"",[36,1124,123],{"class":42},[36,1126,1127],{"class":38,"line":73},[36,1128,70],{"emptyLinePlaceholder":69},[36,1130,1131],{"class":38,"line":86},[36,1132,70],{"emptyLinePlaceholder":69},[36,1134,1135,1137,1140,1142,1145],{"class":38,"line":126},[36,1136,147],{"class":46},[36,1138,1139],{"class":79}," Dog",[36,1141,92],{"class":42},[36,1143,1144],{"class":79},"Animal",[36,1146,1147],{"class":42},"):\n",[36,1149,1150,1152,1155],{"class":38,"line":131},[36,1151,158],{"class":46},[36,1153,1154],{"class":79}," bark",[36,1156,163],{"class":42},[36,1158,1159,1161,1163,1166],{"class":38,"line":225},[36,1160,168],{"class":62},[36,1162,92],{"class":42},[36,1164,1165],{"class":50},"\"汪汪\"",[36,1167,123],{"class":42},[36,1169,1170],{"class":38,"line":235},[36,1171,70],{"emptyLinePlaceholder":69},[36,1173,1174],{"class":38,"line":377},[36,1175,70],{"emptyLinePlaceholder":69},[36,1177,1178,1181,1183],{"class":38,"line":617},[36,1179,1180],{"class":42},"dog ",[36,1182,47],{"class":46},[36,1184,1185],{"class":42}," Dog()\n",[36,1187,1188],{"class":38,"line":643},[36,1189,1190],{"class":42},"dog.eat()\n",[36,1192,1193],{"class":38,"line":921},[36,1194,1195],{"class":42},"dog.bark()\n",[19,1197,1198],{},"子类可以扩展新方法，也可以重写父类方法。",[14,1200,1202],{"id":1201},"_119-方法重写","11.9 方法重写",[26,1204,1206],{"className":28,"code":1205,"language":30,"meta":31,"style":31},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[33,1207,1208,1216,1225,1236,1240,1244,1256,1264,1274,1278,1282,1295,1303,1314,1318,1322,1330,1340,1344,1349],{"__ignoreMap":31},[36,1209,1210,1212,1214],{"class":38,"line":39},[36,1211,147],{"class":46},[36,1213,1102],{"class":79},[36,1215,153],{"class":42},[36,1217,1218,1220,1223],{"class":38,"line":54},[36,1219,158],{"class":46},[36,1221,1222],{"class":79}," speak",[36,1224,163],{"class":42},[36,1226,1227,1229,1231,1234],{"class":38,"line":66},[36,1228,168],{"class":62},[36,1230,92],{"class":42},[36,1232,1233],{"class":50},"\"动物叫\"",[36,1235,123],{"class":42},[36,1237,1238],{"class":38,"line":73},[36,1239,70],{"emptyLinePlaceholder":69},[36,1241,1242],{"class":38,"line":86},[36,1243,70],{"emptyLinePlaceholder":69},[36,1245,1246,1248,1250,1252,1254],{"class":38,"line":126},[36,1247,147],{"class":46},[36,1249,1139],{"class":79},[36,1251,92],{"class":42},[36,1253,1144],{"class":79},[36,1255,1147],{"class":42},[36,1257,1258,1260,1262],{"class":38,"line":131},[36,1259,158],{"class":46},[36,1261,1222],{"class":79},[36,1263,163],{"class":42},[36,1265,1266,1268,1270,1272],{"class":38,"line":225},[36,1267,168],{"class":62},[36,1269,92],{"class":42},[36,1271,1165],{"class":50},[36,1273,123],{"class":42},[36,1275,1276],{"class":38,"line":235},[36,1277,70],{"emptyLinePlaceholder":69},[36,1279,1280],{"class":38,"line":377},[36,1281,70],{"emptyLinePlaceholder":69},[36,1283,1284,1286,1289,1291,1293],{"class":38,"line":617},[36,1285,147],{"class":46},[36,1287,1288],{"class":79}," Cat",[36,1290,92],{"class":42},[36,1292,1144],{"class":79},[36,1294,1147],{"class":42},[36,1296,1297,1299,1301],{"class":38,"line":643},[36,1298,158],{"class":46},[36,1300,1222],{"class":79},[36,1302,163],{"class":42},[36,1304,1305,1307,1309,1312],{"class":38,"line":921},[36,1306,168],{"class":62},[36,1308,92],{"class":42},[36,1310,1311],{"class":50},"\"喵喵\"",[36,1313,123],{"class":42},[36,1315,1316],{"class":38,"line":934},[36,1317,70],{"emptyLinePlaceholder":69},[36,1319,1320],{"class":38,"line":939},[36,1321,70],{"emptyLinePlaceholder":69},[36,1323,1324,1326,1328],{"class":38,"line":949},[36,1325,1180],{"class":42},[36,1327,47],{"class":46},[36,1329,1185],{"class":42},[36,1331,1332,1335,1337],{"class":38,"line":962},[36,1333,1334],{"class":42},"cat ",[36,1336,47],{"class":46},[36,1338,1339],{"class":42}," Cat()\n",[36,1341,1342],{"class":38,"line":974},[36,1343,70],{"emptyLinePlaceholder":69},[36,1345,1346],{"class":38,"line":979},[36,1347,1348],{"class":42},"dog.speak()\n",[36,1350,1351],{"class":38,"line":994},[36,1352,1353],{"class":42},"cat.speak()\n",[14,1355,1357],{"id":1356},"_1110-super","11.10 super",[19,1359,1360,1361,1364],{},"子类可以通过 ",[33,1362,1363],{},"super()"," 调用父类方法。",[26,1366,1368],{"className":28,"code":1367,"language":30,"meta":31,"style":31},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[33,1369,1370,1379,1388,1398,1402,1406,1419,1428,1441,1451,1455,1459,1475],{"__ignoreMap":31},[36,1371,1372,1374,1377],{"class":38,"line":39},[36,1373,147],{"class":46},[36,1375,1376],{"class":79}," Person",[36,1378,153],{"class":42},[36,1380,1381,1383,1385],{"class":38,"line":54},[36,1382,158],{"class":46},[36,1384,515],{"class":62},[36,1386,1387],{"class":42},"(self, name):\n",[36,1389,1390,1392,1394,1396],{"class":38,"line":66},[36,1391,523],{"class":62},[36,1393,526],{"class":42},[36,1395,47],{"class":46},[36,1397,531],{"class":42},[36,1399,1400],{"class":38,"line":73},[36,1401,70],{"emptyLinePlaceholder":69},[36,1403,1404],{"class":38,"line":86},[36,1405,70],{"emptyLinePlaceholder":69},[36,1407,1408,1410,1412,1414,1417],{"class":38,"line":126},[36,1409,147],{"class":46},[36,1411,150],{"class":79},[36,1413,92],{"class":42},[36,1415,1416],{"class":79},"Person",[36,1418,1147],{"class":42},[36,1420,1421,1423,1425],{"class":38,"line":131},[36,1422,158],{"class":46},[36,1424,515],{"class":62},[36,1426,1427],{"class":42},"(self, name, score):\n",[36,1429,1430,1433,1436,1438],{"class":38,"line":225},[36,1431,1432],{"class":62},"        super",[36,1434,1435],{"class":42},"().",[36,1437,494],{"class":62},[36,1439,1440],{"class":42},"(name)\n",[36,1442,1443,1445,1447,1449],{"class":38,"line":235},[36,1444,523],{"class":62},[36,1446,550],{"class":42},[36,1448,47],{"class":46},[36,1450,555],{"class":42},[36,1452,1453],{"class":38,"line":377},[36,1454,70],{"emptyLinePlaceholder":69},[36,1456,1457],{"class":38,"line":617},[36,1458,70],{"emptyLinePlaceholder":69},[36,1460,1461,1463,1465,1467,1469,1471,1473],{"class":38,"line":643},[36,1462,208],{"class":42},[36,1464,47],{"class":46},[36,1466,624],{"class":42},[36,1468,627],{"class":50},[36,1470,630],{"class":42},[36,1472,638],{"class":62},[36,1474,123],{"class":42},[36,1476,1477,1479],{"class":38,"line":921},[36,1478,371],{"class":62},[36,1480,1481],{"class":42},"(student.name, student.score)\n",[14,1483,1485],{"id":1484},"_1111-多态","11.11 多态",[19,1487,1488],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,1490,1492],{"className":28,"code":1491,"language":30,"meta":31,"style":31},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[33,1493,1494,1502,1510,1520,1524,1528,1536,1544,1554,1558,1562,1572,1577,1581,1585,1590],{"__ignoreMap":31},[36,1495,1496,1498,1500],{"class":38,"line":39},[36,1497,147],{"class":46},[36,1499,1139],{"class":79},[36,1501,153],{"class":42},[36,1503,1504,1506,1508],{"class":38,"line":54},[36,1505,158],{"class":46},[36,1507,1222],{"class":79},[36,1509,163],{"class":42},[36,1511,1512,1514,1516,1518],{"class":38,"line":66},[36,1513,168],{"class":62},[36,1515,92],{"class":42},[36,1517,1165],{"class":50},[36,1519,123],{"class":42},[36,1521,1522],{"class":38,"line":73},[36,1523,70],{"emptyLinePlaceholder":69},[36,1525,1526],{"class":38,"line":86},[36,1527,70],{"emptyLinePlaceholder":69},[36,1529,1530,1532,1534],{"class":38,"line":126},[36,1531,147],{"class":46},[36,1533,1288],{"class":79},[36,1535,153],{"class":42},[36,1537,1538,1540,1542],{"class":38,"line":131},[36,1539,158],{"class":46},[36,1541,1222],{"class":79},[36,1543,163],{"class":42},[36,1545,1546,1548,1550,1552],{"class":38,"line":225},[36,1547,168],{"class":62},[36,1549,92],{"class":42},[36,1551,1311],{"class":50},[36,1553,123],{"class":42},[36,1555,1556],{"class":38,"line":235},[36,1557,70],{"emptyLinePlaceholder":69},[36,1559,1560],{"class":38,"line":377},[36,1561,70],{"emptyLinePlaceholder":69},[36,1563,1564,1566,1569],{"class":38,"line":617},[36,1565,76],{"class":46},[36,1567,1568],{"class":79}," make_sound",[36,1570,1571],{"class":42},"(animal):\n",[36,1573,1574],{"class":38,"line":643},[36,1575,1576],{"class":42},"    animal.speak()\n",[36,1578,1579],{"class":38,"line":921},[36,1580,70],{"emptyLinePlaceholder":69},[36,1582,1583],{"class":38,"line":934},[36,1584,70],{"emptyLinePlaceholder":69},[36,1586,1587],{"class":38,"line":939},[36,1588,1589],{"class":42},"make_sound(Dog())\n",[36,1591,1592],{"class":38,"line":949},[36,1593,1594],{"class":42},"make_sound(Cat())\n",[19,1596,1597],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,1599,1601],{"id":1600},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,1603,1604],{},"实例属性属于对象：",[26,1606,1608],{"className":28,"code":1607,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,1609,1610,1618,1626],{"__ignoreMap":31},[36,1611,1612,1614,1616],{"class":38,"line":39},[36,1613,147],{"class":46},[36,1615,150],{"class":79},[36,1617,153],{"class":42},[36,1619,1620,1622,1624],{"class":38,"line":54},[36,1621,158],{"class":46},[36,1623,515],{"class":62},[36,1625,1387],{"class":42},[36,1627,1628,1630,1632,1634],{"class":38,"line":66},[36,1629,523],{"class":62},[36,1631,526],{"class":42},[36,1633,47],{"class":46},[36,1635,531],{"class":42},[19,1637,1638],{},"类属性属于类，所有对象共享：",[26,1640,1642],{"className":28,"code":1641,"language":30,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[33,1643,1644,1652,1662,1666,1674,1684,1688,1692,1705,1719,1723,1730,1737],{"__ignoreMap":31},[36,1645,1646,1648,1650],{"class":38,"line":39},[36,1647,147],{"class":46},[36,1649,150],{"class":79},[36,1651,153],{"class":42},[36,1653,1654,1657,1659],{"class":38,"line":54},[36,1655,1656],{"class":42},"    school ",[36,1658,47],{"class":46},[36,1660,1661],{"class":50}," \"黑马学校\"\n",[36,1663,1664],{"class":38,"line":66},[36,1665,70],{"emptyLinePlaceholder":69},[36,1667,1668,1670,1672],{"class":38,"line":73},[36,1669,158],{"class":46},[36,1671,515],{"class":62},[36,1673,1387],{"class":42},[36,1675,1676,1678,1680,1682],{"class":38,"line":86},[36,1677,523],{"class":62},[36,1679,526],{"class":42},[36,1681,47],{"class":46},[36,1683,531],{"class":42},[36,1685,1686],{"class":38,"line":126},[36,1687,70],{"emptyLinePlaceholder":69},[36,1689,1690],{"class":38,"line":131},[36,1691,70],{"emptyLinePlaceholder":69},[36,1693,1694,1697,1699,1701,1703],{"class":38,"line":225},[36,1695,1696],{"class":42},"s1 ",[36,1698,47],{"class":46},[36,1700,624],{"class":42},[36,1702,627],{"class":50},[36,1704,123],{"class":42},[36,1706,1707,1710,1712,1714,1717],{"class":38,"line":235},[36,1708,1709],{"class":42},"s2 ",[36,1711,47],{"class":46},[36,1713,624],{"class":42},[36,1715,1716],{"class":50},"\"小红\"",[36,1718,123],{"class":42},[36,1720,1721],{"class":38,"line":377},[36,1722,70],{"emptyLinePlaceholder":69},[36,1724,1725,1727],{"class":38,"line":617},[36,1726,371],{"class":62},[36,1728,1729],{"class":42},"(s1.school)\n",[36,1731,1732,1734],{"class":38,"line":643},[36,1733,371],{"class":62},[36,1735,1736],{"class":42},"(s2.school)\n",[36,1738,1739,1741],{"class":38,"line":921},[36,1740,371],{"class":62},[36,1742,1743],{"class":42},"(Student.school)\n",[19,1745,1746],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,1748,1750],{"id":1749},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1752,1753,1755],"h3",{"id":1754},"_11131-类方法","11.13.1 类方法",[19,1757,1758,1759,1762,1763,676],{},"类方法使用 ",[33,1760,1761],{},"@classmethod","，第一个参数通常是 ",[33,1764,1765],{},"cls",[26,1767,1769],{"className":28,"code":1768,"language":30,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,1770,1771,1779,1787,1791,1799,1809,1819,1823,1827],{"__ignoreMap":31},[36,1772,1773,1775,1777],{"class":38,"line":39},[36,1774,147],{"class":46},[36,1776,150],{"class":79},[36,1778,153],{"class":42},[36,1780,1781,1783,1785],{"class":38,"line":54},[36,1782,1656],{"class":42},[36,1784,47],{"class":46},[36,1786,1661],{"class":50},[36,1788,1789],{"class":38,"line":66},[36,1790,70],{"emptyLinePlaceholder":69},[36,1792,1793,1796],{"class":38,"line":73},[36,1794,1795],{"class":79},"    @",[36,1797,1798],{"class":62},"classmethod\n",[36,1800,1801,1803,1806],{"class":38,"line":86},[36,1802,158],{"class":46},[36,1804,1805],{"class":79}," get_school",[36,1807,1808],{"class":42},"(cls):\n",[36,1810,1811,1813,1816],{"class":38,"line":126},[36,1812,736],{"class":46},[36,1814,1815],{"class":62}," cls",[36,1817,1818],{"class":42},".school\n",[36,1820,1821],{"class":38,"line":131},[36,1822,70],{"emptyLinePlaceholder":69},[36,1824,1825],{"class":38,"line":225},[36,1826,70],{"emptyLinePlaceholder":69},[36,1828,1829,1831],{"class":38,"line":235},[36,1830,371],{"class":62},[36,1832,1833],{"class":42},"(Student.get_school())\n",[1752,1835,1837],{"id":1836},"_11132-静态方法","11.13.2 静态方法",[19,1839,1840,1841,1844],{},"静态方法使用 ",[33,1842,1843],{},"@staticmethod","，不需要访问实例和类。",[26,1846,1848],{"className":28,"code":1847,"language":30,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,1849,1850,1859,1866,1876,1889,1893,1897],{"__ignoreMap":31},[36,1851,1852,1854,1857],{"class":38,"line":39},[36,1853,147],{"class":46},[36,1855,1856],{"class":79}," MathUtils",[36,1858,153],{"class":42},[36,1860,1861,1863],{"class":38,"line":54},[36,1862,1795],{"class":79},[36,1864,1865],{"class":62},"staticmethod\n",[36,1867,1868,1870,1873],{"class":38,"line":66},[36,1869,158],{"class":46},[36,1871,1872],{"class":79}," add",[36,1874,1875],{"class":42},"(a, b):\n",[36,1877,1878,1880,1883,1886],{"class":38,"line":73},[36,1879,736],{"class":46},[36,1881,1882],{"class":42}," a ",[36,1884,1885],{"class":46},"+",[36,1887,1888],{"class":42}," b\n",[36,1890,1891],{"class":38,"line":86},[36,1892,70],{"emptyLinePlaceholder":69},[36,1894,1895],{"class":38,"line":126},[36,1896,70],{"emptyLinePlaceholder":69},[36,1898,1899,1901,1904,1907,1909,1912],{"class":38,"line":131},[36,1900,371],{"class":62},[36,1902,1903],{"class":42},"(MathUtils.add(",[36,1905,1906],{"class":62},"1",[36,1908,630],{"class":42},[36,1910,1911],{"class":62},"2",[36,1913,1914],{"class":42},"))\n",[19,1916,1917],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,1919,1921],{"id":1920},"_1114-dataclass","11.14 dataclass",[19,1923,1924,1927],{},[33,1925,1926],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,1929,1931],{"className":28,"code":1930,"language":30,"meta":31,"style":31},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[33,1932,1933,1947,1951,1955,1960,1968,1976,1984,1992,1996,2000,2020],{"__ignoreMap":31},[36,1934,1935,1938,1941,1944],{"class":38,"line":39},[36,1936,1937],{"class":46},"from",[36,1939,1940],{"class":42}," dataclasses ",[36,1942,1943],{"class":46},"import",[36,1945,1946],{"class":42}," dataclass\n",[36,1948,1949],{"class":38,"line":54},[36,1950,70],{"emptyLinePlaceholder":69},[36,1952,1953],{"class":38,"line":66},[36,1954,70],{"emptyLinePlaceholder":69},[36,1956,1957],{"class":38,"line":73},[36,1958,1959],{"class":79},"@dataclass\n",[36,1961,1962,1964,1966],{"class":38,"line":86},[36,1963,147],{"class":46},[36,1965,150],{"class":79},[36,1967,153],{"class":42},[36,1969,1970,1973],{"class":38,"line":126},[36,1971,1972],{"class":42},"    name: ",[36,1974,1975],{"class":62},"str\n",[36,1977,1978,1981],{"class":38,"line":131},[36,1979,1980],{"class":42},"    age: ",[36,1982,1983],{"class":62},"int\n",[36,1985,1986,1989],{"class":38,"line":225},[36,1987,1988],{"class":42},"    score: ",[36,1990,1991],{"class":62},"float\n",[36,1993,1994],{"class":38,"line":235},[36,1995,70],{"emptyLinePlaceholder":69},[36,1997,1998],{"class":38,"line":377},[36,1999,70],{"emptyLinePlaceholder":69},[36,2001,2002,2004,2006,2008,2010,2012,2014,2016,2018],{"class":38,"line":617},[36,2003,208],{"class":42},[36,2005,47],{"class":46},[36,2007,624],{"class":42},[36,2009,627],{"class":50},[36,2011,630],{"class":42},[36,2013,633],{"class":62},[36,2015,630],{"class":42},[36,2017,638],{"class":62},[36,2019,123],{"class":42},[36,2021,2022,2024],{"class":38,"line":643},[36,2023,371],{"class":62},[36,2025,791],{"class":42},[19,2027,2028,2029,2031,2032,2035],{},"它会自动生成 ",[33,2030,494],{},"、",[33,2033,2034],{},"__repr__"," 等方法。适合数据模型类。",[14,2037,2039],{"id":2038},"_1115-小案例学生类","11.15 小案例：学生类",[26,2041,2043],{"className":28,"code":2042,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[33,2044,2045,2053,2062,2074,2084,2094,2104,2108,2117,2131,2135,2144,2151,2164,2176,2188,2200,2205,2209,2215,2225,2234,2245,2254,2263,2272,2277,2281,2289,2327,2332,2337,2363,2371],{"__ignoreMap":31},[36,2046,2047,2049,2051],{"class":38,"line":39},[36,2048,147],{"class":46},[36,2050,150],{"class":79},[36,2052,153],{"class":42},[36,2054,2055,2057,2059],{"class":38,"line":54},[36,2056,158],{"class":46},[36,2058,515],{"class":62},[36,2060,2061],{"class":42},"(self, student_id, name, age, score):\n",[36,2063,2064,2066,2069,2071],{"class":38,"line":66},[36,2065,523],{"class":62},[36,2067,2068],{"class":42},".student_id ",[36,2070,47],{"class":46},[36,2072,2073],{"class":42}," student_id\n",[36,2075,2076,2078,2080,2082],{"class":38,"line":73},[36,2077,523],{"class":62},[36,2079,526],{"class":42},[36,2081,47],{"class":46},[36,2083,531],{"class":42},[36,2085,2086,2088,2090,2092],{"class":38,"line":86},[36,2087,523],{"class":62},[36,2089,538],{"class":42},[36,2091,47],{"class":46},[36,2093,543],{"class":42},[36,2095,2096,2098,2100,2102],{"class":38,"line":126},[36,2097,523],{"class":62},[36,2099,550],{"class":42},[36,2101,47],{"class":46},[36,2103,555],{"class":42},[36,2105,2106],{"class":38,"line":131},[36,2107,70],{"emptyLinePlaceholder":69},[36,2109,2110,2112,2115],{"class":38,"line":225},[36,2111,158],{"class":46},[36,2113,2114],{"class":79}," is_passed",[36,2116,163],{"class":42},[36,2118,2119,2121,2123,2125,2128],{"class":38,"line":235},[36,2120,736],{"class":46},[36,2122,868],{"class":62},[36,2124,550],{"class":42},[36,2126,2127],{"class":46},">=",[36,2129,2130],{"class":62}," 60\n",[36,2132,2133],{"class":38,"line":377},[36,2134,70],{"emptyLinePlaceholder":69},[36,2136,2137,2139,2142],{"class":38,"line":617},[36,2138,158],{"class":46},[36,2140,2141],{"class":79}," to_dict",[36,2143,163],{"class":42},[36,2145,2146,2148],{"class":38,"line":643},[36,2147,736],{"class":46},[36,2149,2150],{"class":42}," {\n",[36,2152,2153,2156,2159,2161],{"class":38,"line":921},[36,2154,2155],{"class":50},"            \"student_id\"",[36,2157,2158],{"class":42},": ",[36,2160,481],{"class":62},[36,2162,2163],{"class":42},".student_id,\n",[36,2165,2166,2169,2171,2173],{"class":38,"line":934},[36,2167,2168],{"class":50},"            \"name\"",[36,2170,2158],{"class":42},[36,2172,481],{"class":62},[36,2174,2175],{"class":42},".name,\n",[36,2177,2178,2181,2183,2185],{"class":38,"line":939},[36,2179,2180],{"class":50},"            \"age\"",[36,2182,2158],{"class":42},[36,2184,481],{"class":62},[36,2186,2187],{"class":42},".age,\n",[36,2189,2190,2193,2195,2197],{"class":38,"line":949},[36,2191,2192],{"class":50},"            \"score\"",[36,2194,2158],{"class":42},[36,2196,481],{"class":62},[36,2198,2199],{"class":42},".score,\n",[36,2201,2202],{"class":38,"line":962},[36,2203,2204],{"class":42},"        }\n",[36,2206,2207],{"class":38,"line":974},[36,2208,70],{"emptyLinePlaceholder":69},[36,2210,2211,2213],{"class":38,"line":979},[36,2212,1795],{"class":79},[36,2214,1798],{"class":62},[36,2216,2217,2219,2222],{"class":38,"line":994},[36,2218,158],{"class":46},[36,2220,2221],{"class":79}," from_dict",[36,2223,2224],{"class":42},"(cls, data):\n",[36,2226,2227,2229,2231],{"class":38,"line":1006},[36,2228,736],{"class":46},[36,2230,1815],{"class":62},[36,2232,2233],{"class":42},"(\n",[36,2235,2236,2239,2242],{"class":38,"line":1011},[36,2237,2238],{"class":42},"            data[",[36,2240,2241],{"class":50},"\"student_id\"",[36,2243,2244],{"class":42},"],\n",[36,2246,2247,2249,2252],{"class":38,"line":1023},[36,2248,2238],{"class":42},[36,2250,2251],{"class":50},"\"name\"",[36,2253,2244],{"class":42},[36,2255,2256,2258,2261],{"class":38,"line":1028},[36,2257,2238],{"class":42},[36,2259,2260],{"class":50},"\"age\"",[36,2262,2244],{"class":42},[36,2264,2265,2267,2270],{"class":38,"line":1033},[36,2266,2238],{"class":42},[36,2268,2269],{"class":50},"\"score\"",[36,2271,2244],{"class":42},[36,2273,2274],{"class":38,"line":1053},[36,2275,2276],{"class":42},"        )\n",[36,2278,2279],{"class":38,"line":1064},[36,2280,70],{"emptyLinePlaceholder":69},[36,2282,2283,2285,2287],{"class":38,"line":1075},[36,2284,158],{"class":46},[36,2286,729],{"class":62},[36,2288,163],{"class":42},[36,2290,2292,2294,2296,2298,2300,2303,2305,2308,2310,2312,2314,2316,2318,2320,2322,2324],{"class":38,"line":2291},29,[36,2293,736],{"class":46},[36,2295,739],{"class":46},[36,2297,604],{"class":50},[36,2299,177],{"class":62},[36,2301,2302],{"class":42},".student_id",[36,2304,107],{"class":62},[36,2306,2307],{"class":62}," {self",[36,2309,180],{"class":42},[36,2311,107],{"class":62},[36,2313,2307],{"class":62},[36,2315,189],{"class":42},[36,2317,107],{"class":62},[36,2319,2307],{"class":62},[36,2321,599],{"class":42},[36,2323,107],{"class":62},[36,2325,2326],{"class":50},"\"\n",[36,2328,2330],{"class":38,"line":2329},30,[36,2331,70],{"emptyLinePlaceholder":69},[36,2333,2335],{"class":38,"line":2334},31,[36,2336,70],{"emptyLinePlaceholder":69},[36,2338,2340,2342,2344,2346,2349,2351,2353,2355,2357,2359,2361],{"class":38,"line":2339},32,[36,2341,208],{"class":42},[36,2343,47],{"class":46},[36,2345,624],{"class":42},[36,2347,2348],{"class":50},"\"001\"",[36,2350,630],{"class":42},[36,2352,627],{"class":50},[36,2354,630],{"class":42},[36,2356,633],{"class":62},[36,2358,630],{"class":42},[36,2360,638],{"class":62},[36,2362,123],{"class":42},[36,2364,2366,2368],{"class":38,"line":2365},33,[36,2367,371],{"class":62},[36,2369,2370],{"class":42},"(student.is_passed())\n",[36,2372,2374,2376],{"class":38,"line":2373},34,[36,2375,371],{"class":62},[36,2377,2378],{"class":42},"(student.to_dict())\n",[19,2380,2381,302,2384,2387],{},[33,2382,2383],{},"to_dict()",[33,2385,2386],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,2389,2391],{"id":2390},"_1116-易错点","11.16 易错点",[650,2393,2394,2400,2406,2411,2414,2417],{},[653,2395,2396,2397,676],{},"类名推荐使用大驼峰，如 ",[33,2398,2399],{},"StudentManager",[653,2401,2402,2403,2405],{},"方法第一个参数必须写 ",[33,2404,481],{},"，调用时不用传。",[653,2407,2408,2410],{},[33,2409,494],{}," 不是普通方法，它在创建对象时自动执行。",[653,2412,2413],{},"私有属性不是绝对安全，只是约定和名称改写。",[653,2415,2416],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[653,2418,2419],{},"类中方法太多时，说明职责可能过重。",[14,2421,2423],{"id":2422},"_1117-本章练习","11.17 本章练习",[650,2425,2426,2432,2438,2444,2457],{},[653,2427,2428,2429,2431],{},"定义 ",[33,2430,297],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[653,2433,2428,2434,2437],{},[33,2435,2436],{},"Account"," 类，实现存款、取款、查询余额。",[653,2439,2428,2440,2443],{},[33,2441,2442],{},"Circle"," 类，计算圆的周长和面积。",[653,2445,2428,2446,2031,2449,2452,2453,2456],{},[33,2447,2448],{},"Dog",[33,2450,2451],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,2454,2455],{},"speak()"," 方法。",[653,2458,2459,2460,2462,2463,676],{},"使用 ",[33,2461,1926],{}," 定义一个商品类 ",[33,2464,2465],{},"Product",[2467,2468,2469],"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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":2471},[2472,2473,2474,2475,2476,2477,2479,2480,2481,2482,2483,2484,2485,2489,2490,2491,2492],{"id":16,"depth":54,"text":17},{"id":244,"depth":54,"text":245},{"id":309,"depth":54,"text":310},{"id":388,"depth":54,"text":389},{"id":488,"depth":54,"text":489},{"id":664,"depth":54,"text":2478},"11.6 str",{"id":794,"depth":54,"text":795},{"id":1086,"depth":54,"text":1087},{"id":1201,"depth":54,"text":1202},{"id":1356,"depth":54,"text":1357},{"id":1484,"depth":54,"text":1485},{"id":1600,"depth":54,"text":1601},{"id":1749,"depth":54,"text":1750,"children":2486},[2487,2488],{"id":1754,"depth":66,"text":1755},{"id":1836,"depth":66,"text":1837},{"id":1920,"depth":54,"text":1921},{"id":2038,"depth":54,"text":2039},{"id":2390,"depth":54,"text":2391},{"id":2422,"depth":54,"text":2423},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":5,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",[2501,7545,8652,10071,13058,14408,15896,16985,25741,25753,26352,26378,26502,26743,26808,26826,26839,26886,27010,27179,27378,27557,27762,27898,27993,28030,28043,28353,29094,29802,29823,30842,32473,32624,32637,32649,32945,52742,52757,52774,52807,55678,79023,95164,95185,95298,95419,96189,96852,97213,97251,97357,97457,97500,97526,97587,99241,99342,99367,99858,100358,101438,101721,102463,102965,102977,104992,106656,108158,109856,111773,113692,115714,119184,119616,120079,120828,123772,124120,124142,124498,127805,127817,128220,128243,128390,128557,128762,129063,129620,130277,132208,133806,134455,135949,137380,138615,140309,142061,144471,144587,145522,145733,146618,147853,148081,148094,149246,151658,153751,157072,159549,161193,162970,164983,168035,170215,172742,174936],{"id":2502,"title":2503,"body":2504,"description":31,"extension":2494,"meta":7540,"navigation":69,"path":7541,"seo":7542,"stem":7543,"__hash__":7544},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2505,"toc":7512},[2506,2509,2513,2516,2520,2531,2535,2539,2542,2545,2548,2551,2554,2580,2584,2587,2590,2593,2596,2645,2649,2667,2669,2683,2686,2694,2697,3549,3556,3573,3577,3663,3667,3673,3758,3762,3800,3804,3868,3872,3876,3883,3894,3898,3903,3907,3912,3916,3921,3925,3929,3934,4181,4186,4324,4329,4585,4588,4596,4600,4605,4708,4711,5009,5018,5119,5122,5125,5128,5131,5391,5396,5536,5539,5718,5721,5849,5852,6004,6008,6013,6016,6027,6035,6038,6144,6148,6152,6157,6207,6212,6217,6241,6246,6299,6302,6307,6483,6488,6773,6778,7175,7179,7184,7241,7246,7254,7257,7397,7400,7509],[10,2507,2503],{"id":2508},"_1基础入门",[14,2510,2512],{"id":2511},"_11注释","1.1注释",[19,2514,2515],{},"\u002F\u002F或者\u002F* *\u002F",[14,2517,2519],{"id":2518},"_12命名","1.2命名",[650,2521,2522,2525,2528],{},[653,2523,2524],{},"字母数字下划线",[653,2526,2527],{},"开头必须是字母或_",[653,2529,2530],{},"不能使用关键词",[14,2532,2534],{"id":2533},"_13数据类型","1.3数据类型",[1752,2536,2538],{"id":2537},"_131整形","1.3.1整形",[19,2540,2541],{},"short 短整形 2",[19,2543,2544],{},"int 整形 4",[19,2546,2547],{},"long 长整形 win4 linux32位4 linux64位8",[19,2549,2550],{},"long long 长长整形 8",[19,2552,2553],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,2555,2559],{"className":2556,"code":2557,"language":2558,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,2560,2561,2573],{"__ignoreMap":31},[36,2562,2563,2566,2568,2571],{"class":38,"line":39},[36,2564,2565],{"class":46},"sizeof",[36,2567,92],{"class":42},[36,2569,2570],{"class":46},"int",[36,2572,123],{"class":42},[36,2574,2575,2577],{"class":38,"line":54},[36,2576,2565],{"class":46},[36,2578,2579],{"class":42},"(num)\n",[1752,2581,2583],{"id":2582},"_132浮点型","1.3.2浮点型",[19,2585,2586],{},"float 单精度 4节 7位有效数字",[19,2588,2589],{},"double 双精度 8节 15-16有效数字",[19,2591,2592],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2594,2595],{},"注意点：",[26,2597,2599],{"className":2556,"code":2598,"language":2558,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,2600,2601,2623],{"__ignoreMap":31},[36,2602,2603,2606,2609,2611,2614,2616,2619],{"class":38,"line":39},[36,2604,2605],{"class":46},"float",[36,2607,2608],{"class":42}," f1",[36,2610,47],{"class":46},[36,2612,2613],{"class":62},"3.14",[36,2615,95],{"class":46},[36,2617,2618],{"class":42},";",[36,2620,2622],{"class":2621},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,2624,2625,2627,2630,2632,2635,2638,2640,2642],{"class":38,"line":54},[36,2626,2605],{"class":46},[36,2628,2629],{"class":42}," f2",[36,2631,47],{"class":46},[36,2633,2634],{"class":62},"3",[36,2636,2637],{"class":46},"e",[36,2639,1911],{"class":62},[36,2641,2618],{"class":42},[36,2643,2644],{"class":2621}," \u002F\u002F科学记数法\n",[1752,2646,2648],{"id":2647},"_133字符型","1.3.3字符型",[26,2650,2652],{"className":2556,"code":2651,"language":2558,"meta":31,"style":31},"char ch='a'\n",[33,2653,2654],{"__ignoreMap":31},[36,2655,2656,2659,2662,2664],{"class":38,"line":39},[36,2657,2658],{"class":46},"char",[36,2660,2661],{"class":42}," ch",[36,2663,47],{"class":46},[36,2665,2666],{"class":50},"'a'\n",[19,2668,2595],{},[650,2670,2671,2674,2677,2680],{},[653,2672,2673],{},"在显示字符型变量时，只能单引号，双引号x",[653,2675,2676],{},"单引号内只能一个字符，不能字符串",[653,2678,2679],{},"c和c++字符型变量只占用一个字符",[653,2681,2682],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2684,2685],{},"ASCII码大致由以下两部分组成：",[650,2687,2688,2691],{},[653,2689,2690],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[653,2692,2693],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2695,2696],{},"ASCII码表格：",[2698,2699,2700,2743],"table",{},[2701,2702,2703],"thead",{},[2704,2705,2706,2713,2718,2722,2727,2731,2735,2739],"tr",{},[2707,2708,2709,2712],"th",{},[667,2710,2711],{},"ASCII","值",[2707,2714,2715],{},[667,2716,2717],{},"控制字符",[2707,2719,2720,2712],{},[667,2721,2711],{},[2707,2723,2724],{},[667,2725,2726],{},"字符",[2707,2728,2729,2712],{},[667,2730,2711],{},[2707,2732,2733],{},[667,2734,2726],{},[2707,2736,2737,2712],{},[667,2738,2711],{},[2707,2740,2741],{},[667,2742,2726],{},[2744,2745,2746,2772,2797,2821,2846,2871,2896,2921,2947,2972,2998,3024,3049,3074,3100,3126,3152,3176,3201,3225,3250,3275,3300,3325,3350,3375,3400,3426,3450,3475,3499,3524],"tbody",{},[2704,2747,2748,2752,2755,2758,2761,2764,2767,2770],{},[2749,2750,2751],"td",{},"0",[2749,2753,2754],{},"NUT",[2749,2756,2757],{},"32",[2749,2759,2760],{},"(space)",[2749,2762,2763],{},"64",[2749,2765,2766],{},"@",[2749,2768,2769],{},"96",[2749,2771,2031],{},[2704,2773,2774,2776,2779,2782,2785,2788,2791,2794],{},[2749,2775,1906],{},[2749,2777,2778],{},"SOH",[2749,2780,2781],{},"33",[2749,2783,2784],{},"!",[2749,2786,2787],{},"65",[2749,2789,2790],{},"A",[2749,2792,2793],{},"97",[2749,2795,2796],{},"a",[2704,2798,2799,2801,2804,2807,2809,2812,2815,2818],{},[2749,2800,1911],{},[2749,2802,2803],{},"STX",[2749,2805,2806],{},"34",[2749,2808,604],{},[2749,2810,2811],{},"66",[2749,2813,2814],{},"B",[2749,2816,2817],{},"98",[2749,2819,2820],{},"b",[2704,2822,2823,2825,2828,2831,2834,2837,2840,2843],{},[2749,2824,2634],{},[2749,2826,2827],{},"ETX",[2749,2829,2830],{},"35",[2749,2832,2833],{},"#",[2749,2835,2836],{},"67",[2749,2838,2839],{},"C",[2749,2841,2842],{},"99",[2749,2844,2845],{},"c",[2704,2847,2848,2851,2854,2857,2860,2863,2866,2868],{},[2749,2849,2850],{},"4",[2749,2852,2853],{},"EOT",[2749,2855,2856],{},"36",[2749,2858,2859],{},"$",[2749,2861,2862],{},"68",[2749,2864,2865],{},"D",[2749,2867,1070],{},[2749,2869,2870],{},"d",[2704,2872,2873,2876,2879,2882,2885,2888,2891,2894],{},[2749,2874,2875],{},"5",[2749,2877,2878],{},"ENQ",[2749,2880,2881],{},"37",[2749,2883,2884],{},"%",[2749,2886,2887],{},"69",[2749,2889,2890],{},"E",[2749,2892,2893],{},"101",[2749,2895,2637],{},[2704,2897,2898,2901,2904,2907,2910,2913,2916,2919],{},[2749,2899,2900],{},"6",[2749,2902,2903],{},"ACK",[2749,2905,2906],{},"38",[2749,2908,2909],{},"&",[2749,2911,2912],{},"70",[2749,2914,2915],{},"F",[2749,2917,2918],{},"102",[2749,2920,95],{},[2704,2922,2923,2926,2929,2932,2935,2938,2941,2944],{},[2749,2924,2925],{},"7",[2749,2927,2928],{},"BEL",[2749,2930,2931],{},"39",[2749,2933,2934],{},",",[2749,2936,2937],{},"71",[2749,2939,2940],{},"G",[2749,2942,2943],{},"103",[2749,2945,2946],{},"g",[2704,2948,2949,2952,2955,2958,2960,2963,2966,2969],{},[2749,2950,2951],{},"8",[2749,2953,2954],{},"BS",[2749,2956,2957],{},"40",[2749,2959,92],{},[2749,2961,2962],{},"72",[2749,2964,2965],{},"H",[2749,2967,2968],{},"104",[2749,2970,2971],{},"h",[2704,2973,2974,2977,2980,2983,2986,2989,2992,2995],{},[2749,2975,2976],{},"9",[2749,2978,2979],{},"HT",[2749,2981,2982],{},"41",[2749,2984,2985],{},")",[2749,2987,2988],{},"73",[2749,2990,2991],{},"I",[2749,2993,2994],{},"105",[2749,2996,2997],{},"i",[2704,2999,3000,3003,3006,3009,3012,3015,3018,3021],{},[2749,3001,3002],{},"10",[2749,3004,3005],{},"LF",[2749,3007,3008],{},"42",[2749,3010,3011],{},"*",[2749,3013,3014],{},"74",[2749,3016,3017],{},"J",[2749,3019,3020],{},"106",[2749,3022,3023],{},"j",[2704,3025,3026,3029,3032,3035,3037,3040,3043,3046],{},[2749,3027,3028],{},"11",[2749,3030,3031],{},"VT",[2749,3033,3034],{},"43",[2749,3036,1885],{},[2749,3038,3039],{},"75",[2749,3041,3042],{},"K",[2749,3044,3045],{},"107",[2749,3047,3048],{},"k",[2704,3050,3051,3054,3057,3060,3062,3065,3068,3071],{},[2749,3052,3053],{},"12",[2749,3055,3056],{},"FF",[2749,3058,3059],{},"44",[2749,3061,2934],{},[2749,3063,3064],{},"76",[2749,3066,3067],{},"L",[2749,3069,3070],{},"108",[2749,3072,3073],{},"l",[2704,3075,3076,3079,3082,3085,3088,3091,3094,3097],{},[2749,3077,3078],{},"13",[2749,3080,3081],{},"CR",[2749,3083,3084],{},"45",[2749,3086,3087],{},"-",[2749,3089,3090],{},"77",[2749,3092,3093],{},"M",[2749,3095,3096],{},"109",[2749,3098,3099],{},"m",[2704,3101,3102,3105,3108,3111,3114,3117,3120,3123],{},[2749,3103,3104],{},"14",[2749,3106,3107],{},"SO",[2749,3109,3110],{},"46",[2749,3112,3113],{},".",[2749,3115,3116],{},"78",[2749,3118,3119],{},"N",[2749,3121,3122],{},"110",[2749,3124,3125],{},"n",[2704,3127,3128,3131,3134,3137,3140,3143,3146,3149],{},[2749,3129,3130],{},"15",[2749,3132,3133],{},"SI",[2749,3135,3136],{},"47",[2749,3138,3139],{},"\u002F",[2749,3141,3142],{},"79",[2749,3144,3145],{},"O",[2749,3147,3148],{},"111",[2749,3150,3151],{},"o",[2704,3153,3154,3157,3160,3163,3165,3168,3171,3174],{},[2749,3155,3156],{},"16",[2749,3158,3159],{},"DLE",[2749,3161,3162],{},"48",[2749,3164,2751],{},[2749,3166,3167],{},"80",[2749,3169,3170],{},"P",[2749,3172,3173],{},"112",[2749,3175,19],{},[2704,3177,3178,3181,3184,3187,3189,3192,3195,3198],{},[2749,3179,3180],{},"17",[2749,3182,3183],{},"DCI",[2749,3185,3186],{},"49",[2749,3188,1906],{},[2749,3190,3191],{},"81",[2749,3193,3194],{},"Q",[2749,3196,3197],{},"113",[2749,3199,3200],{},"q",[2704,3202,3203,3205,3208,3211,3213,3216,3219,3222],{},[2749,3204,633],{},[2749,3206,3207],{},"DC2",[2749,3209,3210],{},"50",[2749,3212,1911],{},[2749,3214,3215],{},"82",[2749,3217,3218],{},"R",[2749,3220,3221],{},"114",[2749,3223,3224],{},"r",[2704,3226,3227,3230,3233,3236,3238,3241,3244,3247],{},[2749,3228,3229],{},"19",[2749,3231,3232],{},"DC3",[2749,3234,3235],{},"51",[2749,3237,2634],{},[2749,3239,3240],{},"83",[2749,3242,3243],{},"S",[2749,3245,3246],{},"115",[2749,3248,3249],{},"s",[2704,3251,3252,3255,3258,3261,3263,3266,3269,3272],{},[2749,3253,3254],{},"20",[2749,3256,3257],{},"DC4",[2749,3259,3260],{},"52",[2749,3262,2850],{},[2749,3264,3265],{},"84",[2749,3267,3268],{},"T",[2749,3270,3271],{},"116",[2749,3273,3274],{},"t",[2704,3276,3277,3280,3283,3286,3288,3291,3294,3297],{},[2749,3278,3279],{},"21",[2749,3281,3282],{},"NAK",[2749,3284,3285],{},"53",[2749,3287,2875],{},[2749,3289,3290],{},"85",[2749,3292,3293],{},"U",[2749,3295,3296],{},"117",[2749,3298,3299],{},"u",[2704,3301,3302,3305,3308,3311,3313,3316,3319,3322],{},[2749,3303,3304],{},"22",[2749,3306,3307],{},"SYN",[2749,3309,3310],{},"54",[2749,3312,2900],{},[2749,3314,3315],{},"86",[2749,3317,3318],{},"V",[2749,3320,3321],{},"118",[2749,3323,3324],{},"v",[2704,3326,3327,3330,3333,3336,3338,3341,3344,3347],{},[2749,3328,3329],{},"23",[2749,3331,3332],{},"TB",[2749,3334,3335],{},"55",[2749,3337,2925],{},[2749,3339,3340],{},"87",[2749,3342,3343],{},"W",[2749,3345,3346],{},"119",[2749,3348,3349],{},"w",[2704,3351,3352,3355,3358,3361,3363,3366,3369,3372],{},[2749,3353,3354],{},"24",[2749,3356,3357],{},"CAN",[2749,3359,3360],{},"56",[2749,3362,2951],{},[2749,3364,3365],{},"88",[2749,3367,3368],{},"X",[2749,3370,3371],{},"120",[2749,3373,3374],{},"x",[2704,3376,3377,3380,3383,3386,3388,3391,3394,3397],{},[2749,3378,3379],{},"25",[2749,3381,3382],{},"EM",[2749,3384,3385],{},"57",[2749,3387,2976],{},[2749,3389,3390],{},"89",[2749,3392,3393],{},"Y",[2749,3395,3396],{},"121",[2749,3398,3399],{},"y",[2704,3401,3402,3405,3408,3411,3414,3417,3420,3423],{},[2749,3403,3404],{},"26",[2749,3406,3407],{},"SUB",[2749,3409,3410],{},"58",[2749,3412,3413],{},":",[2749,3415,3416],{},"90",[2749,3418,3419],{},"Z",[2749,3421,3422],{},"122",[2749,3424,3425],{},"z",[2704,3427,3428,3431,3434,3437,3439,3442,3445,3448],{},[2749,3429,3430],{},"27",[2749,3432,3433],{},"ESC",[2749,3435,3436],{},"59",[2749,3438,2618],{},[2749,3440,3441],{},"91",[2749,3443,3444],{},"[",[2749,3446,3447],{},"123",[2749,3449,101],{},[2704,3451,3452,3455,3458,3461,3464,3467,3469,3472],{},[2749,3453,3454],{},"28",[2749,3456,3457],{},"FS",[2749,3459,3460],{},"60",[2749,3462,3463],{},"\u003C",[2749,3465,3466],{},"92",[2749,3468,3139],{},[2749,3470,3471],{},"124",[2749,3473,3474],{},"|",[2704,3476,3477,3480,3483,3486,3488,3491,3494,3497],{},[2749,3478,3479],{},"29",[2749,3481,3482],{},"GS",[2749,3484,3485],{},"61",[2749,3487,47],{},[2749,3489,3490],{},"93",[2749,3492,3493],{},"]",[2749,3495,3496],{},"125",[2749,3498,107],{},[2704,3500,3501,3504,3507,3510,3512,3515,3518,3521],{},[2749,3502,3503],{},"30",[2749,3505,3506],{},"RS",[2749,3508,3509],{},"62",[2749,3511,986],{},[2749,3513,3514],{},"94",[2749,3516,3517],{},"^",[2749,3519,3520],{},"126",[2749,3522,3523],{},"`",[2704,3525,3526,3529,3532,3535,3538,3540,3543,3546],{},[2749,3527,3528],{},"31",[2749,3530,3531],{},"US",[2749,3533,3534],{},"63",[2749,3536,3537],{},"?",[2749,3539,638],{},[2749,3541,3542],{},"_",[2749,3544,3545],{},"127",[2749,3547,3548],{},"DEL",[19,3550,3551,3552,3555],{},"ASCII 码大致由以下",[667,3553,3554],{},"两部分组","成：",[3557,3558,3559,3566],"ul",{},[653,3560,3561,3562,3565],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[667,3563,3564],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[653,3567,3568,3569,3572],{},"ASCII 打印字符：数字 ",[667,3570,3571],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1752,3574,3576],{"id":3575},"_134转义字符","1.3.4转义字符",[26,3578,3580],{"className":2556,"code":3579,"language":2558,"meta":31,"style":31},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[33,3581,3582,3587,3603,3617,3622,3635,3640],{"__ignoreMap":31},[36,3583,3584],{"class":38,"line":39},[36,3585,3586],{"class":2621},"\u002F\u002F换行符\n",[36,3588,3589,3592,3595,3598,3600],{"class":38,"line":54},[36,3590,3591],{"class":42},"cout ",[36,3593,3594],{"class":46},"\u003C\u003C",[36,3596,3597],{"class":50},"\"hello world\u002Fn\"",[36,3599,2618],{"class":42},[36,3601,3602],{"class":2621}," \u002F\u002F就等同于如下：\n",[36,3604,3605,3607,3609,3612,3614],{"class":38,"line":66},[36,3606,3591],{"class":42},[36,3608,3594],{"class":46},[36,3610,3611],{"class":50},"\"hello world\"",[36,3613,3594],{"class":46},[36,3615,3616],{"class":42},"endl;\n",[36,3618,3619],{"class":38,"line":73},[36,3620,3621],{"class":2621},"\u002F\u002F反斜杠\n",[36,3623,3624,3626,3628,3631,3633],{"class":38,"line":86},[36,3625,3591],{"class":42},[36,3627,3594],{"class":46},[36,3629,3630],{"class":50},"\"\u002F\u002F\"",[36,3632,3594],{"class":46},[36,3634,3616],{"class":42},[36,3636,3637],{"class":38,"line":126},[36,3638,3639],{"class":2621},"\u002F\u002F水平制表符\n",[36,3641,3642,3644,3646,3649,3652,3655,3657,3660],{"class":38,"line":131},[36,3643,3591],{"class":42},[36,3645,3594],{"class":46},[36,3647,3648],{"class":50},"\"aaaa",[36,3650,3651],{"class":62},"\\t",[36,3653,3654],{"class":50},"helloworld\"",[36,3656,3594],{"class":46},[36,3658,3659],{"class":42},"endl;",[36,3661,3662],{"class":2621}," \u002F\u002F输出窗口时有对齐效果\n",[1752,3664,3666],{"id":3665},"_135字符串型","1.3.5字符串型",[19,3668,3669,3670,3672],{},"char 变量名",[36,3671],{},"=\"字符串值\"",[26,3674,3676],{"className":2556,"code":3675,"language":2558,"meta":31,"style":31},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[33,3677,3678,3683,3688,3693,3698,3712,3724,3729,3734,3745],{"__ignoreMap":31},[36,3679,3680],{"class":38,"line":39},[36,3681,3682],{"class":2621},"\u002F\u002Fc风格字符串\n",[36,3684,3685],{"class":38,"line":54},[36,3686,3687],{"class":2621},"\u002F\u002F注意事项：\n",[36,3689,3690],{"class":38,"line":66},[36,3691,3692],{"class":2621},"\u002F\u002F1.char字符串名[]\n",[36,3694,3695],{"class":38,"line":73},[36,3696,3697],{"class":2621},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,3699,3700,3702,3705,3707,3709],{"class":38,"line":86},[36,3701,2658],{"class":46},[36,3703,3704],{"class":42}," str[]",[36,3706,47],{"class":46},[36,3708,3611],{"class":50},[36,3710,3711],{"class":42},";\n",[36,3713,3714,3716,3718,3720,3722],{"class":38,"line":126},[36,3715,3591],{"class":42},[36,3717,3594],{"class":46},[36,3719,669],{"class":42},[36,3721,3594],{"class":46},[36,3723,3616],{"class":42},[36,3725,3726],{"class":38,"line":131},[36,3727,3728],{"class":2621},"\u002F\u002Fc++风格字符串\n",[36,3730,3731],{"class":38,"line":225},[36,3732,3733],{"class":2621},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,3735,3736,3739,3741,3743],{"class":38,"line":235},[36,3737,3738],{"class":42},"string str2",[36,3740,47],{"class":46},[36,3742,3611],{"class":50},[36,3744,3711],{"class":42},[36,3746,3747,3749,3751,3754,3756],{"class":38,"line":377},[36,3748,3591],{"class":42},[36,3750,3594],{"class":46},[36,3752,3753],{"class":42},"str2",[36,3755,3594],{"class":46},[36,3757,3616],{"class":42},[1752,3759,3761],{"id":3760},"_136布尔类型bool","1.3.6布尔类型bool",[26,3763,3765],{"className":2556,"code":3764,"language":2558,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,3766,3767,3782],{"__ignoreMap":31},[36,3768,3769,3772,3775,3777,3780],{"class":38,"line":39},[36,3770,3771],{"class":46},"bool",[36,3773,3774],{"class":42}," flag",[36,3776,47],{"class":46},[36,3778,3779],{"class":62},"true",[36,3781,3711],{"class":42},[36,3783,3784,3787,3790,3793,3795,3797],{"class":38,"line":54},[36,3785,3786],{"class":42},"cout",[36,3788,3789],{"class":46},"\u003C\u003Csizeof",[36,3791,3792],{"class":42},"(flag)",[36,3794,3594],{"class":46},[36,3796,3659],{"class":42},[36,3798,3799],{"class":2621}," \u002F\u002F查看布尔占内存空间\n",[14,3801,3803],{"id":3802},"_14键盘输入cin","1.4键盘输入cin",[26,3805,3807],{"className":2556,"code":3806,"language":2558,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,3808,3809,3822,3839,3850],{"__ignoreMap":31},[36,3810,3811,3813,3816,3818,3820],{"class":38,"line":39},[36,3812,2570],{"class":46},[36,3814,3815],{"class":42}," a",[36,3817,47],{"class":46},[36,3819,2751],{"class":62},[36,3821,3711],{"class":42},[36,3823,3824,3826,3828,3831,3833,3835,3837],{"class":38,"line":54},[36,3825,3786],{"class":42},[36,3827,3594],{"class":46},[36,3829,3830],{"class":50},"\"请给整型变量a赋值\"",[36,3832,3594],{"class":46},[36,3834,2796],{"class":42},[36,3836,3594],{"class":46},[36,3838,3616],{"class":42},[36,3840,3841,3844,3847],{"class":38,"line":66},[36,3842,3843],{"class":42},"cin ",[36,3845,3846],{"class":46},">>",[36,3848,3849],{"class":42}," a;\n",[36,3851,3852,3854,3856,3859,3862,3864,3866],{"class":38,"line":73},[36,3853,3591],{"class":42},[36,3855,3594],{"class":46},[36,3857,3858],{"class":50}," \"整型变量a=\"",[36,3860,3861],{"class":46}," \u003C\u003C",[36,3863,2796],{"class":42},[36,3865,3594],{"class":46},[36,3867,3616],{"class":42},[14,3869,3871],{"id":3870},"_15运算符","1.5运算符",[1752,3873,3875],{"id":3874},"_151算术运算符","1.5.1算术运算符",[19,3877,3878,3882],{},[3879,3880],"img",{"alt":31,"src":3881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[650,3884,3885,3888,3891],{},[653,3886,3887],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[653,3889,3890],{},"两个小数不可以做取模运算",[653,3892,3893],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1752,3895,3897],{"id":3896},"_152赋值运算符","1.5.2赋值运算符",[19,3899,3900],{},[3879,3901],{"alt":31,"src":3902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1752,3904,3906],{"id":3905},"_153比较运算符","1.5.3比较运算符",[19,3908,3909],{},[3879,3910],{"alt":31,"src":3911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1752,3913,3915],{"id":3914},"_154逻辑运算符","1.5.4逻辑运算符",[19,3917,3918],{},[3879,3919],{"alt":31,"src":3920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3922,3924],{"id":3923},"_16程序流程结构","1.6程序流程结构",[1752,3926,3928],{"id":3927},"_161选择结构","1.6.1选择结构",[650,3930,3931],{},[653,3932,3933],{},"if语句\n单行、多行、多条件if语句",[26,3935,3937],{"className":2556,"code":3936,"language":2558,"meta":31,"style":31},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[33,3938,3939,3944,3959,3964,3978,3983,3988,3996,4008,4012,4025,4029,4034,4038,4051,4055,4060,4080,4084,4097,4101,4127,4131,4147,4151,4155,4159,4172,4176],{"__ignoreMap":31},[36,3940,3941],{"class":38,"line":39},[36,3942,3943],{"class":2621},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,3945,3946,3949,3952,3954,3957],{"class":38,"line":54},[36,3947,3948],{"class":46},"if",[36,3950,3951],{"class":42},"(score",[36,3953,986],{"class":46},[36,3955,3956],{"class":62},"600",[36,3958,123],{"class":42},[36,3960,3961],{"class":38,"line":66},[36,3962,3963],{"class":42},"{\n",[36,3965,3966,3969,3971,3974,3976],{"class":38,"line":73},[36,3967,3968],{"class":42},"    cout",[36,3970,3594],{"class":46},[36,3972,3973],{"class":50},"'这是单行if语句'",[36,3975,3594],{"class":46},[36,3977,3616],{"class":42},[36,3979,3980],{"class":38,"line":86},[36,3981,3982],{"class":42},"}\n",[36,3984,3985],{"class":38,"line":126},[36,3986,3987],{"class":2621},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,3989,3990,3992,3994],{"class":38,"line":131},[36,3991,3843],{"class":42},[36,3993,3846],{"class":46},[36,3995,555],{"class":42},[36,3997,3998,4000,4002,4004,4006],{"class":38,"line":225},[36,3999,3948],{"class":46},[36,4001,3951],{"class":42},[36,4003,896],{"class":46},[36,4005,3956],{"class":62},[36,4007,123],{"class":42},[36,4009,4010],{"class":38,"line":235},[36,4011,3963],{"class":42},[36,4013,4014,4016,4018,4021,4023],{"class":38,"line":377},[36,4015,3968],{"class":42},[36,4017,3846],{"class":46},[36,4019,4020],{"class":50},"\"小于等于600\"",[36,4022,3594],{"class":46},[36,4024,3616],{"class":42},[36,4026,4027],{"class":38,"line":617},[36,4028,3982],{"class":42},[36,4030,4031],{"class":38,"line":643},[36,4032,4033],{"class":46},"else\n",[36,4035,4036],{"class":38,"line":921},[36,4037,3963],{"class":42},[36,4039,4040,4042,4044,4047,4049],{"class":38,"line":934},[36,4041,3968],{"class":42},[36,4043,3846],{"class":46},[36,4045,4046],{"class":50},"\"大于600\"",[36,4048,3846],{"class":46},[36,4050,3616],{"class":42},[36,4052,4053],{"class":38,"line":939},[36,4054,3982],{"class":42},[36,4056,4057],{"class":38,"line":949},[36,4058,4059],{"class":2621},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,4061,4062,4064,4067,4069,4071,4074,4076,4078],{"class":38,"line":962},[36,4063,3948],{"class":46},[36,4065,4066],{"class":42}," (",[36,4068,2751],{"class":62},[36,4070,3463],{"class":46},[36,4072,4073],{"class":42},"num",[36,4075,3463],{"class":46},[36,4077,1070],{"class":62},[36,4079,123],{"class":42},[36,4081,4082],{"class":38,"line":974},[36,4083,3963],{"class":42},[36,4085,4086,4088,4090,4093,4095],{"class":38,"line":979},[36,4087,3968],{"class":42},[36,4089,3594],{"class":46},[36,4091,4092],{"class":50},"\"小于100\"",[36,4094,3594],{"class":46},[36,4096,3616],{"class":42},[36,4098,4099],{"class":38,"line":994},[36,4100,3982],{"class":42},[36,4102,4103,4106,4109,4112,4114,4116,4119,4121,4123,4125],{"class":38,"line":1006},[36,4104,4105],{"class":46},"else",[36,4107,4108],{"class":46}," if",[36,4110,4111],{"class":42}," (nmu",[36,4113,2127],{"class":46},[36,4115,1070],{"class":62},[36,4117,4118],{"class":46},"&&",[36,4120,4073],{"class":42},[36,4122,3463],{"class":46},[36,4124,1059],{"class":62},[36,4126,123],{"class":42},[36,4128,4129],{"class":38,"line":1011},[36,4130,3963],{"class":42},[36,4132,4133,4135,4137,4140,4142,4144],{"class":38,"line":1023},[36,4134,3968],{"class":42},[36,4136,3594],{"class":46},[36,4138,4139],{"class":50},"\"不小于100且小于200\"",[36,4141,3594],{"class":46},[36,4143,3659],{"class":42},[36,4145,4146],{"class":2621}," \u002F\u002F可以无限else if,python中是elif：\n",[36,4148,4149],{"class":38,"line":1028},[36,4150,3982],{"class":42},[36,4152,4153],{"class":38,"line":1033},[36,4154,4033],{"class":46},[36,4156,4157],{"class":38,"line":1053},[36,4158,3963],{"class":42},[36,4160,4161,4163,4165,4168,4170],{"class":38,"line":1064},[36,4162,3968],{"class":42},[36,4164,3594],{"class":46},[36,4166,4167],{"class":50},"\"不小于200\"",[36,4169,3594],{"class":46},[36,4171,3616],{"class":42},[36,4173,4174],{"class":38,"line":1075},[36,4175,3982],{"class":42},[36,4177,4178],{"class":38,"line":2291},[36,4179,4180],{"class":2621},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[650,4182,4183],{"start":54},[653,4184,4185],{},"三目运算符",[26,4187,4189],{"className":2556,"code":4188,"language":2558,"meta":31,"style":31},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[33,4190,4191,4196,4201,4227,4249,4266,4271,4294,4309],{"__ignoreMap":31},[36,4192,4193],{"class":38,"line":39},[36,4194,4195],{"class":2621},"\u002F\u002F创建三个变量a,b,c\n",[36,4197,4198],{"class":38,"line":54},[36,4199,4200],{"class":2621},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,4202,4203,4205,4207,4209,4211,4214,4216,4218,4221,4223,4225],{"class":38,"line":66},[36,4204,2570],{"class":46},[36,4206,3815],{"class":42},[36,4208,47],{"class":46},[36,4210,3254],{"class":62},[36,4212,4213],{"class":42},",b",[36,4215,47],{"class":46},[36,4217,3002],{"class":62},[36,4219,4220],{"class":42},",c",[36,4222,47],{"class":46},[36,4224,2751],{"class":62},[36,4226,3711],{"class":42},[36,4228,4229,4231,4233,4236,4238,4240,4242,4244,4246],{"class":38,"line":73},[36,4230,2845],{"class":42},[36,4232,47],{"class":46},[36,4234,4235],{"class":42},"(a",[36,4237,986],{"class":46},[36,4239,2820],{"class":42},[36,4241,3537],{"class":46},[36,4243,2796],{"class":42},[36,4245,3413],{"class":46},[36,4247,4248],{"class":42},"b)\n",[36,4250,4251,4253,4255,4258,4260,4262,4264],{"class":38,"line":86},[36,4252,3786],{"class":42},[36,4254,3594],{"class":46},[36,4256,4257],{"class":50},"\"c=\"",[36,4259,3594],{"class":46},[36,4261,2845],{"class":42},[36,4263,3594],{"class":46},[36,4265,3616],{"class":42},[36,4267,4268],{"class":38,"line":126},[36,4269,4270],{"class":2621},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,4272,4273,4275,4277,4279,4281,4283,4285,4288,4290,4292],{"class":38,"line":131},[36,4274,4235],{"class":42},[36,4276,986],{"class":46},[36,4278,2820],{"class":42},[36,4280,3537],{"class":46},[36,4282,2796],{"class":42},[36,4284,3413],{"class":46},[36,4286,4287],{"class":42},"b)",[36,4289,47],{"class":46},[36,4291,1070],{"class":62},[36,4293,3711],{"class":42},[36,4295,4296,4298,4300,4302,4304,4306],{"class":38,"line":225},[36,4297,3786],{"class":42},[36,4299,3594],{"class":46},[36,4301,2796],{"class":42},[36,4303,3594],{"class":46},[36,4305,3659],{"class":42},[36,4307,4308],{"class":2621}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,4310,4311,4313,4315,4317,4319,4321],{"class":38,"line":235},[36,4312,3786],{"class":42},[36,4314,3594],{"class":46},[36,4316,2820],{"class":42},[36,4318,3594],{"class":46},[36,4320,3659],{"class":42},[36,4322,4323],{"class":2621}," \u002F\u002F10   a>b,b还是原值\n",[650,4325,4326],{"start":66},[653,4327,4328],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,4330,4332],{"className":2556,"code":4331,"language":2558,"meta":31,"style":31},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[33,4333,4334,4339,4347,4360,4370,4374,4388,4401,4411,4419,4424,4449,4470,4492,4513,4535,4556,4576,4581],{"__ignoreMap":31},[36,4335,4336],{"class":38,"line":39},[36,4337,4338],{"class":2621},"\u002F\u002F案例-电影打分\n",[36,4340,4341,4344],{"class":38,"line":54},[36,4342,4343],{"class":46},"#include",[36,4345,4346],{"class":50},"\u003Ciostream>\n",[36,4348,4349,4352,4355,4358],{"class":38,"line":66},[36,4350,4351],{"class":46},"using",[36,4353,4354],{"class":46}," namespace",[36,4356,4357],{"class":79}," std",[36,4359,3711],{"class":42},[36,4361,4362,4364,4367],{"class":38,"line":73},[36,4363,2570],{"class":46},[36,4365,4366],{"class":79}," main",[36,4368,4369],{"class":42},"()\n",[36,4371,4372],{"class":38,"line":86},[36,4373,3963],{"class":42},[36,4375,4376,4379,4382,4384,4386],{"class":38,"line":126},[36,4377,4378],{"class":46},"    int",[36,4380,4381],{"class":42}," score",[36,4383,47],{"class":46},[36,4385,2751],{"class":62},[36,4387,3711],{"class":42},[36,4389,4390,4392,4394,4397,4399],{"class":38,"line":131},[36,4391,3968],{"class":42},[36,4393,3594],{"class":46},[36,4395,4396],{"class":50},"\"电影打分：\"",[36,4398,3594],{"class":46},[36,4400,3616],{"class":42},[36,4402,4403,4406,4408],{"class":38,"line":225},[36,4404,4405],{"class":42},"    cin",[36,4407,3846],{"class":46},[36,4409,4410],{"class":42},"score;\n",[36,4412,4413,4416],{"class":38,"line":235},[36,4414,4415],{"class":46},"    switch",[36,4417,4418],{"class":42},"(score)\n",[36,4420,4421],{"class":38,"line":377},[36,4422,4423],{"class":42},"    {\n",[36,4425,4426,4429,4432,4435,4437,4440,4442,4444,4447],{"class":38,"line":617},[36,4427,4428],{"class":46},"        case",[36,4430,4431],{"class":62}," 10",[36,4433,4434],{"class":42},":cout",[36,4436,3594],{"class":46},[36,4438,4439],{"class":50},"\"经典\"",[36,4441,3594],{"class":46},[36,4443,3659],{"class":42},[36,4445,4446],{"class":46},"break",[36,4448,3711],{"class":42},[36,4450,4451,4453,4456,4458,4460,4462,4464,4466,4468],{"class":38,"line":643},[36,4452,4428],{"class":46},[36,4454,4455],{"class":62}," 9",[36,4457,4434],{"class":42},[36,4459,3594],{"class":46},[36,4461,4439],{"class":50},[36,4463,3594],{"class":46},[36,4465,3659],{"class":42},[36,4467,4446],{"class":46},[36,4469,3711],{"class":42},[36,4471,4472,4474,4477,4479,4481,4484,4486,4488,4490],{"class":38,"line":921},[36,4473,4428],{"class":46},[36,4475,4476],{"class":62}," 8",[36,4478,4434],{"class":42},[36,4480,3594],{"class":46},[36,4482,4483],{"class":50},"\"非常好\"",[36,4485,3594],{"class":46},[36,4487,3659],{"class":42},[36,4489,4446],{"class":46},[36,4491,3711],{"class":42},[36,4493,4494,4496,4499,4501,4503,4505,4507,4509,4511],{"class":38,"line":934},[36,4495,4428],{"class":46},[36,4497,4498],{"class":62}," 7",[36,4500,4434],{"class":42},[36,4502,3594],{"class":46},[36,4504,4483],{"class":50},[36,4506,3594],{"class":46},[36,4508,3659],{"class":42},[36,4510,4446],{"class":46},[36,4512,3711],{"class":42},[36,4514,4515,4517,4520,4522,4524,4527,4529,4531,4533],{"class":38,"line":939},[36,4516,4428],{"class":46},[36,4518,4519],{"class":62}," 6",[36,4521,4434],{"class":42},[36,4523,3594],{"class":46},[36,4525,4526],{"class":50},"\"一般\"",[36,4528,3594],{"class":46},[36,4530,3659],{"class":42},[36,4532,4446],{"class":46},[36,4534,3711],{"class":42},[36,4536,4537,4539,4542,4544,4546,4548,4550,4552,4554],{"class":38,"line":949},[36,4538,4428],{"class":46},[36,4540,4541],{"class":62}," 5",[36,4543,4434],{"class":42},[36,4545,3594],{"class":46},[36,4547,4526],{"class":50},[36,4549,3594],{"class":46},[36,4551,3659],{"class":42},[36,4553,4446],{"class":46},[36,4555,3711],{"class":42},[36,4557,4558,4561,4563,4565,4568,4570,4572,4574],{"class":38,"line":962},[36,4559,4560],{"class":46},"        default",[36,4562,4434],{"class":42},[36,4564,3594],{"class":46},[36,4566,4567],{"class":50},"\"烂片\"",[36,4569,3594],{"class":46},[36,4571,3659],{"class":42},[36,4573,4446],{"class":46},[36,4575,3711],{"class":42},[36,4577,4578],{"class":38,"line":974},[36,4579,4580],{"class":42},"    }\n",[36,4582,4583],{"class":38,"line":979},[36,4584,3982],{"class":42},[19,4586,4587],{},"if和switch区别：",[3557,4589,4590,4593],{},[653,4591,4592],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[653,4594,4595],{},"switch优点：结构清晰，执行效率高",[1752,4597,4599],{"id":4598},"_162循环结构","1.6.2循环结构",[650,4601,4602],{},[653,4603,4604],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,4606,4608],{"className":2556,"code":4607,"language":2558,"meta":31,"style":31},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[33,4609,4610,4615,4623,4627,4640,4654,4658,4678,4688,4692,4704],{"__ignoreMap":31},[36,4611,4612],{"class":38,"line":39},[36,4613,4614],{"class":2621},"\u002F\u002F打印0-9数字\n",[36,4616,4617,4619,4621],{"class":38,"line":54},[36,4618,2570],{"class":46},[36,4620,4366],{"class":79},[36,4622,4369],{"class":42},[36,4624,4625],{"class":38,"line":66},[36,4626,3963],{"class":42},[36,4628,4629,4631,4634,4636,4638],{"class":38,"line":73},[36,4630,4378],{"class":46},[36,4632,4633],{"class":42}," num",[36,4635,47],{"class":46},[36,4637,2751],{"class":62},[36,4639,3711],{"class":42},[36,4641,4642,4645,4648,4650,4652],{"class":38,"line":86},[36,4643,4644],{"class":46},"    while",[36,4646,4647],{"class":42},"(num",[36,4649,3463],{"class":46},[36,4651,3002],{"class":62},[36,4653,123],{"class":42},[36,4655,4656],{"class":38,"line":126},[36,4657,4423],{"class":42},[36,4659,4660,4663,4666,4668,4670,4672,4675],{"class":38,"line":131},[36,4661,4662],{"class":79},"       std",[36,4664,4665],{"class":42},"::cout",[36,4667,3594],{"class":46},[36,4669,4073],{"class":42},[36,4671,3594],{"class":46},[36,4673,4674],{"class":79},"std",[36,4676,4677],{"class":42},"::endl;\n",[36,4679,4680,4683,4686],{"class":38,"line":225},[36,4681,4682],{"class":42},"        num",[36,4684,4685],{"class":46},"++",[36,4687,3711],{"class":42},[36,4689,4690],{"class":38,"line":235},[36,4691,4580],{"class":42},[36,4693,4694,4697,4699,4702],{"class":38,"line":377},[36,4695,4696],{"class":79},"    system",[36,4698,92],{"class":42},[36,4700,4701],{"class":50},"\"pause\"",[36,4703,123],{"class":42},[36,4705,4706],{"class":38,"line":617},[36,4707,3982],{"class":42},[19,4709,4710],{},"注意：写好循环条件，避免死循环情况",[26,4712,4714],{"className":2556,"code":4713,"language":2558,"meta":31,"style":31},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[33,4715,4716,4721,4728,4735,4745,4753,4757,4762,4789,4793,4798,4806,4833,4838,4843,4856,4866,4870,4880,4885,4897,4902,4916,4920,4935,4939,4952,4956,4961,4965,4978,4985,4989,4994,4999,5004],{"__ignoreMap":31},[36,4717,4718],{"class":38,"line":39},[36,4719,4720],{"class":2621},"\u002F\u002F循环结构-猜数字\n",[36,4722,4723,4725],{"class":38,"line":54},[36,4724,4343],{"class":46},[36,4726,4727],{"class":50}," \u003Ciostream>\n",[36,4729,4730,4732],{"class":38,"line":66},[36,4731,4343],{"class":46},[36,4733,4734],{"class":50}," \u003Cctime>\n",[36,4736,4737,4739,4741,4743],{"class":38,"line":73},[36,4738,4351],{"class":46},[36,4740,4354],{"class":46},[36,4742,4357],{"class":79},[36,4744,3711],{"class":42},[36,4746,4747,4749,4751],{"class":38,"line":86},[36,4748,2570],{"class":46},[36,4750,4366],{"class":79},[36,4752,4369],{"class":42},[36,4754,4755],{"class":38,"line":126},[36,4756,3963],{"class":42},[36,4758,4759],{"class":38,"line":131},[36,4760,4761],{"class":2621},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,4763,4764,4767,4770,4773,4776,4778,4781,4783,4786],{"class":38,"line":225},[36,4765,4766],{"class":79},"    srand",[36,4768,4769],{"class":42},"((",[36,4771,4772],{"class":46},"unsigned",[36,4774,4775],{"class":46}," int",[36,4777,2985],{"class":42},[36,4779,4780],{"class":79},"time",[36,4782,92],{"class":42},[36,4784,4785],{"class":62},"NULL",[36,4787,4788],{"class":42},"));\n",[36,4790,4791],{"class":38,"line":235},[36,4792,70],{"emptyLinePlaceholder":69},[36,4794,4795],{"class":38,"line":377},[36,4796,4797],{"class":2621},"    \u002F\u002F1.系统生成随机数\n",[36,4799,4800,4803],{"class":38,"line":617},[36,4801,4802],{"class":2621},"    \u002F\u002Frand()%100",[36,4804,4805],{"class":2621}," \u002F\u002F生成0-99的随机数\n",[36,4807,4808,4810,4812,4814,4817,4820,4822,4824,4826,4828,4830],{"class":38,"line":643},[36,4809,4378],{"class":46},[36,4811,4633],{"class":42},[36,4813,47],{"class":46},[36,4815,4816],{"class":79},"rand",[36,4818,4819],{"class":42},"()",[36,4821,2884],{"class":46},[36,4823,1070],{"class":62},[36,4825,1885],{"class":46},[36,4827,1906],{"class":62},[36,4829,2618],{"class":42},[36,4831,4832],{"class":2621}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,4834,4835],{"class":38,"line":921},[36,4836,4837],{"class":2621},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,4839,4840],{"class":38,"line":934},[36,4841,4842],{"class":2621},"    \u002F\u002F2.玩家猜测\n",[36,4844,4845,4847,4850,4852,4854],{"class":38,"line":939},[36,4846,4378],{"class":46},[36,4848,4849],{"class":42}," val",[36,4851,47],{"class":46},[36,4853,2751],{"class":62},[36,4855,3711],{"class":42},[36,4857,4858,4860,4862,4864],{"class":38,"line":949},[36,4859,4644],{"class":46},[36,4861,4066],{"class":42},[36,4863,1906],{"class":62},[36,4865,123],{"class":42},[36,4867,4868],{"class":38,"line":962},[36,4869,4423],{"class":42},[36,4871,4872,4875,4877],{"class":38,"line":974},[36,4873,4874],{"class":42},"        cin",[36,4876,3846],{"class":46},[36,4878,4879],{"class":42},"val;\n",[36,4881,4882],{"class":38,"line":979},[36,4883,4884],{"class":2621},"        \u002F\u002F3.判断玩家猜测\n",[36,4886,4887,4889,4892,4894],{"class":38,"line":994},[36,4888,890],{"class":46},[36,4890,4891],{"class":42},"(val",[36,4893,3463],{"class":46},[36,4895,4896],{"class":42},"num) \n",[36,4898,4899],{"class":38,"line":1006},[36,4900,4901],{"class":42},"        {\n",[36,4903,4904,4907,4909,4912,4914],{"class":38,"line":1011},[36,4905,4906],{"class":42},"            cout",[36,4908,3594],{"class":46},[36,4910,4911],{"class":50},"\"猜小了！\"",[36,4913,3594],{"class":46},[36,4915,3616],{"class":42},[36,4917,4918],{"class":38,"line":1023},[36,4919,2204],{"class":42},[36,4921,4922,4925,4927,4930,4932],{"class":38,"line":1028},[36,4923,4924],{"class":46},"        else",[36,4926,4108],{"class":46},[36,4928,4929],{"class":42}," (val",[36,4931,986],{"class":46},[36,4933,4934],{"class":42},"num)\n",[36,4936,4937],{"class":38,"line":1033},[36,4938,4901],{"class":42},[36,4940,4941,4943,4945,4948,4950],{"class":38,"line":1053},[36,4942,4906],{"class":42},[36,4944,3594],{"class":46},[36,4946,4947],{"class":50},"\"猜大了！\"",[36,4949,3594],{"class":46},[36,4951,3616],{"class":42},[36,4953,4954],{"class":38,"line":1064},[36,4955,2204],{"class":42},[36,4957,4958],{"class":38,"line":1075},[36,4959,4960],{"class":46},"        else\n",[36,4962,4963],{"class":38,"line":2291},[36,4964,4901],{"class":42},[36,4966,4967,4969,4971,4974,4976],{"class":38,"line":2329},[36,4968,4906],{"class":42},[36,4970,3594],{"class":46},[36,4972,4973],{"class":50},"\"猜对了！\"",[36,4975,3594],{"class":46},[36,4977,3616],{"class":42},[36,4979,4980,4983],{"class":38,"line":2334},[36,4981,4982],{"class":46},"            break",[36,4984,3711],{"class":42},[36,4986,4987],{"class":38,"line":2339},[36,4988,2204],{"class":42},[36,4990,4991],{"class":38,"line":2365},[36,4992,4993],{"class":2621},"        \u002F\u002F猜对 退出游戏\n",[36,4995,4996],{"class":38,"line":2373},[36,4997,4998],{"class":2621},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,5000,5002],{"class":38,"line":5001},35,[36,5003,4580],{"class":42},[36,5005,5007],{"class":38,"line":5006},36,[36,5008,3982],{"class":42},[650,5010,5011],{"start":54},[653,5012,5013,5014,5017],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[667,5015,5016],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,5019,5021],{"className":2556,"code":5020,"language":2558,"meta":31,"style":31},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[33,5022,5023,5028,5036,5040,5052,5060,5064,5081,5088,5092,5105,5115],{"__ignoreMap":31},[36,5024,5025],{"class":38,"line":39},[36,5026,5027],{"class":2621},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,5029,5030,5032,5034],{"class":38,"line":54},[36,5031,2570],{"class":46},[36,5033,4366],{"class":79},[36,5035,4369],{"class":42},[36,5037,5038],{"class":38,"line":66},[36,5039,3963],{"class":42},[36,5041,5042,5044,5046,5048,5050],{"class":38,"line":73},[36,5043,4378],{"class":46},[36,5045,4633],{"class":42},[36,5047,47],{"class":46},[36,5049,2751],{"class":62},[36,5051,3711],{"class":42},[36,5053,5054,5057],{"class":38,"line":86},[36,5055,5056],{"class":46},"    do",[36,5058,5059],{"class":42}," \n",[36,5061,5062],{"class":38,"line":126},[36,5063,4423],{"class":42},[36,5065,5066,5069,5071,5073,5075,5077,5079],{"class":38,"line":131},[36,5067,5068],{"class":79},"        std",[36,5070,4665],{"class":42},[36,5072,3594],{"class":46},[36,5074,4073],{"class":42},[36,5076,3594],{"class":46},[36,5078,4674],{"class":79},[36,5080,4677],{"class":42},[36,5082,5083,5085],{"class":38,"line":225},[36,5084,4682],{"class":42},[36,5086,5087],{"class":46},"++\n",[36,5089,5090],{"class":38,"line":235},[36,5091,4580],{"class":42},[36,5093,5094,5096,5098,5100,5102],{"class":38,"line":377},[36,5095,4644],{"class":46},[36,5097,4647],{"class":42},[36,5099,3463],{"class":46},[36,5101,3002],{"class":62},[36,5103,5104],{"class":42},");\n",[36,5106,5107,5109,5111,5113],{"class":38,"line":617},[36,5108,4696],{"class":79},[36,5110,92],{"class":42},[36,5112,4701],{"class":50},[36,5114,5104],{"class":42},[36,5116,5117],{"class":38,"line":643},[36,5118,3982],{"class":42},[19,5120,5121],{},"案例-水仙花数",[19,5123,5124],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5126,5127],{},"例如：1^3+5^3+3^3=153",[19,5129,5130],{},"请用do...while语句，求出所有3位数的水仙花数",[26,5132,5134],{"className":2556,"code":5133,"language":2558,"meta":31,"style":31},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[33,5135,5136,5142,5152,5160,5164,5169,5181,5187,5191,5196,5212,5228,5244,5259,5278,5293,5341,5345,5357,5361,5369,5373,5387],{"__ignoreMap":31},[36,5137,5138,5140],{"class":38,"line":39},[36,5139,4343],{"class":46},[36,5141,4727],{"class":50},[36,5143,5144,5146,5148,5150],{"class":38,"line":54},[36,5145,4351],{"class":46},[36,5147,4354],{"class":46},[36,5149,4357],{"class":79},[36,5151,3711],{"class":42},[36,5153,5154,5156,5158],{"class":38,"line":66},[36,5155,2570],{"class":46},[36,5157,4366],{"class":79},[36,5159,4369],{"class":42},[36,5161,5162],{"class":38,"line":73},[36,5163,3963],{"class":42},[36,5165,5166],{"class":38,"line":86},[36,5167,5168],{"class":2621},"    \u002F\u002F1.先打印所有三位数字\n",[36,5170,5171,5173,5175,5177,5179],{"class":38,"line":126},[36,5172,4378],{"class":46},[36,5174,4633],{"class":42},[36,5176,47],{"class":46},[36,5178,1070],{"class":62},[36,5180,3711],{"class":42},[36,5182,5183,5185],{"class":38,"line":131},[36,5184,5056],{"class":46},[36,5186,5059],{"class":42},[36,5188,5189],{"class":38,"line":225},[36,5190,4423],{"class":42},[36,5192,5193],{"class":38,"line":235},[36,5194,5195],{"class":2621},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,5197,5198,5201,5203,5205,5207,5209],{"class":38,"line":377},[36,5199,5200],{"class":46},"        int",[36,5202,3815],{"class":42},[36,5204,47],{"class":46},[36,5206,2751],{"class":62},[36,5208,2618],{"class":42},[36,5210,5211],{"class":2621}," \u002F\u002F个位\n",[36,5213,5214,5216,5219,5221,5223,5225],{"class":38,"line":617},[36,5215,5200],{"class":46},[36,5217,5218],{"class":42}," b",[36,5220,47],{"class":46},[36,5222,2751],{"class":62},[36,5224,2618],{"class":42},[36,5226,5227],{"class":2621}," \u002F\u002F十位\n",[36,5229,5230,5232,5235,5237,5239,5241],{"class":38,"line":643},[36,5231,5200],{"class":46},[36,5233,5234],{"class":42}," c",[36,5236,47],{"class":46},[36,5238,2751],{"class":62},[36,5240,2618],{"class":42},[36,5242,5243],{"class":2621}," \u002F\u002F百位\n",[36,5245,5246,5249,5251,5253,5255,5257],{"class":38,"line":921},[36,5247,5248],{"class":42},"        a",[36,5250,47],{"class":46},[36,5252,4073],{"class":42},[36,5254,2884],{"class":46},[36,5256,3002],{"class":62},[36,5258,3711],{"class":42},[36,5260,5261,5264,5266,5268,5270,5272,5274,5276],{"class":38,"line":934},[36,5262,5263],{"class":42},"        b",[36,5265,47],{"class":46},[36,5267,4073],{"class":42},[36,5269,3139],{"class":46},[36,5271,3002],{"class":62},[36,5273,2884],{"class":46},[36,5275,3002],{"class":62},[36,5277,3711],{"class":42},[36,5279,5280,5283,5285,5287,5289,5291],{"class":38,"line":939},[36,5281,5282],{"class":42},"        c",[36,5284,47],{"class":46},[36,5286,4073],{"class":42},[36,5288,3139],{"class":46},[36,5290,1070],{"class":62},[36,5292,3711],{"class":42},[36,5294,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329,5332,5335,5338],{"class":38,"line":949},[36,5296,890],{"class":46},[36,5298,4235],{"class":42},[36,5300,3011],{"class":46},[36,5302,2796],{"class":42},[36,5304,3011],{"class":46},[36,5306,2796],{"class":42},[36,5308,1885],{"class":46},[36,5310,2820],{"class":42},[36,5312,3011],{"class":46},[36,5314,2820],{"class":42},[36,5316,3011],{"class":46},[36,5318,2820],{"class":42},[36,5320,1885],{"class":46},[36,5322,2845],{"class":42},[36,5324,3011],{"class":46},[36,5326,2845],{"class":42},[36,5328,3011],{"class":46},[36,5330,5331],{"class":42},"c ",[36,5333,5334],{"class":46},"==",[36,5336,5337],{"class":42}," num)",[36,5339,5340],{"class":2621}," \u002F\u002F如果是水仙花数，才打印\n",[36,5342,5343],{"class":38,"line":962},[36,5344,4901],{"class":42},[36,5346,5347,5349,5351,5353,5355],{"class":38,"line":974},[36,5348,4906],{"class":42},[36,5350,3594],{"class":46},[36,5352,4073],{"class":42},[36,5354,3594],{"class":46},[36,5356,3616],{"class":42},[36,5358,5359],{"class":38,"line":979},[36,5360,2204],{"class":42},[36,5362,5363,5365,5367],{"class":38,"line":994},[36,5364,4682],{"class":42},[36,5366,4685],{"class":46},[36,5368,3711],{"class":42},[36,5370,5371],{"class":38,"line":1006},[36,5372,4580],{"class":42},[36,5374,5375,5377,5380,5382,5385],{"class":38,"line":1011},[36,5376,4644],{"class":46},[36,5378,5379],{"class":42}," (num ",[36,5381,3463],{"class":46},[36,5383,5384],{"class":62}," 1000",[36,5386,5104],{"class":42},[36,5388,5389],{"class":38,"line":1023},[36,5390,3982],{"class":42},[650,5392,5393],{"start":66},[653,5394,5395],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,5397,5399],{"className":2556,"code":5398,"language":2558,"meta":31,"style":31},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[33,5400,5401,5406,5435,5439,5451,5455,5460,5471,5478,5482,5496,5500,5507,5511,5523,5532],{"__ignoreMap":31},[36,5402,5403],{"class":38,"line":39},[36,5404,5405],{"class":2621},"\u002F\u002F从数字0-9打印\n",[36,5407,5408,5411,5413,5415,5418,5420,5422,5425,5427,5429,5431,5433],{"class":38,"line":54},[36,5409,5410],{"class":46},"for",[36,5412,92],{"class":42},[36,5414,2570],{"class":46},[36,5416,5417],{"class":42}," i",[36,5419,47],{"class":46},[36,5421,2751],{"class":62},[36,5423,5424],{"class":42},";i",[36,5426,3463],{"class":46},[36,5428,3002],{"class":62},[36,5430,5424],{"class":42},[36,5432,4685],{"class":46},[36,5434,123],{"class":42},[36,5436,5437],{"class":38,"line":66},[36,5438,3963],{"class":42},[36,5440,5441,5443,5445,5447,5449],{"class":38,"line":73},[36,5442,3968],{"class":42},[36,5444,3594],{"class":46},[36,5446,2997],{"class":42},[36,5448,3594],{"class":46},[36,5450,3616],{"class":42},[36,5452,5453],{"class":38,"line":86},[36,5454,3982],{"class":42},[36,5456,5457],{"class":38,"line":126},[36,5458,5459],{"class":2621},"\u002F\u002F上式可以进行拆分\n",[36,5461,5462,5464,5466,5468],{"class":38,"line":131},[36,5463,2570],{"class":46},[36,5465,5417],{"class":42},[36,5467,47],{"class":46},[36,5469,5470],{"class":62},"0\n",[36,5472,5473,5475],{"class":38,"line":225},[36,5474,5410],{"class":46},[36,5476,5477],{"class":42},"(;;;)\n",[36,5479,5480],{"class":38,"line":235},[36,5481,3963],{"class":42},[36,5483,5484,5487,5490,5492,5494],{"class":38,"line":377},[36,5485,5486],{"class":46},"    if",[36,5488,5489],{"class":42},"(i",[36,5491,2127],{"class":46},[36,5493,3002],{"class":62},[36,5495,123],{"class":42},[36,5497,5498],{"class":38,"line":617},[36,5499,4423],{"class":42},[36,5501,5502,5505],{"class":38,"line":643},[36,5503,5504],{"class":46},"        break",[36,5506,3711],{"class":42},[36,5508,5509],{"class":38,"line":921},[36,5510,4580],{"class":42},[36,5512,5513,5515,5517,5519,5521],{"class":38,"line":934},[36,5514,3968],{"class":42},[36,5516,3594],{"class":46},[36,5518,2997],{"class":42},[36,5520,3594],{"class":46},[36,5522,3616],{"class":42},[36,5524,5525,5528,5530],{"class":38,"line":939},[36,5526,5527],{"class":42},"    i",[36,5529,4685],{"class":46},[36,5531,3711],{"class":42},[36,5533,5534],{"class":38,"line":949},[36,5535,3982],{"class":42},[19,5537,5538],{},"小练习",[26,5540,5542],{"className":2556,"code":5541,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[33,5543,5544,5550,5560,5568,5572,5577,5582,5610,5614,5619,5624,5665,5669,5682,5686,5690,5694,5706,5710,5714],{"__ignoreMap":31},[36,5545,5546,5548],{"class":38,"line":39},[36,5547,4343],{"class":46},[36,5549,4346],{"class":50},[36,5551,5552,5554,5556,5558],{"class":38,"line":54},[36,5553,4351],{"class":46},[36,5555,4354],{"class":46},[36,5557,4357],{"class":79},[36,5559,3711],{"class":42},[36,5561,5562,5564,5566],{"class":38,"line":66},[36,5563,2570],{"class":46},[36,5565,4366],{"class":79},[36,5567,4369],{"class":42},[36,5569,5570],{"class":38,"line":73},[36,5571,3963],{"class":42},[36,5573,5574],{"class":38,"line":86},[36,5575,5576],{"class":2621},"    \u002F\u002F敲桌子案例\n",[36,5578,5579],{"class":38,"line":126},[36,5580,5581],{"class":2621},"    \u002F\u002F1.先输出1-100的数字\n",[36,5583,5584,5587,5589,5591,5593,5595,5597,5600,5602,5604,5606,5608],{"class":38,"line":131},[36,5585,5586],{"class":46},"    for",[36,5588,92],{"class":42},[36,5590,2570],{"class":46},[36,5592,5417],{"class":42},[36,5594,47],{"class":46},[36,5596,1906],{"class":62},[36,5598,5599],{"class":42},"; i",[36,5601,896],{"class":46},[36,5603,1070],{"class":62},[36,5605,5599],{"class":42},[36,5607,4685],{"class":46},[36,5609,123],{"class":42},[36,5611,5612],{"class":38,"line":225},[36,5613,4423],{"class":42},[36,5615,5616],{"class":38,"line":235},[36,5617,5618],{"class":2621},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,5620,5621],{"class":38,"line":377},[36,5622,5623],{"class":2621},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,5625,5626,5628,5630,5632,5634,5636,5638,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663],{"class":38,"line":617},[36,5627,890],{"class":46},[36,5629,5489],{"class":42},[36,5631,2884],{"class":46},[36,5633,2925],{"class":62},[36,5635,5334],{"class":46},[36,5637,2751],{"class":62},[36,5639,5640],{"class":46}," ||",[36,5642,5417],{"class":42},[36,5644,2884],{"class":46},[36,5646,3002],{"class":62},[36,5648,5334],{"class":46},[36,5650,2925],{"class":62},[36,5652,5640],{"class":46},[36,5654,5417],{"class":42},[36,5656,3139],{"class":46},[36,5658,3002],{"class":62},[36,5660,5334],{"class":46},[36,5662,2925],{"class":62},[36,5664,123],{"class":42},[36,5666,5667],{"class":38,"line":643},[36,5668,4901],{"class":42},[36,5670,5671,5673,5675,5678,5680],{"class":38,"line":921},[36,5672,4906],{"class":42},[36,5674,3594],{"class":46},[36,5676,5677],{"class":50},"\"敲桌子\"",[36,5679,3594],{"class":46},[36,5681,3616],{"class":42},[36,5683,5684],{"class":38,"line":934},[36,5685,2204],{"class":42},[36,5687,5688],{"class":38,"line":939},[36,5689,4960],{"class":46},[36,5691,5692],{"class":38,"line":949},[36,5693,4901],{"class":42},[36,5695,5696,5698,5700,5702,5704],{"class":38,"line":962},[36,5697,4906],{"class":42},[36,5699,3594],{"class":46},[36,5701,2997],{"class":42},[36,5703,3594],{"class":46},[36,5705,3616],{"class":42},[36,5707,5708],{"class":38,"line":974},[36,5709,2204],{"class":42},[36,5711,5712],{"class":38,"line":979},[36,5713,4580],{"class":42},[36,5715,5716],{"class":38,"line":994},[36,5717,3982],{"class":42},[19,5719,5720],{},"嵌套实现星图",[26,5722,5724],{"className":2556,"code":5723,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[33,5725,5726,5732,5742,5750,5754,5780,5784,5813,5817,5828,5832,5841,5845],{"__ignoreMap":31},[36,5727,5728,5730],{"class":38,"line":39},[36,5729,4343],{"class":46},[36,5731,4346],{"class":50},[36,5733,5734,5736,5738,5740],{"class":38,"line":54},[36,5735,4351],{"class":46},[36,5737,4354],{"class":46},[36,5739,4357],{"class":79},[36,5741,3711],{"class":42},[36,5743,5744,5746,5748],{"class":38,"line":66},[36,5745,2570],{"class":46},[36,5747,4366],{"class":79},[36,5749,4369],{"class":42},[36,5751,5752],{"class":38,"line":73},[36,5753,3963],{"class":42},[36,5755,5756,5758,5760,5762,5764,5766,5768,5770,5772,5774,5776,5778],{"class":38,"line":86},[36,5757,5586],{"class":46},[36,5759,4066],{"class":42},[36,5761,2570],{"class":46},[36,5763,5417],{"class":42},[36,5765,47],{"class":46},[36,5767,2751],{"class":62},[36,5769,5424],{"class":42},[36,5771,3463],{"class":46},[36,5773,3002],{"class":62},[36,5775,5424],{"class":42},[36,5777,4685],{"class":46},[36,5779,123],{"class":42},[36,5781,5782],{"class":38,"line":126},[36,5783,4423],{"class":42},[36,5785,5786,5789,5791,5793,5796,5798,5800,5803,5805,5807,5809,5811],{"class":38,"line":131},[36,5787,5788],{"class":46},"        for",[36,5790,4066],{"class":42},[36,5792,2570],{"class":46},[36,5794,5795],{"class":42}," j",[36,5797,47],{"class":46},[36,5799,2751],{"class":62},[36,5801,5802],{"class":42},";j",[36,5804,3463],{"class":46},[36,5806,3002],{"class":62},[36,5808,5802],{"class":42},[36,5810,4685],{"class":46},[36,5812,123],{"class":42},[36,5814,5815],{"class":38,"line":225},[36,5816,4901],{"class":42},[36,5818,5819,5821,5823,5826],{"class":38,"line":235},[36,5820,4906],{"class":42},[36,5822,3594],{"class":46},[36,5824,5825],{"class":50},"\"*\"",[36,5827,3711],{"class":42},[36,5829,5830],{"class":38,"line":377},[36,5831,2204],{"class":42},[36,5833,5834,5837,5839],{"class":38,"line":617},[36,5835,5836],{"class":42},"        cout",[36,5838,3594],{"class":46},[36,5840,3616],{"class":42},[36,5842,5843],{"class":38,"line":643},[36,5844,4580],{"class":42},[36,5846,5847],{"class":38,"line":921},[36,5848,3982],{"class":42},[19,5850,5851],{},"乘法口诀表",[26,5853,5855],{"className":2556,"code":5854,"language":2558,"meta":31,"style":31},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[33,5856,5857,5863,5873,5881,5885,5911,5915,5940,5944,5984,5988,5996,6000],{"__ignoreMap":31},[36,5858,5859,5861],{"class":38,"line":39},[36,5860,4343],{"class":46},[36,5862,4727],{"class":50},[36,5864,5865,5867,5869,5871],{"class":38,"line":54},[36,5866,4351],{"class":46},[36,5868,4354],{"class":46},[36,5870,4357],{"class":79},[36,5872,3711],{"class":42},[36,5874,5875,5877,5879],{"class":38,"line":66},[36,5876,2570],{"class":46},[36,5878,4366],{"class":79},[36,5880,4369],{"class":42},[36,5882,5883],{"class":38,"line":73},[36,5884,3963],{"class":42},[36,5886,5887,5889,5891,5893,5895,5897,5899,5901,5903,5905,5907,5909],{"class":38,"line":86},[36,5888,5586],{"class":46},[36,5890,92],{"class":42},[36,5892,2570],{"class":46},[36,5894,5417],{"class":42},[36,5896,47],{"class":46},[36,5898,1906],{"class":62},[36,5900,5424],{"class":42},[36,5902,3463],{"class":46},[36,5904,3002],{"class":62},[36,5906,5424],{"class":42},[36,5908,4685],{"class":46},[36,5910,123],{"class":42},[36,5912,5913],{"class":38,"line":126},[36,5914,4423],{"class":42},[36,5916,5917,5919,5921,5923,5925,5927,5929,5931,5933,5936,5938],{"class":38,"line":131},[36,5918,5788],{"class":46},[36,5920,92],{"class":42},[36,5922,2570],{"class":46},[36,5924,5795],{"class":42},[36,5926,47],{"class":46},[36,5928,1906],{"class":62},[36,5930,5802],{"class":42},[36,5932,896],{"class":46},[36,5934,5935],{"class":42},"i;j",[36,5937,4685],{"class":46},[36,5939,123],{"class":42},[36,5941,5942],{"class":38,"line":225},[36,5943,4901],{"class":42},[36,5945,5946,5948,5950,5952,5954,5956,5958,5960,5962,5965,5967,5969,5971,5973,5975,5978,5980,5982],{"class":38,"line":235},[36,5947,4906],{"class":42},[36,5949,3594],{"class":46},[36,5951,3023],{"class":42},[36,5953,3594],{"class":46},[36,5955,5825],{"class":50},[36,5957,3594],{"class":46},[36,5959,2997],{"class":42},[36,5961,3594],{"class":46},[36,5963,5964],{"class":50},"\"=\"",[36,5966,3594],{"class":46},[36,5968,2997],{"class":42},[36,5970,3011],{"class":46},[36,5972,3023],{"class":42},[36,5974,3594],{"class":46},[36,5976,5977],{"class":50},"'",[36,5979,3651],{"class":62},[36,5981,5977],{"class":50},[36,5983,3711],{"class":42},[36,5985,5986],{"class":38,"line":377},[36,5987,2204],{"class":42},[36,5989,5990,5992,5994],{"class":38,"line":617},[36,5991,5836],{"class":42},[36,5993,3594],{"class":46},[36,5995,3616],{"class":42},[36,5997,5998],{"class":38,"line":643},[36,5999,4580],{"class":42},[36,6001,6002],{"class":38,"line":921},[36,6003,3982],{"class":42},[1752,6005,6007],{"id":6006},"_163跳出语句","1.6.3跳出语句",[650,6009,6010],{},[653,6011,6012],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6014,6015],{},"break使用时机：",[3557,6017,6018,6021,6024],{},[653,6019,6020],{},"出现在switch条件语句中，作用是终止case并跳出switch",[653,6022,6023],{},"出现在循环结构中，作用是跳出当前的循环结构",[653,6025,6026],{},"出现在嵌套循环中，跳出最近的内层循环语句",[650,6028,6029,6032],{"start":54},[653,6030,6031],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[653,6033,6034],{},"goto语句\n语法：goto 标记;",[19,6036,6037],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,6039,6041],{"className":2556,"code":6040,"language":2558,"meta":31,"style":31},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[33,6042,6043,6051,6055,6068,6078,6091,6104,6117,6124,6140],{"__ignoreMap":31},[36,6044,6045,6047,6049],{"class":38,"line":39},[36,6046,2570],{"class":46},[36,6048,4366],{"class":79},[36,6050,4369],{"class":42},[36,6052,6053],{"class":38,"line":54},[36,6054,3963],{"class":42},[36,6056,6057,6059,6061,6064,6066],{"class":38,"line":66},[36,6058,3968],{"class":42},[36,6060,3594],{"class":46},[36,6062,6063],{"class":50},"\"1\"",[36,6065,3594],{"class":46},[36,6067,3616],{"class":42},[36,6069,6070,6073,6076],{"class":38,"line":73},[36,6071,6072],{"class":46},"    goto",[36,6074,6075],{"class":79}," FLAG",[36,6077,3711],{"class":42},[36,6079,6080,6082,6084,6087,6089],{"class":38,"line":86},[36,6081,3968],{"class":42},[36,6083,3594],{"class":46},[36,6085,6086],{"class":50},"\"2\"",[36,6088,3594],{"class":46},[36,6090,3616],{"class":42},[36,6092,6093,6095,6097,6100,6102],{"class":38,"line":126},[36,6094,3968],{"class":42},[36,6096,3594],{"class":46},[36,6098,6099],{"class":50},"\"3\"",[36,6101,3594],{"class":46},[36,6103,3616],{"class":42},[36,6105,6106,6108,6110,6113,6115],{"class":38,"line":131},[36,6107,3968],{"class":42},[36,6109,3594],{"class":46},[36,6111,6112],{"class":50},"\"4\"",[36,6114,3594],{"class":46},[36,6116,3616],{"class":42},[36,6118,6119,6122],{"class":38,"line":225},[36,6120,6121],{"class":79},"    FLAG",[36,6123,153],{"class":42},[36,6125,6126,6128,6130,6133,6135,6137],{"class":38,"line":235},[36,6127,3968],{"class":42},[36,6129,3594],{"class":46},[36,6131,6132],{"class":50},"\"5\"",[36,6134,3594],{"class":46},[36,6136,3659],{"class":42},[36,6138,6139],{"class":2621},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,6141,6142],{"class":38,"line":377},[36,6143,3982],{"class":42},[14,6145,6147],{"id":6146},"_17数组","1.7数组",[1752,6149,6151],{"id":6150},"_171一维数组","1.7.1一维数组",[650,6153,6154],{},[653,6155,6156],{},"一维数组定义方式",[2698,6158,6159,6169],{},[2701,6160,6161],{},[2704,6162,6163,6166],{},[2707,6164,6165],{},"方式",[2707,6167,6168],{},"注意事项",[2744,6170,6171,6185,6195],{},[2704,6172,6173,6179],{},[2749,6174,6175,6176,2618],{},"数据类型 数组名",[36,6177,6178],{},"数组长度",[2749,6180,6181,6182,6184],{},"这种方式是先定义再arr",[36,6183,2997],{},"赋值",[2704,6186,6187,6192],{},[2749,6188,6175,6189,6191],{},[36,6190,6178],{},"={值1,值2....};",[2749,6193,6194],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2704,6196,6197,6201],{},[2749,6198,6175,6199,6191],{},[36,6200],{},[2749,6202,6203,6204,6206],{},"int arr",[36,6205],{},";这是不正确的，按照这样的方式定义必须有初始长度",[650,6208,6209],{"start":54},[653,6210,6211],{},"一维数组数组名\n用途：",[3557,6213,6214],{},[653,6215,6216],{},"1.可以统计整个数组在内存中的长度：",[26,6218,6220],{"className":2556,"code":6219,"language":2558,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,6221,6222,6229],{"__ignoreMap":31},[36,6223,6224,6226],{"class":38,"line":39},[36,6225,2565],{"class":46},[36,6227,6228],{"class":42},"(arr);\n",[36,6230,6231,6233,6236,6238],{"class":38,"line":54},[36,6232,2565],{"class":46},[36,6234,6235],{"class":42},"(arr[",[36,6237,2751],{"class":62},[36,6239,6240],{"class":42},"]);\n",[3557,6242,6243],{},[653,6244,6245],{},"2.可以获取数组在内存中的首地址:",[26,6247,6249],{"className":2556,"code":6248,"language":2558,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,6250,6251,6256,6269,6274],{"__ignoreMap":31},[36,6252,6253],{"class":38,"line":39},[36,6254,6255],{"class":2621},"\u002F\u002F查看16进制的首地址\n",[36,6257,6258,6260,6262,6265,6267],{"class":38,"line":54},[36,6259,3786],{"class":42},[36,6261,3594],{"class":46},[36,6263,6264],{"class":42},"arr",[36,6266,3594],{"class":46},[36,6268,3616],{"class":42},[36,6270,6271],{"class":38,"line":66},[36,6272,6273],{"class":2621},"\u002F\u002F看10进制数\n",[36,6275,6276,6278,6280,6282,6284,6286,6288,6291,6293,6295,6297],{"class":38,"line":73},[36,6277,3786],{"class":42},[36,6279,3594],{"class":46},[36,6281,92],{"class":42},[36,6283,2570],{"class":46},[36,6285,2985],{"class":42},[36,6287,2909],{"class":46},[36,6289,6290],{"class":42},"arr[",[36,6292,2751],{"class":62},[36,6294,3493],{"class":42},[36,6296,3594],{"class":46},[36,6298,3616],{"class":42},[19,6300,6301],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3557,6303,6304],{},[653,6305,6306],{},"1️⃣五只小猪称体重",[26,6308,6310],{"className":2556,"code":6309,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[33,6311,6312,6318,6328,6336,6340,6380,6393,6419,6423,6435,6439,6449,6453,6457,6470,6479],{"__ignoreMap":31},[36,6313,6314,6316],{"class":38,"line":39},[36,6315,4343],{"class":46},[36,6317,4346],{"class":50},[36,6319,6320,6322,6324,6326],{"class":38,"line":54},[36,6321,4351],{"class":46},[36,6323,4354],{"class":46},[36,6325,4357],{"class":79},[36,6327,3711],{"class":42},[36,6329,6330,6332,6334],{"class":38,"line":66},[36,6331,2570],{"class":46},[36,6333,4366],{"class":79},[36,6335,4369],{"class":42},[36,6337,6338],{"class":38,"line":73},[36,6339,3963],{"class":42},[36,6341,6342,6344,6347,6349,6351,6353,6355,6358,6360,6363,6365,6367,6369,6372,6374,6377],{"class":38,"line":86},[36,6343,4378],{"class":46},[36,6345,6346],{"class":42}," arr[",[36,6348,2875],{"class":62},[36,6350,3493],{"class":42},[36,6352,47],{"class":46},[36,6354,101],{"class":42},[36,6356,6357],{"class":62},"300",[36,6359,2934],{"class":42},[36,6361,6362],{"class":62},"350",[36,6364,2934],{"class":42},[36,6366,1059],{"class":62},[36,6368,2934],{"class":42},[36,6370,6371],{"class":62},"400",[36,6373,2934],{"class":42},[36,6375,6376],{"class":62},"250",[36,6378,6379],{"class":42},"};\n",[36,6381,6382,6384,6387,6389,6391],{"class":38,"line":126},[36,6383,4378],{"class":46},[36,6385,6386],{"class":42}," tmp",[36,6388,47],{"class":46},[36,6390,2751],{"class":62},[36,6392,3711],{"class":42},[36,6394,6395,6397,6399,6401,6403,6405,6407,6409,6411,6413,6415,6417],{"class":38,"line":131},[36,6396,5586],{"class":46},[36,6398,4066],{"class":42},[36,6400,2570],{"class":46},[36,6402,5417],{"class":42},[36,6404,47],{"class":46},[36,6406,2751],{"class":62},[36,6408,5424],{"class":42},[36,6410,3463],{"class":46},[36,6412,2875],{"class":62},[36,6414,5424],{"class":42},[36,6416,4685],{"class":46},[36,6418,123],{"class":42},[36,6420,6421],{"class":38,"line":225},[36,6422,4423],{"class":42},[36,6424,6425,6427,6430,6432],{"class":38,"line":235},[36,6426,890],{"class":46},[36,6428,6429],{"class":42},"(tmp",[36,6431,3463],{"class":46},[36,6433,6434],{"class":42},"arr[i])\n",[36,6436,6437],{"class":38,"line":377},[36,6438,4901],{"class":42},[36,6440,6441,6444,6446],{"class":38,"line":617},[36,6442,6443],{"class":42},"            tmp",[36,6445,47],{"class":46},[36,6447,6448],{"class":42},"arr[i];\n",[36,6450,6451],{"class":38,"line":643},[36,6452,2204],{"class":42},[36,6454,6455],{"class":38,"line":921},[36,6456,4580],{"class":42},[36,6458,6459,6461,6463,6466,6468],{"class":38,"line":934},[36,6460,3968],{"class":42},[36,6462,3594],{"class":46},[36,6464,6465],{"class":42},"tmp",[36,6467,3594],{"class":46},[36,6469,3616],{"class":42},[36,6471,6472,6475,6477],{"class":38,"line":939},[36,6473,6474],{"class":46},"    return",[36,6476,899],{"class":62},[36,6478,3711],{"class":42},[36,6480,6481],{"class":38,"line":949},[36,6482,3982],{"class":42},[3557,6484,6485],{},[653,6486,6487],{},"2️⃣数组元素逆置",[26,6489,6491],{"className":2556,"code":6490,"language":2558,"meta":31,"style":31},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[33,6492,6493,6498,6504,6514,6522,6526,6561,6577,6609,6622,6627,6632,6644,6654,6664,6669,6678,6688,6693,6698,6725,6729,6745,6749,6760,6769],{"__ignoreMap":31},[36,6494,6495],{"class":38,"line":39},[36,6496,6497],{"class":2621},"\u002F\u002F元素逆置\n",[36,6499,6500,6502],{"class":38,"line":54},[36,6501,4343],{"class":46},[36,6503,4346],{"class":50},[36,6505,6506,6508,6510,6512],{"class":38,"line":66},[36,6507,4351],{"class":46},[36,6509,4354],{"class":46},[36,6511,4357],{"class":79},[36,6513,3711],{"class":42},[36,6515,6516,6518,6520],{"class":38,"line":73},[36,6517,2570],{"class":46},[36,6519,4366],{"class":79},[36,6521,4369],{"class":42},[36,6523,6524],{"class":38,"line":86},[36,6525,3963],{"class":42},[36,6527,6528,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6559],{"class":38,"line":126},[36,6529,6530],{"class":46},"   int",[36,6532,6346],{"class":42},[36,6534,2875],{"class":62},[36,6536,3493],{"class":42},[36,6538,47],{"class":46},[36,6540,101],{"class":42},[36,6542,1906],{"class":62},[36,6544,2934],{"class":42},[36,6546,1911],{"class":62},[36,6548,2934],{"class":42},[36,6550,2634],{"class":62},[36,6552,2934],{"class":42},[36,6554,2850],{"class":62},[36,6556,2934],{"class":42},[36,6558,2875],{"class":62},[36,6560,6379],{"class":42},[36,6562,6563,6565,6568,6570,6572,6574],{"class":38,"line":131},[36,6564,6530],{"class":46},[36,6566,6567],{"class":42}," start",[36,6569,47],{"class":46},[36,6571,2751],{"class":62},[36,6573,2618],{"class":42},[36,6575,6576],{"class":2621},"\u002F\u002F起始下标\n",[36,6578,6579,6581,6584,6587,6590,6593,6595,6597,6600,6602,6604,6606],{"class":38,"line":225},[36,6580,6530],{"class":46},[36,6582,6583],{"class":42}," end",[36,6585,6586],{"class":46},"=sizeof",[36,6588,6589],{"class":42},"(arr)",[36,6591,6592],{"class":46},"\u002Fsizeof",[36,6594,6235],{"class":42},[36,6596,2751],{"class":62},[36,6598,6599],{"class":42},"])",[36,6601,3087],{"class":46},[36,6603,1906],{"class":62},[36,6605,2618],{"class":42},[36,6607,6608],{"class":2621},"\u002F\u002F结束下标\n",[36,6610,6611,6614,6617,6619],{"class":38,"line":235},[36,6612,6613],{"class":46},"   while",[36,6615,6616],{"class":42}," (start",[36,6618,3463],{"class":46},[36,6620,6621],{"class":42},"end)\n",[36,6623,6624],{"class":38,"line":377},[36,6625,6626],{"class":42},"   {\n",[36,6628,6629],{"class":38,"line":617},[36,6630,6631],{"class":2621},"    \u002F\u002F实现元素互换代码\n",[36,6633,6634,6636,6639,6641],{"class":38,"line":643},[36,6635,4378],{"class":46},[36,6637,6638],{"class":42}," temp",[36,6640,47],{"class":46},[36,6642,6643],{"class":42},"arr[start];\n",[36,6645,6646,6649,6651],{"class":38,"line":921},[36,6647,6648],{"class":42},"    arr[start]",[36,6650,47],{"class":46},[36,6652,6653],{"class":42},"arr[end];\n",[36,6655,6656,6659,6661],{"class":38,"line":934},[36,6657,6658],{"class":42},"    arr[end]",[36,6660,47],{"class":46},[36,6662,6663],{"class":42},"temp;\n",[36,6665,6666],{"class":38,"line":939},[36,6667,6668],{"class":2621},"    \u002F\u002F下标更新\n",[36,6670,6671,6674,6676],{"class":38,"line":949},[36,6672,6673],{"class":42},"    start",[36,6675,4685],{"class":46},[36,6677,3711],{"class":42},[36,6679,6680,6683,6686],{"class":38,"line":962},[36,6681,6682],{"class":42},"    end",[36,6684,6685],{"class":46},"--",[36,6687,3711],{"class":42},[36,6689,6690],{"class":38,"line":974},[36,6691,6692],{"class":42},"   }\n",[36,6694,6695],{"class":38,"line":979},[36,6696,6697],{"class":2621},"   \u002F\u002F输出逆置后的数组\n",[36,6699,6700,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721,6723],{"class":38,"line":994},[36,6701,6702],{"class":46},"   for",[36,6704,4066],{"class":42},[36,6706,2570],{"class":46},[36,6708,5417],{"class":42},[36,6710,47],{"class":46},[36,6712,2751],{"class":62},[36,6714,5424],{"class":42},[36,6716,3463],{"class":46},[36,6718,2875],{"class":62},[36,6720,5424],{"class":42},[36,6722,4685],{"class":46},[36,6724,123],{"class":42},[36,6726,6727],{"class":38,"line":1006},[36,6728,6626],{"class":42},[36,6730,6731,6733,6735,6738,6740,6743],{"class":38,"line":1011},[36,6732,3968],{"class":42},[36,6734,3594],{"class":46},[36,6736,6737],{"class":42},"arr[i]",[36,6739,3594],{"class":46},[36,6741,6742],{"class":50},"\" \"",[36,6744,3711],{"class":42},[36,6746,6747],{"class":38,"line":1023},[36,6748,6692],{"class":42},[36,6750,6751,6754,6756,6758],{"class":38,"line":1028},[36,6752,6753],{"class":79},"   system",[36,6755,92],{"class":42},[36,6757,4701],{"class":50},[36,6759,5104],{"class":42},[36,6761,6762,6765,6767],{"class":38,"line":1033},[36,6763,6764],{"class":46},"   return",[36,6766,899],{"class":62},[36,6768,3711],{"class":42},[36,6770,6771],{"class":38,"line":1053},[36,6772,3982],{"class":42},[3557,6774,6775],{},[653,6776,6777],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,6779,6781],{"className":2556,"code":6780,"language":2558,"meta":31,"style":31},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[33,6782,6783,6788,6794,6804,6812,6816,6868,6881,6907,6911,6925,6929,6934,6939,6969,6973,6978,7012,7016,7021,7041,7046,7058,7074,7089,7094,7098,7102,7115,7141,7145,7159,7163,7171],{"__ignoreMap":31},[36,6784,6785],{"class":38,"line":39},[36,6786,6787],{"class":2621},"\u002F\u002F冒泡排序,升序\n",[36,6789,6790,6792],{"class":38,"line":54},[36,6791,4343],{"class":46},[36,6793,4346],{"class":50},[36,6795,6796,6798,6800,6802],{"class":38,"line":66},[36,6797,4351],{"class":46},[36,6799,4354],{"class":46},[36,6801,4357],{"class":79},[36,6803,3711],{"class":42},[36,6805,6806,6808,6810],{"class":38,"line":73},[36,6807,2570],{"class":46},[36,6809,4366],{"class":79},[36,6811,4369],{"class":42},[36,6813,6814],{"class":38,"line":86},[36,6815,3963],{"class":42},[36,6817,6818,6820,6822,6824,6827,6829,6832,6834,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856,6858,6860,6862,6864,6866],{"class":38,"line":126},[36,6819,4378],{"class":46},[36,6821,6346],{"class":42},[36,6823,2976],{"class":62},[36,6825,6826],{"class":42},"] ",[36,6828,47],{"class":46},[36,6830,6831],{"class":42}," {",[36,6833,2850],{"class":62},[36,6835,2934],{"class":42},[36,6837,1911],{"class":62},[36,6839,2934],{"class":42},[36,6841,2951],{"class":62},[36,6843,2934],{"class":42},[36,6845,2751],{"class":62},[36,6847,2934],{"class":42},[36,6849,2875],{"class":62},[36,6851,2934],{"class":42},[36,6853,2925],{"class":62},[36,6855,2934],{"class":42},[36,6857,1906],{"class":62},[36,6859,2934],{"class":42},[36,6861,2634],{"class":62},[36,6863,2934],{"class":42},[36,6865,2976],{"class":62},[36,6867,6379],{"class":42},[36,6869,6870,6872,6874,6877,6879],{"class":38,"line":131},[36,6871,3968],{"class":42},[36,6873,3594],{"class":46},[36,6875,6876],{"class":50},"\"排序前：\"",[36,6878,3594],{"class":46},[36,6880,3616],{"class":42},[36,6882,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905],{"class":38,"line":225},[36,6884,5586],{"class":46},[36,6886,4066],{"class":42},[36,6888,2570],{"class":46},[36,6890,5417],{"class":42},[36,6892,47],{"class":46},[36,6894,2751],{"class":62},[36,6896,5424],{"class":42},[36,6898,3463],{"class":46},[36,6900,2976],{"class":62},[36,6902,5424],{"class":42},[36,6904,4685],{"class":46},[36,6906,123],{"class":42},[36,6908,6909],{"class":38,"line":235},[36,6910,4423],{"class":42},[36,6912,6913,6915,6917,6919,6921,6923],{"class":38,"line":377},[36,6914,5836],{"class":42},[36,6916,3594],{"class":46},[36,6918,6737],{"class":42},[36,6920,3594],{"class":46},[36,6922,6742],{"class":50},[36,6924,3711],{"class":42},[36,6926,6927],{"class":38,"line":617},[36,6928,4580],{"class":42},[36,6930,6931],{"class":38,"line":643},[36,6932,6933],{"class":2621},"    \u002F\u002F开始冒泡排序\n",[36,6935,6936],{"class":38,"line":921},[36,6937,6938],{"class":2621},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,6940,6941,6943,6945,6947,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967],{"class":38,"line":934},[36,6942,5586],{"class":46},[36,6944,4066],{"class":42},[36,6946,2570],{"class":46},[36,6948,5417],{"class":42},[36,6950,47],{"class":46},[36,6952,2751],{"class":62},[36,6954,5424],{"class":42},[36,6956,3463],{"class":46},[36,6958,2976],{"class":62},[36,6960,3087],{"class":46},[36,6962,1906],{"class":62},[36,6964,5424],{"class":42},[36,6966,4685],{"class":46},[36,6968,123],{"class":42},[36,6970,6971],{"class":38,"line":939},[36,6972,4423],{"class":42},[36,6974,6975],{"class":38,"line":949},[36,6976,6977],{"class":2621},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,6979,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010],{"class":38,"line":962},[36,6981,5788],{"class":46},[36,6983,4066],{"class":42},[36,6985,2570],{"class":46},[36,6987,5795],{"class":42},[36,6989,47],{"class":46},[36,6991,2751],{"class":62},[36,6993,5802],{"class":42},[36,6995,3463],{"class":46},[36,6997,2976],{"class":62},[36,6999,3087],{"class":46},[36,7001,2997],{"class":42},[36,7003,3087],{"class":46},[36,7005,1906],{"class":62},[36,7007,5802],{"class":42},[36,7009,4685],{"class":46},[36,7011,123],{"class":42},[36,7013,7014],{"class":38,"line":974},[36,7015,4901],{"class":42},[36,7017,7018],{"class":38,"line":979},[36,7019,7020],{"class":2621},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,7022,7023,7026,7029,7031,7034,7036,7038],{"class":38,"line":994},[36,7024,7025],{"class":46},"            if",[36,7027,7028],{"class":42},"(arr[j]",[36,7030,986],{"class":46},[36,7032,7033],{"class":42},"arr[j",[36,7035,1885],{"class":46},[36,7037,1906],{"class":62},[36,7039,7040],{"class":42},"])\n",[36,7042,7043],{"class":38,"line":1006},[36,7044,7045],{"class":42},"            {\n",[36,7047,7048,7051,7053,7055],{"class":38,"line":1011},[36,7049,7050],{"class":46},"                int",[36,7052,6638],{"class":42},[36,7054,47],{"class":46},[36,7056,7057],{"class":42},"arr[j];\n",[36,7059,7060,7063,7065,7067,7069,7071],{"class":38,"line":1023},[36,7061,7062],{"class":42},"                arr[j]",[36,7064,47],{"class":46},[36,7066,7033],{"class":42},[36,7068,1885],{"class":46},[36,7070,1906],{"class":62},[36,7072,7073],{"class":42},"];\n",[36,7075,7076,7079,7081,7083,7085,7087],{"class":38,"line":1028},[36,7077,7078],{"class":42},"                arr[j",[36,7080,1885],{"class":46},[36,7082,1906],{"class":62},[36,7084,3493],{"class":42},[36,7086,47],{"class":46},[36,7088,6663],{"class":42},[36,7090,7091],{"class":38,"line":1033},[36,7092,7093],{"class":42},"            }\n",[36,7095,7096],{"class":38,"line":1053},[36,7097,2204],{"class":42},[36,7099,7100],{"class":38,"line":1064},[36,7101,4580],{"class":42},[36,7103,7104,7106,7108,7111,7113],{"class":38,"line":1075},[36,7105,3968],{"class":42},[36,7107,3594],{"class":46},[36,7109,7110],{"class":50},"\"排序后：\"",[36,7112,3594],{"class":46},[36,7114,3616],{"class":42},[36,7116,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135,7137,7139],{"class":38,"line":2291},[36,7118,5586],{"class":46},[36,7120,4066],{"class":42},[36,7122,2570],{"class":46},[36,7124,5417],{"class":42},[36,7126,47],{"class":46},[36,7128,2751],{"class":62},[36,7130,5424],{"class":42},[36,7132,3463],{"class":46},[36,7134,2976],{"class":62},[36,7136,5424],{"class":42},[36,7138,4685],{"class":46},[36,7140,123],{"class":42},[36,7142,7143],{"class":38,"line":2329},[36,7144,4423],{"class":42},[36,7146,7147,7149,7151,7153,7155,7157],{"class":38,"line":2334},[36,7148,5836],{"class":42},[36,7150,3594],{"class":46},[36,7152,6737],{"class":42},[36,7154,3594],{"class":46},[36,7156,6742],{"class":50},[36,7158,3711],{"class":42},[36,7160,7161],{"class":38,"line":2339},[36,7162,4580],{"class":42},[36,7164,7165,7167,7169],{"class":38,"line":2365},[36,7166,6474],{"class":46},[36,7168,899],{"class":62},[36,7170,3711],{"class":42},[36,7172,7173],{"class":38,"line":2373},[36,7174,3982],{"class":42},[1752,7176,7178],{"id":7177},"_172二维数组","1.7.2二维数组",[650,7180,7181],{},[653,7182,7183],{},"二维数组的四种定义方式",[2698,7185,7186,7195],{},[2701,7187,7188],{},[2704,7189,7190,7193],{},[2707,7191,7192],{},"序号",[2707,7194,6165],{},[2744,7196,7197,7207,7216,7225,7234],{},[2704,7198,7199,7201],{},[2749,7200,1906],{},[2749,7202,7203,7204,2618],{},"数据类型 数组名[行数]",[36,7205,7206],{},"列数",[2704,7208,7209,7211],{},[2749,7210,1911],{},[2749,7212,7203,7213,7215],{},[36,7214,7206],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2704,7217,7218,7220],{},[2749,7219,2634],{},[2749,7221,7203,7222,7224],{},[36,7223,7206],{},"={数据1,数据2,数据3...}",[2704,7226,7227,7229],{},[2749,7228,2850],{},[2749,7230,7231,7232,7224],{},"数据类型 数组名[]",[36,7233,7206],{},[2704,7235,7236,7239],{},[2749,7237,7238],{},"注意：不能只省略列数",[2749,7240],{},[650,7242,7243],{"start":54},[653,7244,7245],{},"二维数组数组名",[3557,7247,7248,7251],{},[653,7249,7250],{},"1.查看二维数组所占内存空间",[653,7252,7253],{},"2.获取二维数组首地址",[19,7255,7256],{},"已知二维数组，求二维数组的行数与列数",[26,7258,7260],{"className":2556,"code":7259,"language":2558,"meta":31,"style":31},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[33,7261,7262,7270,7274,7292,7296,7314,7330,7335,7360,7393],{"__ignoreMap":31},[36,7263,7264,7266,7268],{"class":38,"line":39},[36,7265,2570],{"class":46},[36,7267,4366],{"class":79},[36,7269,4369],{"class":42},[36,7271,7272],{"class":38,"line":54},[36,7273,3963],{"class":42},[36,7275,7276,7278,7280,7282,7285,7287,7289],{"class":38,"line":66},[36,7277,4378],{"class":46},[36,7279,6346],{"class":42},[36,7281,1911],{"class":62},[36,7283,7284],{"class":42},"][",[36,7286,2634],{"class":62},[36,7288,3493],{"class":42},[36,7290,7291],{"class":46},"=\n",[36,7293,7294],{"class":38,"line":73},[36,7295,4423],{"class":42},[36,7297,7298,7301,7303,7305,7307,7309,7311],{"class":38,"line":86},[36,7299,7300],{"class":42},"        {",[36,7302,1906],{"class":62},[36,7304,2934],{"class":42},[36,7306,1911],{"class":62},[36,7308,2934],{"class":42},[36,7310,2634],{"class":62},[36,7312,7313],{"class":42},"},\n",[36,7315,7316,7318,7320,7322,7324,7326,7328],{"class":38,"line":126},[36,7317,7300],{"class":42},[36,7319,2850],{"class":62},[36,7321,2934],{"class":42},[36,7323,2875],{"class":62},[36,7325,2934],{"class":42},[36,7327,2900],{"class":62},[36,7329,3982],{"class":42},[36,7331,7332],{"class":38,"line":131},[36,7333,7334],{"class":42},"    };\n",[36,7336,7337,7339,7341,7344,7346,7348,7350,7352,7354,7356,7358],{"class":38,"line":225},[36,7338,3968],{"class":42},[36,7340,3594],{"class":46},[36,7342,7343],{"class":50},"\"二维数组的行数\"",[36,7345,3789],{"class":46},[36,7347,6589],{"class":42},[36,7349,6592],{"class":46},[36,7351,6235],{"class":42},[36,7353,2751],{"class":62},[36,7355,6599],{"class":42},[36,7357,3594],{"class":46},[36,7359,3616],{"class":42},[36,7361,7362,7364,7366,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391],{"class":38,"line":235},[36,7363,3968],{"class":42},[36,7365,3594],{"class":46},[36,7367,7368],{"class":50},"\"二维数组的列数\"",[36,7370,3789],{"class":46},[36,7372,6235],{"class":42},[36,7374,2751],{"class":62},[36,7376,6599],{"class":42},[36,7378,6592],{"class":46},[36,7380,6235],{"class":42},[36,7382,2751],{"class":62},[36,7384,7284],{"class":42},[36,7386,2751],{"class":62},[36,7388,6599],{"class":42},[36,7390,3594],{"class":46},[36,7392,3616],{"class":42},[36,7394,7395],{"class":38,"line":377},[36,7396,3982],{"class":42},[19,7398,7399],{},"查看二维数组首地址",[26,7401,7403],{"className":2556,"code":7402,"language":2558,"meta":31,"style":31},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[33,7404,7405,7422,7448,7473],{"__ignoreMap":31},[36,7406,7407,7409,7411,7414,7416,7418,7420],{"class":38,"line":39},[36,7408,3786],{"class":42},[36,7410,3594],{"class":46},[36,7412,7413],{"class":50},"\"二维数组首地址：\"",[36,7415,3594],{"class":46},[36,7417,6264],{"class":42},[36,7419,3594],{"class":46},[36,7421,3616],{"class":42},[36,7423,7424,7426,7428,7431,7433,7435,7437,7440,7442,7444,7446],{"class":38,"line":54},[36,7425,3786],{"class":42},[36,7427,3594],{"class":46},[36,7429,7430],{"class":50},"\"二维数组第一行的首地址：\"",[36,7432,3594],{"class":46},[36,7434,92],{"class":42},[36,7436,2570],{"class":46},[36,7438,7439],{"class":42},")arr[",[36,7441,2751],{"class":62},[36,7443,3493],{"class":42},[36,7445,3594],{"class":46},[36,7447,3616],{"class":42},[36,7449,7450,7452,7454,7457,7459,7461,7463,7465,7467,7469,7471],{"class":38,"line":66},[36,7451,3786],{"class":42},[36,7453,3594],{"class":46},[36,7455,7456],{"class":50},"\"二维数组第二行的首地址：\"",[36,7458,3594],{"class":46},[36,7460,92],{"class":42},[36,7462,2570],{"class":46},[36,7464,7439],{"class":42},[36,7466,1906],{"class":62},[36,7468,3493],{"class":42},[36,7470,3594],{"class":46},[36,7472,3616],{"class":42},[36,7474,7475,7477,7479,7482,7484,7486,7488,7490,7492,7494,7496,7498,7500,7502,7504,7506],{"class":38,"line":73},[36,7476,3786],{"class":42},[36,7478,3594],{"class":46},[36,7480,7481],{"class":50},"\"二维数组第一个元素的首地址:\"",[36,7483,3594],{"class":46},[36,7485,92],{"class":42},[36,7487,2570],{"class":46},[36,7489,2985],{"class":42},[36,7491,2909],{"class":46},[36,7493,6290],{"class":42},[36,7495,2751],{"class":62},[36,7497,7284],{"class":42},[36,7499,2751],{"class":62},[36,7501,3493],{"class":42},[36,7503,3594],{"class":46},[36,7505,3659],{"class":42},[36,7507,7508],{"class":2621},"\u002F\u002F对于数，要加取址符\n",[2467,7510,7511],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":7513},[7514,7515,7516,7524,7525,7531,7536],{"id":2511,"depth":54,"text":2512},{"id":2518,"depth":54,"text":2519},{"id":2533,"depth":54,"text":2534,"children":7517},[7518,7519,7520,7521,7522,7523],{"id":2537,"depth":66,"text":2538},{"id":2582,"depth":66,"text":2583},{"id":2647,"depth":66,"text":2648},{"id":3575,"depth":66,"text":3576},{"id":3665,"depth":66,"text":3666},{"id":3760,"depth":66,"text":3761},{"id":3802,"depth":54,"text":3803},{"id":3870,"depth":54,"text":3871,"children":7526},[7527,7528,7529,7530],{"id":3874,"depth":66,"text":3875},{"id":3896,"depth":66,"text":3897},{"id":3905,"depth":66,"text":3906},{"id":3914,"depth":66,"text":3915},{"id":3923,"depth":54,"text":3924,"children":7532},[7533,7534,7535],{"id":3927,"depth":66,"text":3928},{"id":4598,"depth":66,"text":4599},{"id":6006,"depth":66,"text":6007},{"id":6146,"depth":54,"text":6147,"children":7537},[7538,7539],{"id":6150,"depth":66,"text":6151},{"id":7177,"depth":66,"text":7178},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2503,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7546,"title":7547,"body":7548,"description":31,"extension":2494,"meta":8647,"navigation":69,"path":8648,"seo":8649,"stem":8650,"__hash__":8651},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7549,"toc":8639},[7550,7553,7557,7565,7573,7576,7641,7645,7648,7724,7728,7731,7734,7737,7950,7954,7959,8023,8028,8095,8100,8191,8194,8299,8303,8306,8312,8456,8460,8463,8477,8480,8525,8528,8636],[10,7551,7547],{"id":7552},"_2函数",[14,7554,7556],{"id":7555},"_21函数概述","2.1函数概述",[650,7558,7559,7562],{},[653,7560,7561],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[653,7563,7564],{},"语法：",[26,7566,7571],{"className":7567,"code":7569,"language":7570,"meta":31},[7568],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[33,7572,7569],{"__ignoreMap":31},[19,7574,7575],{},"小案例",[26,7577,7579],{"className":2556,"code":7578,"language":2558,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,7580,7581,7586,7609,7613,7630,7637],{"__ignoreMap":31},[36,7582,7583],{"class":38,"line":39},[36,7584,7585],{"class":2621},"\u002F\u002Fnum1,num2形参\n",[36,7587,7588,7590,7592,7594,7596,7600,7602,7604,7607],{"class":38,"line":54},[36,7589,2570],{"class":46},[36,7591,1872],{"class":79},[36,7593,92],{"class":42},[36,7595,2570],{"class":46},[36,7597,7599],{"class":7598},"s4XuR"," num1",[36,7601,2934],{"class":42},[36,7603,2570],{"class":46},[36,7605,7606],{"class":7598}," num2",[36,7608,123],{"class":42},[36,7610,7611],{"class":38,"line":66},[36,7612,3963],{"class":42},[36,7614,7615,7617,7620,7622,7625,7627],{"class":38,"line":73},[36,7616,4378],{"class":46},[36,7618,7619],{"class":42}," sum",[36,7621,47],{"class":46},[36,7623,7624],{"class":42},"num1",[36,7626,1885],{"class":46},[36,7628,7629],{"class":42},"num2;\n",[36,7631,7632,7634],{"class":38,"line":86},[36,7633,6474],{"class":46},[36,7635,7636],{"class":42}," sum;\n",[36,7638,7639],{"class":38,"line":126},[36,7640,3982],{"class":42},[14,7642,7644],{"id":7643},"_22函数调用","2.2函数调用",[19,7646,7647],{},"调用刚刚写的求和函数",[26,7649,7651],{"className":2556,"code":7650,"language":2558,"meta":31,"style":31},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[33,7652,7653,7661,7665,7670,7682,7694,7703,7708,7720],{"__ignoreMap":31},[36,7654,7655,7657,7659],{"class":38,"line":39},[36,7656,2570],{"class":46},[36,7658,4366],{"class":79},[36,7660,4369],{"class":42},[36,7662,7663],{"class":38,"line":54},[36,7664,3963],{"class":42},[36,7666,7667],{"class":38,"line":66},[36,7668,7669],{"class":2621},"    \u002F\u002Fa,b实参\n",[36,7671,7672,7674,7676,7678,7680],{"class":38,"line":73},[36,7673,4378],{"class":46},[36,7675,3815],{"class":42},[36,7677,47],{"class":46},[36,7679,2751],{"class":62},[36,7681,3711],{"class":42},[36,7683,7684,7686,7688,7690,7692],{"class":38,"line":86},[36,7685,4378],{"class":46},[36,7687,5218],{"class":42},[36,7689,47],{"class":46},[36,7691,2751],{"class":62},[36,7693,3711],{"class":42},[36,7695,7696,7698,7700],{"class":38,"line":126},[36,7697,4405],{"class":42},[36,7699,3846],{"class":46},[36,7701,7702],{"class":42},"a,b;\n",[36,7704,7705],{"class":38,"line":131},[36,7706,7707],{"class":2621},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,7709,7710,7712,7714,7717],{"class":38,"line":225},[36,7711,3968],{"class":42},[36,7713,3594],{"class":46},[36,7715,7716],{"class":79},"add",[36,7718,7719],{"class":42},"(a,b);\n",[36,7721,7722],{"class":38,"line":235},[36,7723,3982],{"class":42},[14,7725,7727],{"id":7726},"_23值传递","2.3值传递",[19,7729,7730],{},"值传递就是函数调用时实参将数值传给形参",[19,7732,7733],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7735,7736],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,7738,7740],{"className":2556,"code":7739,"language":2558,"meta":31,"style":31},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[33,7741,7742,7764,7768,7781,7798,7816,7827,7836,7845,7858,7874,7890,7899,7903,7911,7915,7927,7939,7946],{"__ignoreMap":31},[36,7743,7744,7747,7750,7752,7754,7756,7758,7760,7762],{"class":38,"line":39},[36,7745,7746],{"class":46},"void",[36,7748,7749],{"class":79}," swap",[36,7751,92],{"class":42},[36,7753,2570],{"class":46},[36,7755,7599],{"class":7598},[36,7757,2934],{"class":42},[36,7759,2570],{"class":46},[36,7761,7606],{"class":7598},[36,7763,123],{"class":42},[36,7765,7766],{"class":38,"line":54},[36,7767,3963],{"class":42},[36,7769,7770,7772,7774,7777,7779],{"class":38,"line":66},[36,7771,3968],{"class":42},[36,7773,3594],{"class":46},[36,7775,7776],{"class":50},"\"交换前：\"",[36,7778,3594],{"class":46},[36,7780,3616],{"class":42},[36,7782,7783,7785,7787,7790,7792,7794,7796],{"class":38,"line":73},[36,7784,3968],{"class":42},[36,7786,3594],{"class":46},[36,7788,7789],{"class":50},"\"num1=\"",[36,7791,3594],{"class":46},[36,7793,7624],{"class":42},[36,7795,3594],{"class":46},[36,7797,3616],{"class":42},[36,7799,7800,7802,7804,7807,7809,7812,7814],{"class":38,"line":86},[36,7801,3968],{"class":42},[36,7803,3594],{"class":46},[36,7805,7806],{"class":50},"\"num2=\"",[36,7808,3594],{"class":46},[36,7810,7811],{"class":42},"num2",[36,7813,3594],{"class":46},[36,7815,3616],{"class":42},[36,7817,7818,7820,7822,7824],{"class":38,"line":126},[36,7819,4378],{"class":46},[36,7821,6638],{"class":42},[36,7823,47],{"class":46},[36,7825,7826],{"class":42},"num1;\n",[36,7828,7829,7832,7834],{"class":38,"line":131},[36,7830,7831],{"class":42},"    num1",[36,7833,47],{"class":46},[36,7835,7629],{"class":42},[36,7837,7838,7841,7843],{"class":38,"line":225},[36,7839,7840],{"class":42},"    num2",[36,7842,47],{"class":46},[36,7844,6663],{"class":42},[36,7846,7847,7849,7851,7854,7856],{"class":38,"line":235},[36,7848,3968],{"class":42},[36,7850,3594],{"class":46},[36,7852,7853],{"class":50},"\"交换后：\"",[36,7855,3594],{"class":46},[36,7857,3616],{"class":42},[36,7859,7860,7862,7864,7866,7868,7870,7872],{"class":38,"line":377},[36,7861,3968],{"class":42},[36,7863,3594],{"class":46},[36,7865,7789],{"class":50},[36,7867,3594],{"class":46},[36,7869,7624],{"class":42},[36,7871,3594],{"class":46},[36,7873,3616],{"class":42},[36,7875,7876,7878,7880,7882,7884,7886,7888],{"class":38,"line":617},[36,7877,3968],{"class":42},[36,7879,3594],{"class":46},[36,7881,7806],{"class":50},[36,7883,3594],{"class":46},[36,7885,7811],{"class":42},[36,7887,3594],{"class":46},[36,7889,3616],{"class":42},[36,7891,7892,7894,7896],{"class":38,"line":643},[36,7893,6474],{"class":46},[36,7895,2618],{"class":42},[36,7897,7898],{"class":2621},"\u002F\u002F或者不写\n",[36,7900,7901],{"class":38,"line":921},[36,7902,3982],{"class":42},[36,7904,7905,7907,7909],{"class":38,"line":934},[36,7906,2570],{"class":46},[36,7908,4366],{"class":79},[36,7910,4369],{"class":42},[36,7912,7913],{"class":38,"line":939},[36,7914,3963],{"class":42},[36,7916,7917,7919,7921,7923,7925],{"class":38,"line":949},[36,7918,4378],{"class":46},[36,7920,3815],{"class":42},[36,7922,47],{"class":46},[36,7924,3002],{"class":62},[36,7926,3711],{"class":42},[36,7928,7929,7931,7933,7935,7937],{"class":38,"line":962},[36,7930,4378],{"class":46},[36,7932,5218],{"class":42},[36,7934,47],{"class":46},[36,7936,3254],{"class":62},[36,7938,3711],{"class":42},[36,7940,7941,7944],{"class":38,"line":974},[36,7942,7943],{"class":79},"    swap",[36,7945,7719],{"class":42},[36,7947,7948],{"class":38,"line":979},[36,7949,3982],{"class":42},[14,7951,7953],{"id":7952},"_24函数的常见形式","2.4函数的常见形式",[650,7955,7956],{},[653,7957,7958],{},"无参无返",[26,7960,7962],{"className":2556,"code":7961,"language":2558,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,7963,7964,7973,7977,7990,7994,8002,8006,8011,8019],{"__ignoreMap":31},[36,7965,7966,7968,7971],{"class":38,"line":39},[36,7967,7746],{"class":46},[36,7969,7970],{"class":79}," test01",[36,7972,4369],{"class":42},[36,7974,7975],{"class":38,"line":54},[36,7976,3963],{"class":42},[36,7978,7979,7981,7983,7986,7988],{"class":38,"line":66},[36,7980,3968],{"class":42},[36,7982,3594],{"class":46},[36,7984,7985],{"class":50},"\"你好\"",[36,7987,3594],{"class":46},[36,7989,3616],{"class":42},[36,7991,7992],{"class":38,"line":73},[36,7993,3982],{"class":42},[36,7995,7996,7998,8000],{"class":38,"line":86},[36,7997,2570],{"class":46},[36,7999,4366],{"class":79},[36,8001,4369],{"class":42},[36,8003,8004],{"class":38,"line":126},[36,8005,3963],{"class":42},[36,8007,8008],{"class":38,"line":131},[36,8009,8010],{"class":2621},"    \u002F\u002F函数调用\n",[36,8012,8013,8016],{"class":38,"line":225},[36,8014,8015],{"class":79},"    test01",[36,8017,8018],{"class":42},"();\n",[36,8020,8021],{"class":38,"line":235},[36,8022,3982],{"class":42},[650,8024,8025],{"start":54},[653,8026,8027],{},"有参无返",[26,8029,8031],{"className":2556,"code":8030,"language":2558,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,8032,8033,8048,8052,8064,8068,8076,8080,8091],{"__ignoreMap":31},[36,8034,8035,8037,8040,8042,8044,8046],{"class":38,"line":39},[36,8036,7746],{"class":46},[36,8038,8039],{"class":79}," test02",[36,8041,92],{"class":42},[36,8043,2570],{"class":46},[36,8045,3815],{"class":7598},[36,8047,123],{"class":42},[36,8049,8050],{"class":38,"line":54},[36,8051,3963],{"class":42},[36,8053,8054,8056,8058,8060,8062],{"class":38,"line":66},[36,8055,3968],{"class":42},[36,8057,3594],{"class":46},[36,8059,7985],{"class":50},[36,8061,3594],{"class":46},[36,8063,3616],{"class":42},[36,8065,8066],{"class":38,"line":73},[36,8067,3982],{"class":42},[36,8069,8070,8072,8074],{"class":38,"line":86},[36,8071,2570],{"class":46},[36,8073,4366],{"class":79},[36,8075,4369],{"class":42},[36,8077,8078],{"class":38,"line":126},[36,8079,3963],{"class":42},[36,8081,8082,8085,8087,8089],{"class":38,"line":131},[36,8083,8084],{"class":79},"    test02",[36,8086,92],{"class":42},[36,8088,1070],{"class":62},[36,8090,5104],{"class":42},[36,8092,8093],{"class":38,"line":225},[36,8094,3982],{"class":42},[650,8096,8097],{"start":66},[653,8098,8099],{},"无参有返",[26,8101,8103],{"className":2556,"code":8102,"language":2558,"meta":31,"style":31},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[33,8104,8105,8114,8118,8130,8139,8143,8151,8155,8168,8187],{"__ignoreMap":31},[36,8106,8107,8109,8112],{"class":38,"line":39},[36,8108,2570],{"class":46},[36,8110,8111],{"class":79}," test03",[36,8113,4369],{"class":42},[36,8115,8116],{"class":38,"line":54},[36,8117,3963],{"class":42},[36,8119,8120,8122,8124,8126,8128],{"class":38,"line":66},[36,8121,3968],{"class":42},[36,8123,3594],{"class":46},[36,8125,7985],{"class":50},[36,8127,3594],{"class":46},[36,8129,3616],{"class":42},[36,8131,8132,8134,8137],{"class":38,"line":73},[36,8133,6474],{"class":46},[36,8135,8136],{"class":62}," 100",[36,8138,3711],{"class":42},[36,8140,8141],{"class":38,"line":86},[36,8142,3982],{"class":42},[36,8144,8145,8147,8149],{"class":38,"line":126},[36,8146,2570],{"class":46},[36,8148,4366],{"class":79},[36,8150,4369],{"class":42},[36,8152,8153],{"class":38,"line":131},[36,8154,3963],{"class":42},[36,8156,8157,8159,8161,8163,8166],{"class":38,"line":225},[36,8158,4378],{"class":46},[36,8160,7599],{"class":42},[36,8162,47],{"class":46},[36,8164,8165],{"class":79},"test03",[36,8167,8018],{"class":42},[36,8169,8170,8172,8174,8176,8178,8180,8182,8184],{"class":38,"line":235},[36,8171,3968],{"class":42},[36,8173,3594],{"class":46},[36,8175,7789],{"class":50},[36,8177,3594],{"class":46},[36,8179,7624],{"class":42},[36,8181,3594],{"class":46},[36,8183,3659],{"class":42},[36,8185,8186],{"class":2621}," \u002F\u002F100\n",[36,8188,8189],{"class":38,"line":377},[36,8190,3982],{"class":42},[19,8192,8193],{},"4.有参有返",[26,8195,8197],{"className":2556,"code":8196,"language":2558,"meta":31,"style":31},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[33,8198,8199,8214,8218,8231,8237,8241,8250,8254,8266,8280,8295],{"__ignoreMap":31},[36,8200,8201,8203,8206,8208,8210,8212],{"class":38,"line":39},[36,8202,2570],{"class":46},[36,8204,8205],{"class":79}," test04",[36,8207,92],{"class":42},[36,8209,2570],{"class":46},[36,8211,3815],{"class":7598},[36,8213,123],{"class":42},[36,8215,8216],{"class":38,"line":54},[36,8217,3963],{"class":42},[36,8219,8220,8222,8224,8227,8229],{"class":38,"line":66},[36,8221,3968],{"class":42},[36,8223,3594],{"class":46},[36,8225,8226],{"class":50},"\"hello\"",[36,8228,3594],{"class":46},[36,8230,3616],{"class":42},[36,8232,8233,8235],{"class":38,"line":73},[36,8234,6474],{"class":46},[36,8236,3849],{"class":42},[36,8238,8239],{"class":38,"line":86},[36,8240,3982],{"class":42},[36,8242,8243,8245,8248],{"class":38,"line":126},[36,8244,2570],{"class":46},[36,8246,8247],{"class":79}," mian",[36,8249,4369],{"class":42},[36,8251,8252],{"class":38,"line":131},[36,8253,3963],{"class":42},[36,8255,8256,8258,8260,8262,8264],{"class":38,"line":225},[36,8257,4378],{"class":46},[36,8259,5218],{"class":42},[36,8261,47],{"class":46},[36,8263,1906],{"class":62},[36,8265,3711],{"class":42},[36,8267,8268,8270,8272,8274,8277],{"class":38,"line":235},[36,8269,4378],{"class":46},[36,8271,5234],{"class":42},[36,8273,47],{"class":46},[36,8275,8276],{"class":79},"test04",[36,8278,8279],{"class":42},"(b);\n",[36,8281,8282,8284,8286,8288,8290,8292],{"class":38,"line":377},[36,8283,3968],{"class":42},[36,8285,3594],{"class":46},[36,8287,2845],{"class":42},[36,8289,3594],{"class":46},[36,8291,3659],{"class":42},[36,8293,8294],{"class":2621}," \u002F\u002F1\n",[36,8296,8297],{"class":38,"line":617},[36,8298,3982],{"class":42},[14,8300,8302],{"id":8301},"_25函数的声明","2.5函数的声明",[19,8304,8305],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8307,8308,8309],{},"函数的",[667,8310,8311],{},"声明可以多次，但是函数的定义只能有一次",[26,8313,8315],{"className":2556,"code":8314,"language":2558,"meta":31,"style":31},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[33,8316,8317,8322,8327,8352,8361,8365,8377,8389,8405,8409,8429,8433,8452],{"__ignoreMap":31},[36,8318,8319],{"class":38,"line":39},[36,8320,8321],{"class":2621},"\u002F\u002F函数声明\n",[36,8323,8324],{"class":38,"line":54},[36,8325,8326],{"class":2621},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,8328,8329,8331,8334,8336,8338,8340,8342,8344,8346,8349],{"class":38,"line":66},[36,8330,2570],{"class":46},[36,8332,8333],{"class":79}," max",[36,8335,92],{"class":42},[36,8337,2570],{"class":46},[36,8339,3815],{"class":7598},[36,8341,2934],{"class":42},[36,8343,2570],{"class":46},[36,8345,5218],{"class":7598},[36,8347,8348],{"class":42},");",[36,8350,8351],{"class":2621},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,8353,8354,8356,8358],{"class":38,"line":73},[36,8355,2570],{"class":46},[36,8357,4366],{"class":79},[36,8359,8360],{"class":42},"() \n",[36,8362,8363],{"class":38,"line":86},[36,8364,3963],{"class":42},[36,8366,8367,8369,8371,8373,8375],{"class":38,"line":126},[36,8368,4378],{"class":46},[36,8370,3815],{"class":42},[36,8372,47],{"class":46},[36,8374,3002],{"class":62},[36,8376,3711],{"class":42},[36,8378,8379,8381,8383,8385,8387],{"class":38,"line":131},[36,8380,4378],{"class":46},[36,8382,5218],{"class":42},[36,8384,47],{"class":46},[36,8386,3254],{"class":62},[36,8388,3711],{"class":42},[36,8390,8391,8393,8395,8398,8401,8403],{"class":38,"line":225},[36,8392,3968],{"class":42},[36,8394,3594],{"class":46},[36,8396,8397],{"class":79},"max",[36,8399,8400],{"class":42},"(a,b)",[36,8402,3594],{"class":46},[36,8404,3616],{"class":42},[36,8406,8407],{"class":38,"line":235},[36,8408,3982],{"class":42},[36,8410,8411,8413,8415,8417,8419,8421,8423,8425,8427],{"class":38,"line":377},[36,8412,2570],{"class":46},[36,8414,8333],{"class":79},[36,8416,92],{"class":42},[36,8418,2570],{"class":46},[36,8420,3815],{"class":7598},[36,8422,2934],{"class":42},[36,8424,2570],{"class":46},[36,8426,5218],{"class":7598},[36,8428,123],{"class":42},[36,8430,8431],{"class":38,"line":617},[36,8432,3963],{"class":42},[36,8434,8435,8437,8439,8441,8443,8445,8447,8449],{"class":38,"line":643},[36,8436,6474],{"class":46},[36,8438,3815],{"class":42},[36,8440,986],{"class":46},[36,8442,2820],{"class":42},[36,8444,3537],{"class":46},[36,8446,2796],{"class":42},[36,8448,3413],{"class":46},[36,8450,8451],{"class":42},"b;\n",[36,8453,8454],{"class":38,"line":921},[36,8455,3982],{"class":42},[14,8457,8459],{"id":8458},"_26函数的分文件编写","2.6函数的分文件编写",[19,8461,8462],{},"4个步骤：",[3557,8464,8465,8468,8471,8474],{},[653,8466,8467],{},"1.创建后缀名为.h的头文件",[653,8469,8470],{},"2.创建后缀名为.cpp的源文件",[653,8472,8473],{},"3.在头文件中写函数的定义",[653,8475,8476],{},"4.在源文件中写函数的定义\n示例：",[19,8478,8479],{},"头文件：swap.h",[26,8481,8483],{"className":2556,"code":8482,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,8484,8485,8491,8501,8505],{"__ignoreMap":31},[36,8486,8487,8489],{"class":38,"line":39},[36,8488,4343],{"class":46},[36,8490,4346],{"class":50},[36,8492,8493,8495,8497,8499],{"class":38,"line":54},[36,8494,4351],{"class":46},[36,8496,4354],{"class":46},[36,8498,4357],{"class":79},[36,8500,3711],{"class":42},[36,8502,8503],{"class":38,"line":66},[36,8504,8321],{"class":2621},[36,8506,8507,8509,8511,8513,8515,8517,8519,8521,8523],{"class":38,"line":73},[36,8508,7746],{"class":46},[36,8510,7749],{"class":79},[36,8512,92],{"class":42},[36,8514,2570],{"class":46},[36,8516,3815],{"class":7598},[36,8518,2934],{"class":42},[36,8520,2570],{"class":46},[36,8522,5218],{"class":7598},[36,8524,5104],{"class":42},[19,8526,8527],{},"源文件：swap.cpp",[26,8529,8531],{"className":2556,"code":8530,"language":2558,"meta":31,"style":31},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[33,8532,8533,8540,8545,8565,8569,8580,8589,8598,8615,8632],{"__ignoreMap":31},[36,8534,8535,8537],{"class":38,"line":39},[36,8536,4343],{"class":46},[36,8538,8539],{"class":50}," \"swap.h\"\n",[36,8541,8542],{"class":38,"line":54},[36,8543,8544],{"class":2621},"\u002F\u002F函数的定义\n",[36,8546,8547,8549,8551,8553,8555,8557,8559,8561,8563],{"class":38,"line":66},[36,8548,7746],{"class":46},[36,8550,7749],{"class":79},[36,8552,92],{"class":42},[36,8554,2570],{"class":46},[36,8556,3815],{"class":7598},[36,8558,2934],{"class":42},[36,8560,2570],{"class":46},[36,8562,5218],{"class":7598},[36,8564,123],{"class":42},[36,8566,8567],{"class":38,"line":73},[36,8568,3963],{"class":42},[36,8570,8571,8573,8575,8577],{"class":38,"line":86},[36,8572,4378],{"class":46},[36,8574,6638],{"class":42},[36,8576,47],{"class":46},[36,8578,8579],{"class":42},"a;\n",[36,8581,8582,8585,8587],{"class":38,"line":126},[36,8583,8584],{"class":42},"    a",[36,8586,47],{"class":46},[36,8588,8451],{"class":42},[36,8590,8591,8594,8596],{"class":38,"line":131},[36,8592,8593],{"class":42},"    b",[36,8595,47],{"class":46},[36,8597,6663],{"class":42},[36,8599,8600,8602,8604,8607,8609,8611,8613],{"class":38,"line":225},[36,8601,3968],{"class":42},[36,8603,3594],{"class":46},[36,8605,8606],{"class":50},"\"a=\"",[36,8608,3594],{"class":46},[36,8610,2796],{"class":42},[36,8612,3594],{"class":46},[36,8614,3616],{"class":42},[36,8616,8617,8619,8621,8624,8626,8628,8630],{"class":38,"line":235},[36,8618,3968],{"class":42},[36,8620,3594],{"class":46},[36,8622,8623],{"class":50},"\"b=\"",[36,8625,3594],{"class":46},[36,8627,2820],{"class":42},[36,8629,3594],{"class":46},[36,8631,3616],{"class":42},[36,8633,8634],{"class":38,"line":377},[36,8635,3982],{"class":42},[2467,8637,8638],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":8640},[8641,8642,8643,8644,8645,8646],{"id":7555,"depth":54,"text":7556},{"id":7643,"depth":54,"text":7644},{"id":7726,"depth":54,"text":7727},{"id":7952,"depth":54,"text":7953},{"id":8301,"depth":54,"text":8302},{"id":8458,"depth":54,"text":8459},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7547,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8653,"title":8654,"body":8655,"description":8662,"extension":2494,"meta":10066,"navigation":69,"path":10067,"seo":10068,"stem":10069,"__hash__":10070},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8656,"toc":10056},[8657,8660,8663,8667,8828,8832,8835,8838,8841,8844,8984,8988,8991,8994,8997,9062,9066,9071,9138,9141,9145,9148,9159,9164,9184,9187,9192,9211,9214,9218,9237,9240,9244,9479,9483,9486,9489,9492,9654,9657,9661,9664,9670,10053],[10,8658,8654],{"id":8659},"_3指针",[19,8661,8662],{},"通过指针保存一个地址，指针就是个地址",[14,8664,8666],{"id":8665},"_31定义指针","3.1定义指针",[26,8668,8670],{"className":2556,"code":8669,"language":2558,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[33,8671,8672,8680,8684,8689,8701,8706,8714,8724,8742,8762,8766,8771,8776,8781,8794,8810,8824],{"__ignoreMap":31},[36,8673,8674,8676,8678],{"class":38,"line":39},[36,8675,2570],{"class":46},[36,8677,4366],{"class":79},[36,8679,4369],{"class":42},[36,8681,8682],{"class":38,"line":54},[36,8683,3963],{"class":42},[36,8685,8686],{"class":38,"line":66},[36,8687,8688],{"class":2621},"    \u002F\u002F1.定义指针\n",[36,8690,8691,8693,8695,8697,8699],{"class":38,"line":73},[36,8692,4378],{"class":46},[36,8694,3815],{"class":42},[36,8696,47],{"class":46},[36,8698,3002],{"class":62},[36,8700,3711],{"class":42},[36,8702,8703],{"class":38,"line":86},[36,8704,8705],{"class":2621},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,8707,8708,8711],{"class":38,"line":126},[36,8709,8710],{"class":46},"    int*",[36,8712,8713],{"class":42},"p;\n",[36,8715,8716,8719,8722],{"class":38,"line":131},[36,8717,8718],{"class":42},"    p",[36,8720,8721],{"class":46},"=&",[36,8723,8579],{"class":42},[36,8725,8726,8728,8730,8733,8736,8738,8740],{"class":38,"line":225},[36,8727,3968],{"class":42},[36,8729,3594],{"class":46},[36,8731,8732],{"class":50},"\"a的地址为：\"",[36,8734,8735],{"class":46},"\u003C\u003C&",[36,8737,2796],{"class":42},[36,8739,3594],{"class":46},[36,8741,3616],{"class":42},[36,8743,8744,8746,8748,8751,8753,8755,8757,8759],{"class":38,"line":235},[36,8745,3968],{"class":42},[36,8747,3594],{"class":46},[36,8749,8750],{"class":50},"\"指针p为：\"",[36,8752,3594],{"class":46},[36,8754,19],{"class":42},[36,8756,3594],{"class":46},[36,8758,3659],{"class":42},[36,8760,8761],{"class":2621},"\u002F\u002F指针p表示的就是a的地址\n",[36,8763,8764],{"class":38,"line":377},[36,8765,70],{"emptyLinePlaceholder":69},[36,8767,8768],{"class":38,"line":617},[36,8769,8770],{"class":2621},"    \u002F\u002F2.使用指针\n",[36,8772,8773],{"class":38,"line":643},[36,8774,8775],{"class":2621},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,8777,8778],{"class":38,"line":921},[36,8779,8780],{"class":2621},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,8782,8783,8786,8788,8790,8792],{"class":38,"line":934},[36,8784,8785],{"class":46},"    *",[36,8787,19],{"class":42},[36,8789,47],{"class":46},[36,8791,1048],{"class":62},[36,8793,3711],{"class":42},[36,8795,8796,8798,8801,8803,8805,8807],{"class":38,"line":939},[36,8797,3968],{"class":42},[36,8799,8800],{"class":46},"\u003C\u003C*",[36,8802,19],{"class":42},[36,8804,3594],{"class":46},[36,8806,3659],{"class":42},[36,8808,8809],{"class":2621},"\u002F\u002F1000\n",[36,8811,8812,8814,8816,8818,8820,8822],{"class":38,"line":949},[36,8813,3968],{"class":42},[36,8815,3594],{"class":46},[36,8817,2796],{"class":42},[36,8819,3594],{"class":46},[36,8821,3659],{"class":42},[36,8823,8809],{"class":2621},[36,8825,8826],{"class":38,"line":962},[36,8827,3982],{"class":42},[14,8829,8831],{"id":8830},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8833,8834],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8836,8837],{},"在32位操作系统下：占用4个字节空间",[19,8839,8840],{},"在64位操作系统下：占用8个字节空间",[19,8842,8843],{},"上方是不管啥数据类型的",[26,8845,8847],{"className":2556,"code":8846,"language":2558,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[33,8848,8849,8857,8861,8866,8878,8883,8888,8893,8906,8928,8954,8980],{"__ignoreMap":31},[36,8850,8851,8853,8855],{"class":38,"line":39},[36,8852,2570],{"class":46},[36,8854,4366],{"class":79},[36,8856,4369],{"class":42},[36,8858,8859],{"class":38,"line":54},[36,8860,3963],{"class":42},[36,8862,8863],{"class":38,"line":66},[36,8864,8865],{"class":2621},"    \u002F\u002F指针所占内存空间\n",[36,8867,8868,8870,8872,8874,8876],{"class":38,"line":73},[36,8869,4378],{"class":46},[36,8871,3815],{"class":42},[36,8873,47],{"class":46},[36,8875,3002],{"class":62},[36,8877,3711],{"class":42},[36,8879,8880],{"class":38,"line":86},[36,8881,8882],{"class":2621},"    \u002F\u002Fint *p;\n",[36,8884,8885],{"class":38,"line":126},[36,8886,8887],{"class":2621},"    \u002F\u002Fp=&a;\n",[36,8889,8890],{"class":38,"line":131},[36,8891,8892],{"class":2621},"    \u002F\u002F上述可以写为以下：\n",[36,8894,8895,8897,8900,8902,8904],{"class":38,"line":225},[36,8896,4378],{"class":46},[36,8898,8899],{"class":46}," *",[36,8901,19],{"class":42},[36,8903,8721],{"class":46},[36,8905,8579],{"class":42},[36,8907,8908,8911,8913,8916,8918,8921,8923,8925],{"class":38,"line":235},[36,8909,8910],{"class":42},"    cout ",[36,8912,3594],{"class":46},[36,8914,8915],{"class":50},"\"sizeof(int *)\"",[36,8917,3789],{"class":46},[36,8919,8920],{"class":42},"(p)",[36,8922,3594],{"class":46},[36,8924,3659],{"class":42},[36,8926,8927],{"class":2621},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,8929,8930,8932,8934,8936,8938,8940,8942,8944,8946,8948,8951],{"class":38,"line":377},[36,8931,8910],{"class":42},[36,8933,3594],{"class":46},[36,8935,8915],{"class":50},[36,8937,3789],{"class":46},[36,8939,92],{"class":42},[36,8941,2570],{"class":46},[36,8943,8899],{"class":46},[36,8945,2985],{"class":42},[36,8947,3594],{"class":46},[36,8949,8950],{"class":42},"endl",[36,8952,8953],{"class":2621},"  \u002F\u002F4字节(32位的话)\n",[36,8955,8956,8958,8960,8963,8965,8967,8969,8971,8973,8975,8977],{"class":38,"line":617},[36,8957,8910],{"class":42},[36,8959,3594],{"class":46},[36,8961,8962],{"class":50},"\"sizeof(char *)\"",[36,8964,3789],{"class":46},[36,8966,92],{"class":42},[36,8968,2658],{"class":46},[36,8970,8899],{"class":46},[36,8972,2985],{"class":42},[36,8974,3594],{"class":46},[36,8976,3659],{"class":42},[36,8978,8979],{"class":2621}," \u002F\u002F4字节(32位的话)\n",[36,8981,8982],{"class":38,"line":643},[36,8983,3982],{"class":42},[14,8985,8987],{"id":8986},"_33空指针","3.3空指针",[19,8989,8990],{},"空指针：指针变量指向内存中编号为0的空间",[19,8992,8993],{},"用途：初始化指针变量",[19,8995,8996],{},"注意：空指针指向的内存是不可以访问的",[26,8998,9000],{"className":2556,"code":8999,"language":2558,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,9001,9002,9010,9014,9019,9033,9038,9053,9058],{"__ignoreMap":31},[36,9003,9004,9006,9008],{"class":38,"line":39},[36,9005,2570],{"class":46},[36,9007,4366],{"class":79},[36,9009,4369],{"class":42},[36,9011,9012],{"class":38,"line":54},[36,9013,3963],{"class":42},[36,9015,9016],{"class":38,"line":66},[36,9017,9018],{"class":2621},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,9020,9021,9023,9025,9027,9029,9031],{"class":38,"line":73},[36,9022,4378],{"class":46},[36,9024,8899],{"class":46},[36,9026,19],{"class":42},[36,9028,47],{"class":46},[36,9030,4785],{"class":62},[36,9032,3711],{"class":42},[36,9034,9035],{"class":38,"line":86},[36,9036,9037],{"class":2621},"    \u002F\u002F2.空指针不能进行访问\n",[36,9039,9040,9042,9044,9046,9048,9050],{"class":38,"line":126},[36,9041,8785],{"class":46},[36,9043,19],{"class":42},[36,9045,47],{"class":46},[36,9047,1070],{"class":62},[36,9049,2618],{"class":42},[36,9051,9052],{"class":2621},"\u002F\u002F直接报错，压根不能访问\n",[36,9054,9055],{"class":38,"line":131},[36,9056,9057],{"class":2621},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,9059,9060],{"class":38,"line":225},[36,9061,3982],{"class":42},[14,9063,9065],{"id":9064},"_34野指针","3.4野指针",[19,9067,9068],{},[667,9069,9070],{},"指针变量指向非法的内存空间",[26,9072,9074],{"className":2556,"code":9073,"language":2558,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,9075,9076,9084,9088,9117,9122,9134],{"__ignoreMap":31},[36,9077,9078,9080,9082],{"class":38,"line":39},[36,9079,2570],{"class":46},[36,9081,4366],{"class":79},[36,9083,4369],{"class":42},[36,9085,9086],{"class":38,"line":54},[36,9087,3963],{"class":42},[36,9089,9090,9092,9094,9096,9098,9100,9102,9104,9106,9109,9112,9114],{"class":38,"line":66},[36,9091,4378],{"class":46},[36,9093,8899],{"class":46},[36,9095,19],{"class":42},[36,9097,47],{"class":46},[36,9099,92],{"class":42},[36,9101,2570],{"class":46},[36,9103,8899],{"class":46},[36,9105,2985],{"class":42},[36,9107,9108],{"class":46},"0x",[36,9110,9111],{"class":62},"1100",[36,9113,2618],{"class":42},[36,9115,9116],{"class":2621}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,9118,9119],{"class":38,"line":73},[36,9120,9121],{"class":2621},"    \u002F\u002F访问野指针报错\n",[36,9123,9124,9126,9128,9130,9132],{"class":38,"line":86},[36,9125,3968],{"class":42},[36,9127,8800],{"class":46},[36,9129,19],{"class":42},[36,9131,3594],{"class":46},[36,9133,3616],{"class":42},[36,9135,9136],{"class":38,"line":126},[36,9137,3982],{"class":42},[19,9139,9140],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9142,9144],{"id":9143},"_35const修饰指针","3.5const修饰指针",[19,9146,9147],{},"三种情况：",[3557,9149,9150,9153,9156],{},[653,9151,9152],{},"const修饰指针 常量指针",[653,9154,9155],{},"const修饰常量 指针常量",[653,9157,9158],{},"const即修饰指针，又修饰常量",[650,9160,9161],{},[653,9162,9163],{},"常量指针",[26,9165,9167],{"className":2556,"code":9166,"language":2558,"meta":31,"style":31},"const int *p=&a;\n",[33,9168,9169],{"__ignoreMap":31},[36,9170,9171,9174,9176,9178,9180,9182],{"class":38,"line":39},[36,9172,9173],{"class":46},"const",[36,9175,4775],{"class":46},[36,9177,8899],{"class":46},[36,9179,19],{"class":42},[36,9181,8721],{"class":46},[36,9183,8579],{"class":42},[19,9185,9186],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[650,9188,9189],{"start":54},[653,9190,9191],{},"指针常量",[26,9193,9195],{"className":2556,"code":9194,"language":2558,"meta":31,"style":31},"int *const p=&a;\n",[33,9196,9197],{"__ignoreMap":31},[36,9198,9199,9201,9204,9207,9209],{"class":38,"line":39},[36,9200,2570],{"class":46},[36,9202,9203],{"class":46}," *const",[36,9205,9206],{"class":42}," p",[36,9208,8721],{"class":46},[36,9210,8579],{"class":42},[19,9212,9213],{},"指针的指向不可以改，指针指向的值可以改",[650,9215,9216],{"start":66},[653,9217,9158],{},[26,9219,9221],{"className":2556,"code":9220,"language":2558,"meta":31,"style":31},"const int *const p=&a;\n",[33,9222,9223],{"__ignoreMap":31},[36,9224,9225,9227,9229,9231,9233,9235],{"class":38,"line":39},[36,9226,9173],{"class":46},[36,9228,4775],{"class":46},[36,9230,9203],{"class":46},[36,9232,9206],{"class":42},[36,9234,8721],{"class":46},[36,9236,8579],{"class":42},[19,9238,9239],{},"指针的指向和指针指向的值都不可以改变",[14,9241,9243],{"id":9242},"_36指针和数组","3.6指针和数组",[26,9245,9247],{"className":2556,"code":9246,"language":2558,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[33,9248,9249,9257,9261,9266,9320,9341,9357,9373,9384,9401,9406,9420,9446,9450,9462,9471,9475],{"__ignoreMap":31},[36,9250,9251,9253,9255],{"class":38,"line":39},[36,9252,2570],{"class":46},[36,9254,4366],{"class":79},[36,9256,4369],{"class":42},[36,9258,9259],{"class":38,"line":54},[36,9260,3963],{"class":42},[36,9262,9263],{"class":38,"line":66},[36,9264,9265],{"class":2621},"    \u002F\u002F利用指针访问数组中的元素\n",[36,9267,9268,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302,9304,9306,9308,9310,9312,9314,9316,9318],{"class":38,"line":73},[36,9269,4378],{"class":46},[36,9271,6346],{"class":42},[36,9273,3002],{"class":62},[36,9275,3493],{"class":42},[36,9277,47],{"class":46},[36,9279,101],{"class":42},[36,9281,1906],{"class":62},[36,9283,2934],{"class":42},[36,9285,1911],{"class":62},[36,9287,2934],{"class":42},[36,9289,2634],{"class":62},[36,9291,2934],{"class":42},[36,9293,2850],{"class":62},[36,9295,2934],{"class":42},[36,9297,2875],{"class":62},[36,9299,2934],{"class":42},[36,9301,2900],{"class":62},[36,9303,2934],{"class":42},[36,9305,2925],{"class":62},[36,9307,2934],{"class":42},[36,9309,2951],{"class":62},[36,9311,2934],{"class":42},[36,9313,2976],{"class":62},[36,9315,2934],{"class":42},[36,9317,3002],{"class":62},[36,9319,6379],{"class":42},[36,9321,9322,9324,9326,9329,9331,9333,9335,9337,9339],{"class":38,"line":86},[36,9323,3968],{"class":42},[36,9325,3594],{"class":46},[36,9327,9328],{"class":50},"\"数组的第一个元素为：\"",[36,9330,3594],{"class":46},[36,9332,6290],{"class":42},[36,9334,2751],{"class":62},[36,9336,3493],{"class":42},[36,9338,3594],{"class":46},[36,9340,3616],{"class":42},[36,9342,9343,9345,9347,9349,9351,9354],{"class":38,"line":126},[36,9344,4378],{"class":46},[36,9346,8899],{"class":46},[36,9348,19],{"class":42},[36,9350,47],{"class":46},[36,9352,9353],{"class":42},"arr;",[36,9355,9356],{"class":2621},"\u002F\u002F注意数才要加取地址符号&\n",[36,9358,9359,9361,9363,9365,9367,9369,9371],{"class":38,"line":131},[36,9360,3968],{"class":42},[36,9362,3594],{"class":46},[36,9364,9328],{"class":50},[36,9366,8800],{"class":46},[36,9368,19],{"class":42},[36,9370,3594],{"class":46},[36,9372,3616],{"class":42},[36,9374,9375,9377,9379,9381],{"class":38,"line":225},[36,9376,8718],{"class":42},[36,9378,4685],{"class":46},[36,9380,2618],{"class":42},[36,9382,9383],{"class":2621}," \u002F\u002F让指针向后偏移4个字节\n",[36,9385,9386,9388,9390,9393,9395,9397,9399],{"class":38,"line":235},[36,9387,3968],{"class":42},[36,9389,3594],{"class":46},[36,9391,9392],{"class":50},"\"数组的第二个元素为：\"",[36,9394,8800],{"class":46},[36,9396,19],{"class":42},[36,9398,3594],{"class":46},[36,9400,3616],{"class":42},[36,9402,9403],{"class":38,"line":377},[36,9404,9405],{"class":2621},"    \u002F\u002F利用指针遍历数组\n",[36,9407,9408,9410,9412,9415,9417],{"class":38,"line":617},[36,9409,4378],{"class":46},[36,9411,8899],{"class":46},[36,9413,9414],{"class":42},"p2",[36,9416,47],{"class":46},[36,9418,9419],{"class":42},"arr;\n",[36,9421,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444],{"class":38,"line":643},[36,9423,5586],{"class":46},[36,9425,4066],{"class":42},[36,9427,2570],{"class":46},[36,9429,5417],{"class":42},[36,9431,47],{"class":46},[36,9433,2751],{"class":62},[36,9435,5424],{"class":42},[36,9437,3463],{"class":46},[36,9439,3002],{"class":62},[36,9441,5424],{"class":42},[36,9443,4685],{"class":46},[36,9445,123],{"class":42},[36,9447,9448],{"class":38,"line":921},[36,9449,4423],{"class":42},[36,9451,9452,9454,9456,9458,9460],{"class":38,"line":934},[36,9453,5836],{"class":42},[36,9455,8800],{"class":46},[36,9457,9414],{"class":42},[36,9459,3594],{"class":46},[36,9461,3616],{"class":42},[36,9463,9464,9467,9469],{"class":38,"line":939},[36,9465,9466],{"class":42},"        p2",[36,9468,4685],{"class":46},[36,9470,3711],{"class":42},[36,9472,9473],{"class":38,"line":949},[36,9474,4580],{"class":42},[36,9476,9477],{"class":38,"line":962},[36,9478,3982],{"class":42},[14,9480,9482],{"id":9481},"_37指针和函数","3.7指针和函数",[19,9484,9485],{},"利用指针做函数参数，可以修改实参的值",[19,9487,9488],{},"值传递：只改变形参，不改变实参",[19,9490,9491],{},"地址传递：",[26,9493,9495],{"className":2556,"code":9494,"language":2558,"meta":31,"style":31},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[33,9496,9497,9522,9526,9538,9549,9559,9563,9571,9575,9587,9599,9604,9620,9635,9650],{"__ignoreMap":31},[36,9498,9499,9501,9503,9505,9507,9509,9512,9514,9516,9518,9520],{"class":38,"line":39},[36,9500,7746],{"class":46},[36,9502,7749],{"class":79},[36,9504,92],{"class":42},[36,9506,2570],{"class":46},[36,9508,8899],{"class":46},[36,9510,9511],{"class":7598},"p1",[36,9513,2934],{"class":42},[36,9515,2570],{"class":46},[36,9517,8899],{"class":46},[36,9519,9414],{"class":7598},[36,9521,123],{"class":42},[36,9523,9524],{"class":38,"line":54},[36,9525,3963],{"class":42},[36,9527,9528,9530,9532,9535],{"class":38,"line":66},[36,9529,4378],{"class":46},[36,9531,6638],{"class":42},[36,9533,9534],{"class":46},"=*",[36,9536,9537],{"class":42},"p1;\n",[36,9539,9540,9542,9544,9546],{"class":38,"line":73},[36,9541,8785],{"class":46},[36,9543,9511],{"class":42},[36,9545,9534],{"class":46},[36,9547,9548],{"class":42},"p2;\n",[36,9550,9551,9553,9555,9557],{"class":38,"line":86},[36,9552,8785],{"class":46},[36,9554,9414],{"class":42},[36,9556,47],{"class":46},[36,9558,6663],{"class":42},[36,9560,9561],{"class":38,"line":126},[36,9562,3982],{"class":42},[36,9564,9565,9567,9569],{"class":38,"line":131},[36,9566,2570],{"class":46},[36,9568,4366],{"class":79},[36,9570,4369],{"class":42},[36,9572,9573],{"class":38,"line":225},[36,9574,3963],{"class":42},[36,9576,9577,9579,9581,9583,9585],{"class":38,"line":235},[36,9578,4378],{"class":46},[36,9580,3815],{"class":42},[36,9582,47],{"class":46},[36,9584,3002],{"class":62},[36,9586,3711],{"class":42},[36,9588,9589,9591,9593,9595,9597],{"class":38,"line":377},[36,9590,4378],{"class":46},[36,9592,5218],{"class":42},[36,9594,47],{"class":46},[36,9596,3254],{"class":62},[36,9598,3711],{"class":42},[36,9600,9601],{"class":38,"line":617},[36,9602,9603],{"class":2621},"    \u002F\u002F地址传递\n",[36,9605,9606,9608,9610,9612,9615,9617],{"class":38,"line":643},[36,9607,7943],{"class":79},[36,9609,92],{"class":42},[36,9611,2909],{"class":46},[36,9613,9614],{"class":42},"a,",[36,9616,2909],{"class":46},[36,9618,9619],{"class":42},"b);\n",[36,9621,9622,9624,9626,9628,9630,9632],{"class":38,"line":921},[36,9623,3968],{"class":42},[36,9625,3594],{"class":46},[36,9627,2796],{"class":42},[36,9629,3594],{"class":46},[36,9631,3659],{"class":42},[36,9633,9634],{"class":2621},"\u002F\u002F20\n",[36,9636,9637,9639,9641,9643,9645,9647],{"class":38,"line":934},[36,9638,3968],{"class":42},[36,9640,3594],{"class":46},[36,9642,2820],{"class":42},[36,9644,3594],{"class":46},[36,9646,3659],{"class":42},[36,9648,9649],{"class":2621},"\u002F\u002F10\n",[36,9651,9652],{"class":38,"line":939},[36,9653,3982],{"class":42},[19,9655,9656],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9658,9660],{"id":9659},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9662,9663],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9665,9666,9667,9669],{},"例如数组：int arr",[36,9668,3002],{},"={4,3,6,9,1,2,10,8,7,5}",[26,9671,9673],{"className":2556,"code":9672,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[33,9674,9675,9681,9691,9715,9719,9750,9754,9788,9792,9810,9814,9825,9840,9855,9859,9863,9867,9871,9875,9883,9887,9892,9946,9958,9970,9975,9983,9987,9992,10017,10021,10036,10045,10049],{"__ignoreMap":31},[36,9676,9677,9679],{"class":38,"line":39},[36,9678,4343],{"class":46},[36,9680,4346],{"class":50},[36,9682,9683,9685,9687,9689],{"class":38,"line":54},[36,9684,4351],{"class":46},[36,9686,4354],{"class":46},[36,9688,4357],{"class":79},[36,9690,3711],{"class":42},[36,9692,9693,9695,9698,9700,9702,9704,9706,9708,9710,9713],{"class":38,"line":66},[36,9694,7746],{"class":46},[36,9696,9697],{"class":79}," bubbleSort",[36,9699,92],{"class":42},[36,9701,2570],{"class":46},[36,9703,8899],{"class":46},[36,9705,19],{"class":7598},[36,9707,2934],{"class":42},[36,9709,2570],{"class":46},[36,9711,9712],{"class":7598}," len",[36,9714,123],{"class":42},[36,9716,9717],{"class":38,"line":73},[36,9718,3963],{"class":42},[36,9720,9721,9723,9725,9727,9729,9731,9733,9735,9737,9740,9742,9744,9746,9748],{"class":38,"line":86},[36,9722,5586],{"class":46},[36,9724,92],{"class":42},[36,9726,2570],{"class":46},[36,9728,5417],{"class":42},[36,9730,47],{"class":46},[36,9732,2751],{"class":62},[36,9734,5424],{"class":42},[36,9736,3463],{"class":46},[36,9738,9739],{"class":42},"len",[36,9741,3087],{"class":46},[36,9743,1906],{"class":62},[36,9745,5424],{"class":42},[36,9747,4685],{"class":46},[36,9749,123],{"class":42},[36,9751,9752],{"class":38,"line":126},[36,9753,4423],{"class":42},[36,9755,9756,9758,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782,9784,9786],{"class":38,"line":131},[36,9757,5788],{"class":46},[36,9759,92],{"class":42},[36,9761,2570],{"class":46},[36,9763,5795],{"class":42},[36,9765,47],{"class":46},[36,9767,2751],{"class":62},[36,9769,5802],{"class":42},[36,9771,3463],{"class":46},[36,9773,9739],{"class":42},[36,9775,3087],{"class":46},[36,9777,2997],{"class":42},[36,9779,3087],{"class":46},[36,9781,1906],{"class":62},[36,9783,5802],{"class":42},[36,9785,4685],{"class":46},[36,9787,123],{"class":42},[36,9789,9790],{"class":38,"line":225},[36,9791,4901],{"class":42},[36,9793,9794,9796,9799,9801,9804,9806,9808],{"class":38,"line":235},[36,9795,7025],{"class":46},[36,9797,9798],{"class":42},"(p[j]",[36,9800,986],{"class":46},[36,9802,9803],{"class":42},"p[j",[36,9805,1885],{"class":46},[36,9807,1906],{"class":62},[36,9809,7040],{"class":42},[36,9811,9812],{"class":38,"line":377},[36,9813,7045],{"class":42},[36,9815,9816,9818,9820,9822],{"class":38,"line":617},[36,9817,7050],{"class":46},[36,9819,6638],{"class":42},[36,9821,47],{"class":46},[36,9823,9824],{"class":42},"p[j];\n",[36,9826,9827,9830,9832,9834,9836,9838],{"class":38,"line":643},[36,9828,9829],{"class":42},"                p[j]",[36,9831,47],{"class":46},[36,9833,9803],{"class":42},[36,9835,1885],{"class":46},[36,9837,1906],{"class":62},[36,9839,7073],{"class":42},[36,9841,9842,9845,9847,9849,9851,9853],{"class":38,"line":921},[36,9843,9844],{"class":42},"                p[j",[36,9846,1885],{"class":46},[36,9848,1906],{"class":62},[36,9850,3493],{"class":42},[36,9852,47],{"class":46},[36,9854,6663],{"class":42},[36,9856,9857],{"class":38,"line":934},[36,9858,7093],{"class":42},[36,9860,9861],{"class":38,"line":939},[36,9862,2204],{"class":42},[36,9864,9865],{"class":38,"line":949},[36,9866,4580],{"class":42},[36,9868,9869],{"class":38,"line":962},[36,9870,3982],{"class":42},[36,9872,9873],{"class":38,"line":974},[36,9874,70],{"emptyLinePlaceholder":69},[36,9876,9877,9879,9881],{"class":38,"line":979},[36,9878,2570],{"class":46},[36,9880,4366],{"class":79},[36,9882,4369],{"class":42},[36,9884,9885],{"class":38,"line":994},[36,9886,3963],{"class":42},[36,9888,9889],{"class":38,"line":1006},[36,9890,9891],{"class":2621},"    \u002F\u002F 1.创建数组\n",[36,9893,9894,9896,9898,9900,9902,9904,9906,9908,9910,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932,9934,9936,9938,9940,9942,9944],{"class":38,"line":1011},[36,9895,4378],{"class":46},[36,9897,6346],{"class":42},[36,9899,3002],{"class":62},[36,9901,3493],{"class":42},[36,9903,47],{"class":46},[36,9905,101],{"class":42},[36,9907,2850],{"class":62},[36,9909,2934],{"class":42},[36,9911,2634],{"class":62},[36,9913,2934],{"class":42},[36,9915,2900],{"class":62},[36,9917,2934],{"class":42},[36,9919,2976],{"class":62},[36,9921,2934],{"class":42},[36,9923,1906],{"class":62},[36,9925,2934],{"class":42},[36,9927,1911],{"class":62},[36,9929,2934],{"class":42},[36,9931,3002],{"class":62},[36,9933,2934],{"class":42},[36,9935,2951],{"class":62},[36,9937,2934],{"class":42},[36,9939,2925],{"class":62},[36,9941,2934],{"class":42},[36,9943,2875],{"class":62},[36,9945,6379],{"class":42},[36,9947,9948,9950,9952,9954,9956],{"class":38,"line":1023},[36,9949,4378],{"class":46},[36,9951,9712],{"class":42},[36,9953,47],{"class":46},[36,9955,3002],{"class":62},[36,9957,3711],{"class":42},[36,9959,9960,9962,9964,9966,9968],{"class":38,"line":1028},[36,9961,4378],{"class":46},[36,9963,8899],{"class":46},[36,9965,19],{"class":42},[36,9967,47],{"class":46},[36,9969,9419],{"class":42},[36,9971,9972],{"class":38,"line":1033},[36,9973,9974],{"class":2621},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,9976,9977,9980],{"class":38,"line":1053},[36,9978,9979],{"class":79},"    bubbleSort",[36,9981,9982],{"class":42},"(p,len);\n",[36,9984,9985],{"class":38,"line":1064},[36,9986,70],{"emptyLinePlaceholder":69},[36,9988,9989],{"class":38,"line":1075},[36,9990,9991],{"class":2621},"    \u002F\u002F 3.打印排序后的数组\n",[36,9993,9994,9996,9998,10000,10002,10004,10006,10008,10010,10013,10015],{"class":38,"line":2291},[36,9995,5586],{"class":46},[36,9997,4066],{"class":42},[36,9999,2570],{"class":46},[36,10001,5417],{"class":42},[36,10003,47],{"class":46},[36,10005,2751],{"class":62},[36,10007,5599],{"class":42},[36,10009,3463],{"class":46},[36,10011,10012],{"class":42},"len; i",[36,10014,4685],{"class":46},[36,10016,123],{"class":42},[36,10018,10019],{"class":38,"line":2329},[36,10020,4423],{"class":42},[36,10022,10023,10025,10027,10029,10031,10034],{"class":38,"line":2334},[36,10024,5836],{"class":42},[36,10026,8800],{"class":46},[36,10028,19],{"class":42},[36,10030,3594],{"class":46},[36,10032,10033],{"class":50},"\"\"",[36,10035,3711],{"class":42},[36,10037,10038,10041,10043],{"class":38,"line":2339},[36,10039,10040],{"class":42},"        p",[36,10042,4685],{"class":46},[36,10044,3711],{"class":42},[36,10046,10047],{"class":38,"line":2365},[36,10048,4580],{"class":42},[36,10050,10051],{"class":38,"line":2373},[36,10052,3982],{"class":42},[2467,10054,10055],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":10057},[10058,10059,10060,10061,10062,10063,10064,10065],{"id":8665,"depth":54,"text":8666},{"id":8830,"depth":54,"text":8831},{"id":8986,"depth":54,"text":8987},{"id":9064,"depth":54,"text":9065},{"id":9143,"depth":54,"text":9144},{"id":9242,"depth":54,"text":9243},{"id":9481,"depth":54,"text":9482},{"id":9659,"depth":54,"text":9660},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8654,"description":8662},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10072,"title":10073,"body":10074,"description":10081,"extension":2494,"meta":13053,"navigation":69,"path":13054,"seo":13055,"stem":13056,"__hash__":13057},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10075,"toc":13044},[10076,10079,10082,10086,10089,10092,10103,10440,10443,10447,10450,10457,10712,10716,10719,10722,10877,10881,10884,10887,11093,11097,11100,11403,11406,11414,11418,11421,11572,11574,11585,11642,11646,11651,12307,12315,12318,12412,12415,13035,13041],[10,10077,10073],{"id":10078},"_4结构体",[19,10080,10081],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10083,10085],{"id":10084},"_41结构体定义与使用","4.1结构体定义与使用",[19,10087,10088],{},"语法：struct 结构体名 {结构体成员列表}；",[19,10090,10091],{},"通过结构体创建变量的方式：",[3557,10093,10094,10097,10100],{},[653,10095,10096],{},"struct 结构体名 变量名",[653,10098,10099],{},"struct 结构体名 变量名={成员1值，成员2值...}",[653,10101,10102],{},"定义结构体时顺便创建变量",[26,10104,10106],{"className":2556,"code":10105,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[33,10107,10108,10114,10124,10131,10136,10144,10148,10153,10157,10162,10167,10172,10179,10184,10191,10195,10202,10206,10210,10214,10218,10222,10226,10232,10236,10242,10250,10258,10262,10267,10272,10282,10287,10299,10310,10321,10326,10350,10355,10361,10388,10393,10399,10411,10423,10435],{"__ignoreMap":31},[36,10109,10110,10112],{"class":38,"line":39},[36,10111,4343],{"class":46},[36,10113,4346],{"class":50},[36,10115,10116,10118,10120,10122],{"class":38,"line":54},[36,10117,4351],{"class":46},[36,10119,4354],{"class":46},[36,10121,4357],{"class":79},[36,10123,3711],{"class":42},[36,10125,10126,10128],{"class":38,"line":66},[36,10127,4343],{"class":46},[36,10129,10130],{"class":50},"\u003Cstring>\n",[36,10132,10133],{"class":38,"line":73},[36,10134,10135],{"class":2621},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,10137,10138,10141],{"class":38,"line":86},[36,10139,10140],{"class":46},"struct",[36,10142,10143],{"class":79}," Student\n",[36,10145,10146],{"class":38,"line":126},[36,10147,3963],{"class":42},[36,10149,10150],{"class":38,"line":131},[36,10151,10152],{"class":2621},"    \u002F\u002F成员列表\n",[36,10154,10155],{"class":38,"line":225},[36,10156,70],{"emptyLinePlaceholder":69},[36,10158,10159],{"class":38,"line":235},[36,10160,10161],{"class":2621},"    \u002F\u002F姓名\n",[36,10163,10164],{"class":38,"line":377},[36,10165,10166],{"class":42},"    string name;\n",[36,10168,10169],{"class":38,"line":617},[36,10170,10171],{"class":2621},"    \u002F\u002F年龄\n",[36,10173,10174,10176],{"class":38,"line":643},[36,10175,4378],{"class":46},[36,10177,10178],{"class":42}," age;\n",[36,10180,10181],{"class":38,"line":921},[36,10182,10183],{"class":2621},"    \u002F\u002F分数\n",[36,10185,10186,10188],{"class":38,"line":934},[36,10187,4378],{"class":46},[36,10189,10190],{"class":42}," score;\n",[36,10192,10193],{"class":38,"line":939},[36,10194,6379],{"class":42},[36,10196,10197,10199],{"class":38,"line":949},[36,10198,10140],{"class":46},[36,10200,10201],{"class":79}," School\n",[36,10203,10204],{"class":38,"line":962},[36,10205,3963],{"class":42},[36,10207,10208],{"class":38,"line":974},[36,10209,10152],{"class":2621},[36,10211,10212],{"class":38,"line":979},[36,10213,70],{"emptyLinePlaceholder":69},[36,10215,10216],{"class":38,"line":994},[36,10217,10161],{"class":2621},[36,10219,10220],{"class":38,"line":1006},[36,10221,10166],{"class":42},[36,10223,10224],{"class":38,"line":1011},[36,10225,10171],{"class":2621},[36,10227,10228,10230],{"class":38,"line":1023},[36,10229,4378],{"class":46},[36,10231,10178],{"class":42},[36,10233,10234],{"class":38,"line":1028},[36,10235,10183],{"class":2621},[36,10237,10238,10240],{"class":38,"line":1033},[36,10239,4378],{"class":46},[36,10241,10190],{"class":42},[36,10243,10244,10247],{"class":38,"line":1053},[36,10245,10246],{"class":42},"} s3;",[36,10248,10249],{"class":2621}," \u002F\u002F创建结构体时就创建了变量\n",[36,10251,10252,10254,10256],{"class":38,"line":1064},[36,10253,2570],{"class":46},[36,10255,4366],{"class":79},[36,10257,4369],{"class":42},[36,10259,10260],{"class":38,"line":1075},[36,10261,3963],{"class":42},[36,10263,10264],{"class":38,"line":2291},[36,10265,10266],{"class":2621},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,10268,10269],{"class":38,"line":2329},[36,10270,10271],{"class":2621},"    \u002F\u002F2.1 struct Student s1;\n",[36,10273,10274,10277,10279],{"class":38,"line":2334},[36,10275,10276],{"class":46},"    struct",[36,10278,150],{"class":79},[36,10280,10281],{"class":42}," s1;\n",[36,10283,10284],{"class":38,"line":2339},[36,10285,10286],{"class":2621},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,10288,10289,10292,10294,10297],{"class":38,"line":2365},[36,10290,10291],{"class":42},"    s1.name",[36,10293,47],{"class":46},[36,10295,10296],{"class":50},"\"张三\"",[36,10298,3711],{"class":42},[36,10300,10301,10304,10306,10308],{"class":38,"line":2373},[36,10302,10303],{"class":42},"    s1.age",[36,10305,47],{"class":46},[36,10307,633],{"class":62},[36,10309,3711],{"class":42},[36,10311,10312,10315,10317,10319],{"class":38,"line":5001},[36,10313,10314],{"class":42},"    s1.score",[36,10316,47],{"class":46},[36,10318,2811],{"class":62},[36,10320,3711],{"class":42},[36,10322,10323],{"class":38,"line":5006},[36,10324,10325],{"class":2621},"    \u002F\u002F输出结果\n",[36,10327,10329,10331,10333,10336,10338,10341,10343,10346,10348],{"class":38,"line":10328},37,[36,10330,3968],{"class":42},[36,10332,3594],{"class":46},[36,10334,10335],{"class":42},"s1.name",[36,10337,3594],{"class":46},[36,10339,10340],{"class":42},"s1.age",[36,10342,3594],{"class":46},[36,10344,10345],{"class":42},"s1.score",[36,10347,3594],{"class":46},[36,10349,3616],{"class":42},[36,10351,10353],{"class":38,"line":10352},38,[36,10354,70],{"emptyLinePlaceholder":69},[36,10356,10358],{"class":38,"line":10357},39,[36,10359,10360],{"class":2621},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,10362,10364,10366,10368,10371,10373,10375,10378,10380,10382,10384,10386],{"class":38,"line":10363},40,[36,10365,10276],{"class":46},[36,10367,150],{"class":79},[36,10369,10370],{"class":42}," s2",[36,10372,47],{"class":46},[36,10374,101],{"class":42},[36,10376,10377],{"class":50},"\"王五\"",[36,10379,2934],{"class":42},[36,10381,633],{"class":62},[36,10383,2934],{"class":42},[36,10385,2811],{"class":62},[36,10387,6379],{"class":42},[36,10389,10391],{"class":38,"line":10390},41,[36,10392,70],{"emptyLinePlaceholder":69},[36,10394,10396],{"class":38,"line":10395},42,[36,10397,10398],{"class":2621},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,10400,10402,10405,10407,10409],{"class":38,"line":10401},43,[36,10403,10404],{"class":42},"    s3.name",[36,10406,47],{"class":46},[36,10408,6063],{"class":50},[36,10410,3711],{"class":42},[36,10412,10414,10417,10419,10421],{"class":38,"line":10413},44,[36,10415,10416],{"class":42},"    s3.age",[36,10418,47],{"class":46},[36,10420,633],{"class":62},[36,10422,3711],{"class":42},[36,10424,10426,10429,10431,10433],{"class":38,"line":10425},45,[36,10427,10428],{"class":42},"    s3.score",[36,10430,47],{"class":46},[36,10432,3254],{"class":62},[36,10434,3711],{"class":42},[36,10436,10438],{"class":38,"line":10437},46,[36,10439,3982],{"class":42},[19,10441,10442],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10444,10446],{"id":10445},"_42结构体数组","4.2结构体数组",[19,10448,10449],{},"将自定义的结构体放入到数组中方便维护",[19,10451,10452,10453,10456],{},"语法：struct 结构体名 数组名",[36,10454,10455],{},"元素个数","={ {}，{},...{} };",[26,10458,10460],{"className":2556,"code":10459,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[33,10461,10462,10468,10478,10484,10489,10495,10499,10503,10509,10515,10519,10523,10531,10535,10540,10555,10559,10575,10591,10595,10600,10616,10631,10646,10651,10677,10681,10704,10708],{"__ignoreMap":31},[36,10463,10464,10466],{"class":38,"line":39},[36,10465,4343],{"class":46},[36,10467,4346],{"class":50},[36,10469,10470,10472,10474,10476],{"class":38,"line":54},[36,10471,4351],{"class":46},[36,10473,4354],{"class":46},[36,10475,4357],{"class":79},[36,10477,3711],{"class":42},[36,10479,10480,10482],{"class":38,"line":66},[36,10481,4343],{"class":46},[36,10483,10130],{"class":50},[36,10485,10486],{"class":38,"line":73},[36,10487,10488],{"class":2621},"\u002F\u002F1.定义结构体\n",[36,10490,10491,10493],{"class":38,"line":86},[36,10492,10140],{"class":46},[36,10494,10143],{"class":79},[36,10496,10497],{"class":38,"line":126},[36,10498,3963],{"class":42},[36,10500,10501],{"class":38,"line":131},[36,10502,10166],{"class":42},[36,10504,10505,10507],{"class":38,"line":225},[36,10506,4378],{"class":46},[36,10508,10178],{"class":42},[36,10510,10511,10513],{"class":38,"line":235},[36,10512,4378],{"class":46},[36,10514,10190],{"class":42},[36,10516,10517],{"class":38,"line":377},[36,10518,70],{"emptyLinePlaceholder":69},[36,10520,10521],{"class":38,"line":617},[36,10522,6379],{"class":42},[36,10524,10525,10527,10529],{"class":38,"line":643},[36,10526,2570],{"class":46},[36,10528,4366],{"class":79},[36,10530,4369],{"class":42},[36,10532,10533],{"class":38,"line":921},[36,10534,3963],{"class":42},[36,10536,10537],{"class":38,"line":934},[36,10538,10539],{"class":2621},"    \u002F\u002F2.创建结构体数组\n",[36,10541,10542,10544,10546,10549,10551,10553],{"class":38,"line":939},[36,10543,10276],{"class":46},[36,10545,150],{"class":79},[36,10547,10548],{"class":42}," stuArray[",[36,10550,1911],{"class":62},[36,10552,3493],{"class":42},[36,10554,7291],{"class":46},[36,10556,10557],{"class":38,"line":949},[36,10558,4423],{"class":42},[36,10560,10561,10563,10565,10567,10569,10571,10573],{"class":38,"line":962},[36,10562,7300],{"class":42},[36,10564,10296],{"class":50},[36,10566,2934],{"class":42},[36,10568,633],{"class":62},[36,10570,2934],{"class":42},[36,10572,1070],{"class":62},[36,10574,7313],{"class":42},[36,10576,10577,10579,10581,10583,10585,10587,10589],{"class":38,"line":974},[36,10578,7300],{"class":42},[36,10580,6063],{"class":50},[36,10582,2934],{"class":42},[36,10584,3130],{"class":62},[36,10586,2934],{"class":42},[36,10588,3130],{"class":62},[36,10590,3982],{"class":42},[36,10592,10593],{"class":38,"line":979},[36,10594,4580],{"class":42},[36,10596,10597],{"class":38,"line":994},[36,10598,10599],{"class":2621},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,10601,10602,10605,10607,10610,10612,10614],{"class":38,"line":1006},[36,10603,10604],{"class":42},"    stuArray[",[36,10606,1906],{"class":62},[36,10608,10609],{"class":42},"].name",[36,10611,47],{"class":46},[36,10613,6086],{"class":50},[36,10615,3711],{"class":42},[36,10617,10618,10620,10622,10625,10627,10629],{"class":38,"line":1011},[36,10619,10604],{"class":42},[36,10621,1906],{"class":62},[36,10623,10624],{"class":42},"].age",[36,10626,47],{"class":46},[36,10628,1911],{"class":62},[36,10630,3711],{"class":42},[36,10632,10633,10635,10637,10640,10642,10644],{"class":38,"line":1023},[36,10634,10604],{"class":42},[36,10636,1906],{"class":62},[36,10638,10639],{"class":42},"].score",[36,10641,47],{"class":46},[36,10643,1911],{"class":62},[36,10645,3711],{"class":42},[36,10647,10648],{"class":38,"line":1028},[36,10649,10650],{"class":2621},"    \u002F\u002F4.遍历结构体数组\n",[36,10652,10653,10655,10657,10659,10661,10663,10665,10667,10669,10671,10673,10675],{"class":38,"line":1033},[36,10654,5586],{"class":46},[36,10656,4066],{"class":42},[36,10658,2570],{"class":46},[36,10660,5417],{"class":42},[36,10662,47],{"class":46},[36,10664,2751],{"class":62},[36,10666,5424],{"class":42},[36,10668,3463],{"class":46},[36,10670,1911],{"class":62},[36,10672,5424],{"class":42},[36,10674,4685],{"class":46},[36,10676,123],{"class":42},[36,10678,10679],{"class":38,"line":1053},[36,10680,4423],{"class":42},[36,10682,10683,10685,10687,10690,10692,10695,10697,10700,10702],{"class":38,"line":1064},[36,10684,5836],{"class":42},[36,10686,3594],{"class":46},[36,10688,10689],{"class":42},"stuArray[i].name",[36,10691,3594],{"class":46},[36,10693,10694],{"class":42},"stuArray[i].age",[36,10696,3594],{"class":46},[36,10698,10699],{"class":42},"stuArray[i].score",[36,10701,3594],{"class":46},[36,10703,3616],{"class":42},[36,10705,10706],{"class":38,"line":1075},[36,10707,4580],{"class":42},[36,10709,10710],{"class":38,"line":2291},[36,10711,3982],{"class":42},[14,10713,10715],{"id":10714},"_43结构体指针","4.3结构体指针",[19,10717,10718],{},"作用：通过指针访问结构体中的成员",[19,10720,10721],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,10723,10725],{"className":2556,"code":10724,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[33,10726,10727,10733,10743,10749,10753,10759,10763,10767,10773,10779,10783,10791,10795,10800,10825,10830,10845,10850,10873],{"__ignoreMap":31},[36,10728,10729,10731],{"class":38,"line":39},[36,10730,4343],{"class":46},[36,10732,4346],{"class":50},[36,10734,10735,10737,10739,10741],{"class":38,"line":54},[36,10736,4351],{"class":46},[36,10738,4354],{"class":46},[36,10740,4357],{"class":79},[36,10742,3711],{"class":42},[36,10744,10745,10747],{"class":38,"line":66},[36,10746,4343],{"class":46},[36,10748,10130],{"class":50},[36,10750,10751],{"class":38,"line":73},[36,10752,10488],{"class":2621},[36,10754,10755,10757],{"class":38,"line":86},[36,10756,10140],{"class":46},[36,10758,10143],{"class":79},[36,10760,10761],{"class":38,"line":126},[36,10762,3963],{"class":42},[36,10764,10765],{"class":38,"line":131},[36,10766,10166],{"class":42},[36,10768,10769,10771],{"class":38,"line":225},[36,10770,4378],{"class":46},[36,10772,10178],{"class":42},[36,10774,10775,10777],{"class":38,"line":235},[36,10776,4378],{"class":46},[36,10778,10190],{"class":42},[36,10780,10781],{"class":38,"line":377},[36,10782,6379],{"class":42},[36,10784,10785,10787,10789],{"class":38,"line":617},[36,10786,2570],{"class":46},[36,10788,4366],{"class":79},[36,10790,4369],{"class":42},[36,10792,10793],{"class":38,"line":643},[36,10794,3963],{"class":42},[36,10796,10797],{"class":38,"line":921},[36,10798,10799],{"class":2621},"    \u002F\u002F创建学生结构体变量\n",[36,10801,10802,10804,10806,10809,10811,10813,10815,10817,10819,10821,10823],{"class":38,"line":934},[36,10803,10276],{"class":46},[36,10805,150],{"class":79},[36,10807,10808],{"class":42}," s",[36,10810,47],{"class":46},[36,10812,101],{"class":42},[36,10814,10296],{"class":50},[36,10816,2934],{"class":42},[36,10818,633],{"class":62},[36,10820,2934],{"class":42},[36,10822,1059],{"class":62},[36,10824,6379],{"class":42},[36,10826,10827],{"class":38,"line":939},[36,10828,10829],{"class":2621},"    \u002F\u002F通过指针指向结构体变量\n",[36,10831,10832,10834,10836,10838,10840,10842],{"class":38,"line":949},[36,10833,10276],{"class":46},[36,10835,150],{"class":79},[36,10837,8899],{"class":46},[36,10839,19],{"class":42},[36,10841,8721],{"class":46},[36,10843,10844],{"class":42},"s\n",[36,10846,10847],{"class":38,"line":962},[36,10848,10849],{"class":2621},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,10851,10852,10854,10856,10859,10861,10864,10866,10869,10871],{"class":38,"line":974},[36,10853,3968],{"class":42},[36,10855,3594],{"class":46},[36,10857,10858],{"class":42},"p->name",[36,10860,3594],{"class":46},[36,10862,10863],{"class":42},"p->age",[36,10865,3594],{"class":46},[36,10867,10868],{"class":42},"p->score",[36,10870,3594],{"class":46},[36,10872,3616],{"class":42},[36,10874,10875],{"class":38,"line":979},[36,10876,3982],{"class":42},[14,10878,10880],{"id":10879},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10882,10883],{},"作用：结构体中的成员可以是另一个结构体",[19,10885,10886],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,10888,10890],{"className":2556,"code":10889,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[33,10891,10892,10898,10908,10914,10919,10927,10931,10935,10941,10947,10951,10956,10963,10967,10974,10978,10984,10989,10993,11001,11005,11010,11015,11020,11031,11043,11054,11067,11078,11089],{"__ignoreMap":31},[36,10893,10894,10896],{"class":38,"line":39},[36,10895,4343],{"class":46},[36,10897,4346],{"class":50},[36,10899,10900,10902,10904,10906],{"class":38,"line":54},[36,10901,4351],{"class":46},[36,10903,4354],{"class":46},[36,10905,4357],{"class":79},[36,10907,3711],{"class":42},[36,10909,10910,10912],{"class":38,"line":66},[36,10911,4343],{"class":46},[36,10913,10130],{"class":50},[36,10915,10916],{"class":38,"line":73},[36,10917,10918],{"class":2621},"\u002F\u002F定义学生结构体\n",[36,10920,10921,10923,10925],{"class":38,"line":86},[36,10922,10140],{"class":46},[36,10924,150],{"class":79},[36,10926,5059],{"class":42},[36,10928,10929],{"class":38,"line":126},[36,10930,3963],{"class":42},[36,10932,10933],{"class":38,"line":131},[36,10934,10166],{"class":42},[36,10936,10937,10939],{"class":38,"line":225},[36,10938,4378],{"class":46},[36,10940,10178],{"class":42},[36,10942,10943,10945],{"class":38,"line":235},[36,10944,4378],{"class":46},[36,10946,10190],{"class":42},[36,10948,10949],{"class":38,"line":377},[36,10950,3982],{"class":42},[36,10952,10953],{"class":38,"line":617},[36,10954,10955],{"class":2621},"\u002F\u002F定义老师结构体\n",[36,10957,10958,10960],{"class":38,"line":643},[36,10959,10140],{"class":46},[36,10961,10962],{"class":79}," Teacher\n",[36,10964,10965],{"class":38,"line":921},[36,10966,3963],{"class":42},[36,10968,10969,10971],{"class":38,"line":934},[36,10970,4378],{"class":46},[36,10972,10973],{"class":42}," id;\n",[36,10975,10976],{"class":38,"line":939},[36,10977,10166],{"class":42},[36,10979,10980,10982],{"class":38,"line":949},[36,10981,4378],{"class":46},[36,10983,10178],{"class":42},[36,10985,10986],{"class":38,"line":962},[36,10987,10988],{"class":42},"    Student stu;\n",[36,10990,10991],{"class":38,"line":974},[36,10992,3982],{"class":42},[36,10994,10995,10997,10999],{"class":38,"line":979},[36,10996,2570],{"class":46},[36,10998,4366],{"class":79},[36,11000,8360],{"class":42},[36,11002,11003],{"class":38,"line":994},[36,11004,3963],{"class":42},[36,11006,11007],{"class":38,"line":1006},[36,11008,11009],{"class":2621},"    \u002F\u002F结构体嵌套结构体\n",[36,11011,11012],{"class":38,"line":1011},[36,11013,11014],{"class":2621},"    \u002F\u002F创建老师\n",[36,11016,11017],{"class":38,"line":1023},[36,11018,11019],{"class":42},"    Teacher t;\n",[36,11021,11022,11025,11027,11029],{"class":38,"line":1028},[36,11023,11024],{"class":42},"    t.id",[36,11026,47],{"class":46},[36,11028,1070],{"class":62},[36,11030,3711],{"class":42},[36,11032,11033,11036,11038,11041],{"class":38,"line":1033},[36,11034,11035],{"class":42},"    t.name",[36,11037,47],{"class":46},[36,11039,11040],{"class":50},"\"老王\"",[36,11042,3711],{"class":42},[36,11044,11045,11048,11050,11052],{"class":38,"line":1053},[36,11046,11047],{"class":42},"    t.age",[36,11049,47],{"class":46},[36,11051,633],{"class":62},[36,11053,3711],{"class":42},[36,11055,11056,11059,11061,11064],{"class":38,"line":1064},[36,11057,11058],{"class":42},"    t.stu.name",[36,11060,47],{"class":46},[36,11062,11063],{"class":50},"\"小王\"",[36,11065,11066],{"class":42},"；\n",[36,11068,11069,11072,11074,11076],{"class":38,"line":1075},[36,11070,11071],{"class":42},"    t.stu.age",[36,11073,47],{"class":46},[36,11075,3254],{"class":62},[36,11077,3711],{"class":42},[36,11079,11080,11083,11085,11087],{"class":38,"line":2291},[36,11081,11082],{"class":42},"    t.stu.score",[36,11084,47],{"class":46},[36,11086,2900],{"class":62},[36,11088,3711],{"class":42},[36,11090,11091],{"class":38,"line":2329},[36,11092,3982],{"class":42},[14,11094,11096],{"id":11095},"_45结构体做函数参数","4.5结构体做函数参数",[19,11098,11099],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,11101,11103],{"className":2556,"code":11102,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[33,11104,11105,11111,11121,11127,11133,11137,11141,11147,11153,11157,11162,11167,11184,11188,11221,11225,11230,11249,11253,11284,11288,11296,11300,11309,11321,11333,11345,11358,11366,11379,11391,11399],{"__ignoreMap":31},[36,11106,11107,11109],{"class":38,"line":39},[36,11108,4343],{"class":46},[36,11110,4346],{"class":50},[36,11112,11113,11115,11117,11119],{"class":38,"line":54},[36,11114,4351],{"class":46},[36,11116,4354],{"class":46},[36,11118,4357],{"class":79},[36,11120,3711],{"class":42},[36,11122,11123,11125],{"class":38,"line":66},[36,11124,4343],{"class":46},[36,11126,10130],{"class":50},[36,11128,11129,11131],{"class":38,"line":73},[36,11130,10140],{"class":46},[36,11132,10143],{"class":79},[36,11134,11135],{"class":38,"line":86},[36,11136,3963],{"class":42},[36,11138,11139],{"class":38,"line":126},[36,11140,10166],{"class":42},[36,11142,11143,11145],{"class":38,"line":131},[36,11144,4378],{"class":46},[36,11146,10178],{"class":42},[36,11148,11149,11151],{"class":38,"line":225},[36,11150,4378],{"class":46},[36,11152,10190],{"class":42},[36,11154,11155],{"class":38,"line":235},[36,11156,6379],{"class":42},[36,11158,11159],{"class":38,"line":377},[36,11160,11161],{"class":2621},"\u002F\u002F打印学生信息的函数\n",[36,11163,11164],{"class":38,"line":617},[36,11165,11166],{"class":2621},"\u002F\u002F值传递\n",[36,11168,11169,11171,11174,11176,11178,11180,11182],{"class":38,"line":643},[36,11170,7746],{"class":46},[36,11172,11173],{"class":79}," printStudent1",[36,11175,92],{"class":42},[36,11177,10140],{"class":46},[36,11179,150],{"class":79},[36,11181,10808],{"class":7598},[36,11183,123],{"class":42},[36,11185,11186],{"class":38,"line":921},[36,11187,3963],{"class":42},[36,11189,11190,11192,11194,11197,11199,11202,11204,11207,11209,11211,11213,11216,11218],{"class":38,"line":934},[36,11191,8910],{"class":42},[36,11193,3594],{"class":46},[36,11195,11196],{"class":42}," s.name ",[36,11198,3594],{"class":46},[36,11200,11201],{"class":50}," \" \"",[36,11203,3861],{"class":46},[36,11205,11206],{"class":42}," s.age ",[36,11208,3594],{"class":46},[36,11210,11201],{"class":50},[36,11212,3861],{"class":46},[36,11214,11215],{"class":42}," s.score ",[36,11217,3594],{"class":46},[36,11219,11220],{"class":42}," endl;\n",[36,11222,11223],{"class":38,"line":939},[36,11224,3982],{"class":42},[36,11226,11227],{"class":38,"line":949},[36,11228,11229],{"class":2621},"\u002F\u002F地址传递\n",[36,11231,11232,11234,11237,11239,11241,11243,11245,11247],{"class":38,"line":962},[36,11233,7746],{"class":46},[36,11235,11236],{"class":79}," printStudent2",[36,11238,92],{"class":42},[36,11240,10140],{"class":46},[36,11242,150],{"class":79},[36,11244,8899],{"class":46},[36,11246,3249],{"class":7598},[36,11248,123],{"class":42},[36,11250,11251],{"class":38,"line":974},[36,11252,3963],{"class":42},[36,11254,11255,11257,11259,11262,11264,11266,11268,11271,11273,11275,11277,11280,11282],{"class":38,"line":979},[36,11256,8910],{"class":42},[36,11258,3594],{"class":46},[36,11260,11261],{"class":42}," s->name ",[36,11263,3594],{"class":46},[36,11265,11201],{"class":50},[36,11267,3861],{"class":46},[36,11269,11270],{"class":42}," s->age ",[36,11272,3594],{"class":46},[36,11274,11201],{"class":50},[36,11276,3861],{"class":46},[36,11278,11279],{"class":42}," s->score ",[36,11281,3594],{"class":46},[36,11283,11220],{"class":42},[36,11285,11286],{"class":38,"line":994},[36,11287,3982],{"class":42},[36,11289,11290,11292,11294],{"class":38,"line":1006},[36,11291,2570],{"class":46},[36,11293,4366],{"class":79},[36,11295,4369],{"class":42},[36,11297,11298],{"class":38,"line":1011},[36,11299,3963],{"class":42},[36,11301,11302,11304,11306],{"class":38,"line":1023},[36,11303,10276],{"class":46},[36,11305,150],{"class":79},[36,11307,11308],{"class":42}," s;\n",[36,11310,11311,11314,11316,11319],{"class":38,"line":1028},[36,11312,11313],{"class":42},"    s.name ",[36,11315,47],{"class":46},[36,11317,11318],{"class":50}," \"张三\"",[36,11320,3711],{"class":42},[36,11322,11323,11326,11328,11331],{"class":38,"line":1033},[36,11324,11325],{"class":42},"    s.age ",[36,11327,47],{"class":46},[36,11329,11330],{"class":62}," 20",[36,11332,3711],{"class":42},[36,11334,11335,11338,11340,11343],{"class":38,"line":1053},[36,11336,11337],{"class":42},"    s.score ",[36,11339,47],{"class":46},[36,11341,11342],{"class":62}," 85",[36,11344,3711],{"class":42},[36,11346,11347,11349,11351,11354,11356],{"class":38,"line":1064},[36,11348,3968],{"class":42},[36,11350,3594],{"class":46},[36,11352,11353],{"class":50},"\"值传递:\"",[36,11355,3594],{"class":46},[36,11357,3616],{"class":42},[36,11359,11360,11363],{"class":38,"line":1075},[36,11361,11362],{"class":79},"    printStudent1",[36,11364,11365],{"class":42},"(s);\n",[36,11367,11368,11370,11372,11375,11377],{"class":38,"line":2291},[36,11369,3968],{"class":42},[36,11371,3594],{"class":46},[36,11373,11374],{"class":50},"\"地址传递:\"",[36,11376,3594],{"class":46},[36,11378,3616],{"class":42},[36,11380,11381,11384,11386,11388],{"class":38,"line":2329},[36,11382,11383],{"class":79},"    printStudent2",[36,11385,92],{"class":42},[36,11387,2909],{"class":46},[36,11389,11390],{"class":42},"s); \n",[36,11392,11393,11395,11397],{"class":38,"line":2334},[36,11394,6474],{"class":46},[36,11396,899],{"class":62},[36,11398,3711],{"class":42},[36,11400,11401],{"class":38,"line":2339},[36,11402,3982],{"class":42},[19,11404,11405],{},"注意：",[3557,11407,11408,11411],{},[653,11409,11410],{},"1.先定义结构体，不要在函数中写结构体的定义",[653,11412,11413],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11415,11417],{"id":11416},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11419,11420],{},"用const防止误操作",[26,11422,11424],{"className":2556,"code":11423,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[33,11425,11426,11432,11442,11448,11453,11457,11461,11467,11473,11477,11493,11497,11520,11524,11532,11536,11557,11564,11568],{"__ignoreMap":31},[36,11427,11428,11430],{"class":38,"line":39},[36,11429,4343],{"class":46},[36,11431,4346],{"class":50},[36,11433,11434,11436,11438,11440],{"class":38,"line":54},[36,11435,4351],{"class":46},[36,11437,4354],{"class":46},[36,11439,4357],{"class":79},[36,11441,3711],{"class":42},[36,11443,11444,11446],{"class":38,"line":66},[36,11445,4343],{"class":46},[36,11447,10130],{"class":50},[36,11449,11450],{"class":38,"line":73},[36,11451,11452],{"class":42},"sctuct Student\n",[36,11454,11455],{"class":38,"line":86},[36,11456,3963],{"class":42},[36,11458,11459],{"class":38,"line":126},[36,11460,10166],{"class":42},[36,11462,11463,11465],{"class":38,"line":131},[36,11464,4378],{"class":46},[36,11466,10178],{"class":42},[36,11468,11469,11471],{"class":38,"line":225},[36,11470,4378],{"class":46},[36,11472,10190],{"class":42},[36,11474,11475],{"class":38,"line":235},[36,11476,6379],{"class":42},[36,11478,11479,11481,11484,11486,11489,11491],{"class":38,"line":377},[36,11480,7746],{"class":46},[36,11482,11483],{"class":79}," printStudents",[36,11485,92],{"class":42},[36,11487,11488],{"class":79},"student",[36,11490,10808],{"class":7598},[36,11492,123],{"class":42},[36,11494,11495],{"class":38,"line":617},[36,11496,3963],{"class":42},[36,11498,11499,11501,11503,11506,11508,11511,11513,11516,11518],{"class":38,"line":643},[36,11500,3968],{"class":42},[36,11502,3594],{"class":46},[36,11504,11505],{"class":42},"s.name",[36,11507,3594],{"class":46},[36,11509,11510],{"class":42},"s.age",[36,11512,3594],{"class":46},[36,11514,11515],{"class":42},"s.score",[36,11517,3594],{"class":46},[36,11519,3616],{"class":42},[36,11521,11522],{"class":38,"line":921},[36,11523,3982],{"class":42},[36,11525,11526,11528,11530],{"class":38,"line":934},[36,11527,2570],{"class":46},[36,11529,4366],{"class":79},[36,11531,8360],{"class":42},[36,11533,11534],{"class":38,"line":939},[36,11535,3963],{"class":42},[36,11537,11538,11541,11543,11545,11547,11549,11551,11553,11555],{"class":38,"line":949},[36,11539,11540],{"class":42},"    Student s",[36,11542,47],{"class":46},[36,11544,101],{"class":42},[36,11546,10296],{"class":50},[36,11548,2934],{"class":42},[36,11550,633],{"class":62},[36,11552,2934],{"class":42},[36,11554,633],{"class":62},[36,11556,6379],{"class":42},[36,11558,11559,11562],{"class":38,"line":962},[36,11560,11561],{"class":79},"    printStudent",[36,11563,11365],{"class":42},[36,11565,11566],{"class":38,"line":974},[36,11567,70],{"emptyLinePlaceholder":69},[36,11569,11570],{"class":38,"line":979},[36,11571,3982],{"class":42},[19,11573,11405],{},[3557,11575,11576,11579,11582],{},[653,11577,11578],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[653,11580,11581],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[653,11583,11584],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,11586,11588],{"className":2556,"code":11587,"language":2558,"meta":31,"style":31},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[33,11589,11590,11609,11613,11618,11638],{"__ignoreMap":31},[36,11591,11592,11594,11596,11598,11600,11603,11605,11607],{"class":38,"line":39},[36,11593,7746],{"class":46},[36,11595,11483],{"class":79},[36,11597,92],{"class":42},[36,11599,9173],{"class":46},[36,11601,11602],{"class":79}," student",[36,11604,8899],{"class":46},[36,11606,3249],{"class":7598},[36,11608,123],{"class":42},[36,11610,11611],{"class":38,"line":54},[36,11612,3963],{"class":42},[36,11614,11615],{"class":38,"line":66},[36,11616,11617],{"class":2621},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,11619,11620,11622,11624,11626,11628,11630,11632,11634,11636],{"class":38,"line":73},[36,11621,3968],{"class":42},[36,11623,3594],{"class":46},[36,11625,11505],{"class":42},[36,11627,3594],{"class":46},[36,11629,11510],{"class":42},[36,11631,3594],{"class":46},[36,11633,11515],{"class":42},[36,11635,3594],{"class":46},[36,11637,3616],{"class":42},[36,11639,11640],{"class":38,"line":86},[36,11641,3982],{"class":42},[14,11643,11645],{"id":11644},"_47案例","4.7案例",[650,11647,11648],{},[653,11649,11650],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,11652,11654],{"className":2556,"code":11653,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[33,11655,11656,11662,11672,11678,11685,11689,11695,11699,11704,11710,11716,11720,11724,11730,11734,11739,11744,11757,11761,11766,11792,11796,11808,11835,11839,11851,11860,11864,11869,11898,11902,11914,11923,11950,11961,11971,11975,11979,11983,11988,12012,12016,12040,12044,12063,12089,12093,12118,12141,12165,12170,12175,12180,12189,12194,12200,12221,12227,12241,12247,12274,12283,12289,12297,12302],{"__ignoreMap":31},[36,11657,11658,11660],{"class":38,"line":39},[36,11659,4343],{"class":46},[36,11661,4346],{"class":50},[36,11663,11664,11666,11668,11670],{"class":38,"line":54},[36,11665,4351],{"class":46},[36,11667,4354],{"class":46},[36,11669,4357],{"class":79},[36,11671,3711],{"class":42},[36,11673,11674,11676],{"class":38,"line":66},[36,11675,4343],{"class":46},[36,11677,10130],{"class":50},[36,11679,11680,11682],{"class":38,"line":73},[36,11681,4343],{"class":46},[36,11683,11684],{"class":50},"\u003Cctime>\n",[36,11686,11687],{"class":38,"line":86},[36,11688,10918],{"class":2621},[36,11690,11691,11693],{"class":38,"line":126},[36,11692,10140],{"class":46},[36,11694,10143],{"class":79},[36,11696,11697],{"class":38,"line":131},[36,11698,3963],{"class":42},[36,11700,11701],{"class":38,"line":225},[36,11702,11703],{"class":42},"    string sName;\n",[36,11705,11706,11708],{"class":38,"line":235},[36,11707,4378],{"class":46},[36,11709,10178],{"class":42},[36,11711,11712,11714],{"class":38,"line":377},[36,11713,4378],{"class":46},[36,11715,10190],{"class":42},[36,11717,11718],{"class":38,"line":617},[36,11719,6379],{"class":42},[36,11721,11722],{"class":38,"line":643},[36,11723,10955],{"class":2621},[36,11725,11726,11728],{"class":38,"line":921},[36,11727,10140],{"class":46},[36,11729,10962],{"class":79},[36,11731,11732],{"class":38,"line":934},[36,11733,3963],{"class":42},[36,11735,11736],{"class":38,"line":939},[36,11737,11738],{"class":42},"    string tName;\n",[36,11740,11741],{"class":38,"line":949},[36,11742,11743],{"class":2621},"    \u002F\u002F学生数组\n",[36,11745,11746,11748,11750,11753,11755],{"class":38,"line":962},[36,11747,10276],{"class":46},[36,11749,150],{"class":79},[36,11751,11752],{"class":42}," sArray[",[36,11754,2875],{"class":62},[36,11756,7073],{"class":42},[36,11758,11759],{"class":38,"line":974},[36,11760,6379],{"class":42},[36,11762,11763],{"class":38,"line":979},[36,11764,11765],{"class":2621},"\u002F\u002F给老师和学生赋值的函数\n",[36,11767,11768,11770,11773,11775,11777,11780,11783,11786,11788,11790],{"class":38,"line":994},[36,11769,7746],{"class":46},[36,11771,11772],{"class":79}," allocateSpace",[36,11774,92],{"class":42},[36,11776,10140],{"class":46},[36,11778,11779],{"class":79}," Teacher",[36,11781,11782],{"class":7598}," tArray",[36,11784,11785],{"class":42},"[],",[36,11787,2570],{"class":46},[36,11789,9712],{"class":7598},[36,11791,123],{"class":42},[36,11793,11794],{"class":38,"line":1006},[36,11795,3963],{"class":42},[36,11797,11798,11801,11803,11806],{"class":38,"line":1011},[36,11799,11800],{"class":42},"    string nameSeed",[36,11802,47],{"class":46},[36,11804,11805],{"class":50},"\"ABCDE\"",[36,11807,3711],{"class":42},[36,11809,11810,11812,11814,11816,11819,11821,11823,11826,11828,11831,11833],{"class":38,"line":1023},[36,11811,5586],{"class":46},[36,11813,4066],{"class":42},[36,11815,2570],{"class":46},[36,11817,11818],{"class":42}," i ",[36,11820,47],{"class":46},[36,11822,899],{"class":62},[36,11824,11825],{"class":42},"; i ",[36,11827,3463],{"class":46},[36,11829,11830],{"class":42}," len; i",[36,11832,4685],{"class":46},[36,11834,123],{"class":42},[36,11836,11837],{"class":38,"line":1028},[36,11838,4423],{"class":42},[36,11840,11841,11844,11846,11849],{"class":38,"line":1033},[36,11842,11843],{"class":42},"        tArray[i].tName ",[36,11845,47],{"class":46},[36,11847,11848],{"class":50}," \"Teacher_\"",[36,11850,3711],{"class":42},[36,11852,11853,11855,11857],{"class":38,"line":1053},[36,11854,11843],{"class":42},[36,11856,928],{"class":46},[36,11858,11859],{"class":42},"nameSeed[i];\n",[36,11861,11862],{"class":38,"line":1064},[36,11863,70],{"emptyLinePlaceholder":69},[36,11865,11866],{"class":38,"line":1075},[36,11867,11868],{"class":2621},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,11870,11871,11873,11875,11877,11880,11882,11884,11887,11889,11891,11894,11896],{"class":38,"line":2291},[36,11872,5788],{"class":46},[36,11874,4066],{"class":42},[36,11876,2570],{"class":46},[36,11878,11879],{"class":42}," j ",[36,11881,47],{"class":46},[36,11883,899],{"class":62},[36,11885,11886],{"class":42},"; j ",[36,11888,3463],{"class":46},[36,11890,4541],{"class":62},[36,11892,11893],{"class":42},"; j",[36,11895,4685],{"class":46},[36,11897,123],{"class":42},[36,11899,11900],{"class":38,"line":2329},[36,11901,4901],{"class":42},[36,11903,11904,11907,11909,11912],{"class":38,"line":2334},[36,11905,11906],{"class":42},"            tArray[i].sArray[j].sName ",[36,11908,47],{"class":46},[36,11910,11911],{"class":50}," \"Student_\"",[36,11913,3711],{"class":42},[36,11915,11916,11918,11920],{"class":38,"line":2339},[36,11917,11906],{"class":42},[36,11919,928],{"class":46},[36,11921,11922],{"class":42}," nameSeed[j];\n",[36,11924,11925,11928,11931,11933,11935,11937,11939,11941,11943,11945,11947],{"class":38,"line":2365},[36,11926,11927],{"class":46},"            int",[36,11929,11930],{"class":42}," random",[36,11932,47],{"class":46},[36,11934,4816],{"class":79},[36,11936,4819],{"class":42},[36,11938,2884],{"class":46},[36,11940,3460],{"class":62},[36,11942,1885],{"class":46},[36,11944,2957],{"class":62},[36,11946,2618],{"class":42},[36,11948,11949],{"class":2621},"\u002F\u002F40~99\n",[36,11951,11952,11955,11957,11959],{"class":38,"line":2373},[36,11953,11954],{"class":42},"            tArray[i].sArray[j].age ",[36,11956,47],{"class":46},[36,11958,11330],{"class":62},[36,11960,3711],{"class":42},[36,11962,11963,11966,11968],{"class":38,"line":5001},[36,11964,11965],{"class":42},"            tArray[i].sArray[j].score ",[36,11967,47],{"class":46},[36,11969,11970],{"class":42}," random;\n",[36,11972,11973],{"class":38,"line":5006},[36,11974,2204],{"class":42},[36,11976,11977],{"class":38,"line":10328},[36,11978,4580],{"class":42},[36,11980,11981],{"class":38,"line":10352},[36,11982,3982],{"class":42},[36,11984,11985],{"class":38,"line":10357},[36,11986,11987],{"class":2621},"\u002F\u002F打印所有信息的函数\n",[36,11989,11990,11992,11995,11997,11999,12001,12003,12006,12008,12010],{"class":38,"line":10363},[36,11991,7746],{"class":46},[36,11993,11994],{"class":79}," printInfo",[36,11996,92],{"class":42},[36,11998,10140],{"class":46},[36,12000,11779],{"class":79},[36,12002,11782],{"class":7598},[36,12004,12005],{"class":42},"[], ",[36,12007,2570],{"class":46},[36,12009,9712],{"class":7598},[36,12011,123],{"class":42},[36,12013,12014],{"class":38,"line":10390},[36,12015,3963],{"class":42},[36,12017,12018,12020,12022,12024,12026,12028,12030,12032,12034,12036,12038],{"class":38,"line":10395},[36,12019,5586],{"class":46},[36,12021,4066],{"class":42},[36,12023,2570],{"class":46},[36,12025,11818],{"class":42},[36,12027,47],{"class":46},[36,12029,899],{"class":62},[36,12031,11825],{"class":42},[36,12033,3463],{"class":46},[36,12035,11830],{"class":42},[36,12037,4685],{"class":46},[36,12039,123],{"class":42},[36,12041,12042],{"class":38,"line":10401},[36,12043,4423],{"class":42},[36,12045,12046,12049,12051,12054,12056,12059,12061],{"class":38,"line":10413},[36,12047,12048],{"class":42},"        cout ",[36,12050,3594],{"class":46},[36,12052,12053],{"class":50}," \"Teacher: \"",[36,12055,3861],{"class":46},[36,12057,12058],{"class":42}," tArray[i].tName ",[36,12060,3594],{"class":46},[36,12062,11220],{"class":42},[36,12064,12065,12067,12069,12071,12073,12075,12077,12079,12081,12083,12085,12087],{"class":38,"line":10425},[36,12066,5788],{"class":46},[36,12068,4066],{"class":42},[36,12070,2570],{"class":46},[36,12072,11879],{"class":42},[36,12074,47],{"class":46},[36,12076,899],{"class":62},[36,12078,11886],{"class":42},[36,12080,3463],{"class":46},[36,12082,4541],{"class":62},[36,12084,11893],{"class":42},[36,12086,4685],{"class":46},[36,12088,123],{"class":42},[36,12090,12091],{"class":38,"line":10437},[36,12092,4901],{"class":42},[36,12094,12096,12099,12101,12104,12106,12109,12111,12114,12116],{"class":38,"line":12095},47,[36,12097,12098],{"class":42},"            cout ",[36,12100,3594],{"class":46},[36,12102,12103],{"class":50}," \"",[36,12105,3651],{"class":62},[36,12107,12108],{"class":50},"Student: \"",[36,12110,3861],{"class":46},[36,12112,12113],{"class":42}," tArray[i].sArray[j].sName",[36,12115,3594],{"class":46},[36,12117,3616],{"class":42},[36,12119,12121,12123,12125,12127,12129,12132,12134,12137,12139],{"class":38,"line":12120},48,[36,12122,12098],{"class":42},[36,12124,3594],{"class":46},[36,12126,12103],{"class":50},[36,12128,3651],{"class":62},[36,12130,12131],{"class":50},"Age: \"",[36,12133,3861],{"class":46},[36,12135,12136],{"class":42}," tArray[i].sArray[j].age ",[36,12138,3594],{"class":46},[36,12140,11220],{"class":42},[36,12142,12144,12146,12148,12150,12152,12155,12157,12160,12162],{"class":38,"line":12143},49,[36,12145,12098],{"class":42},[36,12147,3594],{"class":46},[36,12149,12103],{"class":50},[36,12151,3651],{"class":62},[36,12153,12154],{"class":50},"Score: \"",[36,12156,3861],{"class":46},[36,12158,12159],{"class":42}," tArray[i].sArray[j].score ",[36,12161,3594],{"class":46},[36,12163,12164],{"class":42}," endl;   \n",[36,12166,12168],{"class":38,"line":12167},50,[36,12169,2204],{"class":42},[36,12171,12173],{"class":38,"line":12172},51,[36,12174,4580],{"class":42},[36,12176,12178],{"class":38,"line":12177},52,[36,12179,3982],{"class":42},[36,12181,12183,12185,12187],{"class":38,"line":12182},53,[36,12184,2570],{"class":46},[36,12186,4366],{"class":79},[36,12188,4369],{"class":42},[36,12190,12192],{"class":38,"line":12191},54,[36,12193,3963],{"class":42},[36,12195,12197],{"class":38,"line":12196},55,[36,12198,12199],{"class":2621},"    \u002F\u002F随机数种子\n",[36,12201,12203,12205,12207,12209,12211,12213,12215,12217,12219],{"class":38,"line":12202},56,[36,12204,4766],{"class":79},[36,12206,4769],{"class":42},[36,12208,4772],{"class":46},[36,12210,4775],{"class":46},[36,12212,2985],{"class":42},[36,12214,4780],{"class":79},[36,12216,92],{"class":42},[36,12218,4785],{"class":62},[36,12220,4788],{"class":42},[36,12222,12224],{"class":38,"line":12223},57,[36,12225,12226],{"class":2621},"    \u002F\u002F1.创建3名老师的数组\n",[36,12228,12230,12232,12234,12237,12239],{"class":38,"line":12229},58,[36,12231,10276],{"class":46},[36,12233,11779],{"class":79},[36,12235,12236],{"class":42}," tArray[",[36,12238,2634],{"class":62},[36,12240,7073],{"class":42},[36,12242,12244],{"class":38,"line":12243},59,[36,12245,12246],{"class":2621},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,12248,12250,12252,12255,12257,12260,12263,12265,12267,12270,12272],{"class":38,"line":12249},60,[36,12251,4378],{"class":46},[36,12253,12254],{"class":42}," len ",[36,12256,47],{"class":46},[36,12258,12259],{"class":46}," sizeof",[36,12261,12262],{"class":42},"(tArray) ",[36,12264,3139],{"class":46},[36,12266,12259],{"class":46},[36,12268,12269],{"class":42},"(tArray[",[36,12271,2751],{"class":62},[36,12273,6240],{"class":42},[36,12275,12277,12280],{"class":38,"line":12276},61,[36,12278,12279],{"class":79},"    allocateSpace",[36,12281,12282],{"class":42},"(tArray, len);\n",[36,12284,12286],{"class":38,"line":12285},62,[36,12287,12288],{"class":2621},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,12290,12292,12295],{"class":38,"line":12291},63,[36,12293,12294],{"class":79},"    printInfo",[36,12296,12282],{"class":42},[36,12298,12300],{"class":38,"line":12299},64,[36,12301,70],{"emptyLinePlaceholder":69},[36,12303,12305],{"class":38,"line":12304},65,[36,12306,3982],{"class":42},[650,12308,12309],{"start":54},[653,12310,12311,12314],{},[667,12312,12313],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12316,12317],{},"五名英雄信息如下：",[26,12319,12323],{"className":12320,"code":12321,"language":12322,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[33,12324,12325,12343,12360,12377,12394],{"__ignoreMap":31},[36,12326,12327,12329,12332,12334,12336,12338,12341],{"class":38,"line":39},[36,12328,7300],{"class":42},[36,12330,12331],{"class":50},"\"刘备\"",[36,12333,2934],{"class":42},[36,12335,3329],{"class":62},[36,12337,2934],{"class":42},[36,12339,12340],{"class":50},"\"男\"",[36,12342,7313],{"class":42},[36,12344,12345,12347,12350,12352,12354,12356,12358],{"class":38,"line":54},[36,12346,7300],{"class":42},[36,12348,12349],{"class":50},"\"关羽\"",[36,12351,2934],{"class":42},[36,12353,3304],{"class":62},[36,12355,2934],{"class":42},[36,12357,12340],{"class":50},[36,12359,7313],{"class":42},[36,12361,12362,12364,12367,12369,12371,12373,12375],{"class":38,"line":66},[36,12363,7300],{"class":42},[36,12365,12366],{"class":50},"\"张飞\"",[36,12368,2934],{"class":42},[36,12370,3254],{"class":62},[36,12372,2934],{"class":42},[36,12374,12340],{"class":50},[36,12376,7313],{"class":42},[36,12378,12379,12381,12384,12386,12388,12390,12392],{"class":38,"line":73},[36,12380,7300],{"class":42},[36,12382,12383],{"class":50},"\"赵云\"",[36,12385,2934],{"class":42},[36,12387,3279],{"class":62},[36,12389,2934],{"class":42},[36,12391,12340],{"class":50},[36,12393,7313],{"class":42},[36,12395,12396,12398,12401,12403,12405,12407,12410],{"class":38,"line":86},[36,12397,7300],{"class":42},[36,12399,12400],{"class":50},"\"貂蝉\"",[36,12402,2934],{"class":42},[36,12404,3229],{"class":62},[36,12406,2934],{"class":42},[36,12408,12409],{"class":50},"\"女\"",[36,12411,7313],{"class":42},[19,12413,12414],{},"代码：",[26,12416,12418],{"className":2556,"code":12417,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[33,12419,12420,12426,12436,12442,12449,12453,12457,12463,12468,12472,12477,12500,12504,12529,12533,12566,12571,12600,12605,12620,12646,12666,12671,12676,12680,12684,12689,12711,12715,12739,12743,12805,12809,12813,12821,12825,12830,12841,12845,12861,12877,12893,12909,12925,12929,12949,12971,12976,12989,12996,13001,13007,13012,13025,13031],{"__ignoreMap":31},[36,12421,12422,12424],{"class":38,"line":39},[36,12423,4343],{"class":46},[36,12425,4346],{"class":50},[36,12427,12428,12430,12432,12434],{"class":38,"line":54},[36,12429,4351],{"class":46},[36,12431,4354],{"class":46},[36,12433,4357],{"class":79},[36,12435,3711],{"class":42},[36,12437,12438,12440],{"class":38,"line":66},[36,12439,4343],{"class":46},[36,12441,10130],{"class":50},[36,12443,12444,12446],{"class":38,"line":73},[36,12445,10140],{"class":46},[36,12447,12448],{"class":79}," Sanguo\n",[36,12450,12451],{"class":38,"line":86},[36,12452,3963],{"class":42},[36,12454,12455],{"class":38,"line":126},[36,12456,10166],{"class":42},[36,12458,12459,12461],{"class":38,"line":131},[36,12460,4378],{"class":46},[36,12462,10178],{"class":42},[36,12464,12465],{"class":38,"line":225},[36,12466,12467],{"class":42},"    string gender;\n",[36,12469,12470],{"class":38,"line":235},[36,12471,6379],{"class":42},[36,12473,12474],{"class":38,"line":377},[36,12475,12476],{"class":2621},"\u002F\u002F定义排序函数\n",[36,12478,12479,12481,12483,12485,12488,12490,12492,12494,12496,12498],{"class":38,"line":617},[36,12480,7746],{"class":46},[36,12482,9697],{"class":79},[36,12484,92],{"class":42},[36,12486,12487],{"class":79},"Sanguo",[36,12489,8899],{"class":46},[36,12491,3249],{"class":7598},[36,12493,2934],{"class":42},[36,12495,2570],{"class":46},[36,12497,9712],{"class":7598},[36,12499,123],{"class":42},[36,12501,12502],{"class":38,"line":643},[36,12503,3963],{"class":42},[36,12505,12506,12508,12510,12512,12514,12516,12518,12520,12522,12525,12527],{"class":38,"line":921},[36,12507,5586],{"class":46},[36,12509,92],{"class":42},[36,12511,2570],{"class":46},[36,12513,5417],{"class":42},[36,12515,47],{"class":46},[36,12517,2751],{"class":62},[36,12519,5424],{"class":42},[36,12521,3463],{"class":46},[36,12523,12524],{"class":42},"len;i",[36,12526,4685],{"class":46},[36,12528,123],{"class":42},[36,12530,12531],{"class":38,"line":934},[36,12532,4423],{"class":42},[36,12534,12535,12538,12540,12542,12544,12546,12548,12550,12552,12554,12556,12558,12560,12562,12564],{"class":38,"line":939},[36,12536,12537],{"class":46},"     for",[36,12539,4066],{"class":42},[36,12541,2570],{"class":46},[36,12543,5795],{"class":42},[36,12545,47],{"class":46},[36,12547,2751],{"class":62},[36,12549,5802],{"class":42},[36,12551,3463],{"class":46},[36,12553,9739],{"class":42},[36,12555,3087],{"class":46},[36,12557,1906],{"class":62},[36,12559,3087],{"class":46},[36,12561,5935],{"class":42},[36,12563,4685],{"class":46},[36,12565,123],{"class":42},[36,12567,12568],{"class":38,"line":949},[36,12569,12570],{"class":42},"     {\n",[36,12572,12573,12576,12579,12581,12584,12586,12589,12591,12593,12595,12597],{"class":38,"line":962},[36,12574,12575],{"class":46},"         if",[36,12577,12578],{"class":42}," ((s",[36,12580,1885],{"class":46},[36,12582,12583],{"class":42},"j)->age ",[36,12585,986],{"class":46},[36,12587,12588],{"class":42}," (s",[36,12590,1885],{"class":46},[36,12592,3023],{"class":42},[36,12594,1885],{"class":46},[36,12596,1906],{"class":62},[36,12598,12599],{"class":42},")->age)\n",[36,12601,12602],{"class":38,"line":974},[36,12603,12604],{"class":42},"         {\n",[36,12606,12607,12610,12612,12615,12617],{"class":38,"line":979},[36,12608,12609],{"class":42},"             Sanguo temp",[36,12611,9534],{"class":46},[36,12613,12614],{"class":42},"(s",[36,12616,1885],{"class":46},[36,12618,12619],{"class":42},"j);\n",[36,12621,12622,12625,12627,12629,12632,12634,12636,12638,12640,12642,12644],{"class":38,"line":994},[36,12623,12624],{"class":46},"             *",[36,12626,12614],{"class":42},[36,12628,1885],{"class":46},[36,12630,12631],{"class":42},"j)",[36,12633,9534],{"class":46},[36,12635,12614],{"class":42},[36,12637,1885],{"class":46},[36,12639,3023],{"class":42},[36,12641,1885],{"class":46},[36,12643,1906],{"class":62},[36,12645,5104],{"class":42},[36,12647,12648,12650,12652,12654,12656,12658,12660,12662,12664],{"class":38,"line":1006},[36,12649,12624],{"class":46},[36,12651,12614],{"class":42},[36,12653,1885],{"class":46},[36,12655,3023],{"class":42},[36,12657,1885],{"class":46},[36,12659,1906],{"class":62},[36,12661,2985],{"class":42},[36,12663,47],{"class":46},[36,12665,6663],{"class":42},[36,12667,12668],{"class":38,"line":1011},[36,12669,12670],{"class":42},"         }\n",[36,12672,12673],{"class":38,"line":1023},[36,12674,12675],{"class":42},"     }\n",[36,12677,12678],{"class":38,"line":1028},[36,12679,4580],{"class":42},[36,12681,12682],{"class":38,"line":1033},[36,12683,3982],{"class":42},[36,12685,12686],{"class":38,"line":1053},[36,12687,12688],{"class":2621},"\u002F\u002F定义打印函数\n",[36,12690,12691,12693,12695,12697,12699,12701,12703,12705,12707,12709],{"class":38,"line":1064},[36,12692,7746],{"class":46},[36,12694,11994],{"class":79},[36,12696,92],{"class":42},[36,12698,12487],{"class":79},[36,12700,8899],{"class":46},[36,12702,3249],{"class":7598},[36,12704,2934],{"class":42},[36,12706,2570],{"class":46},[36,12708,9712],{"class":7598},[36,12710,123],{"class":42},[36,12712,12713],{"class":38,"line":1075},[36,12714,3963],{"class":42},[36,12716,12717,12719,12721,12723,12725,12727,12729,12731,12733,12735,12737],{"class":38,"line":2291},[36,12718,5586],{"class":46},[36,12720,4066],{"class":42},[36,12722,2570],{"class":46},[36,12724,5417],{"class":42},[36,12726,47],{"class":46},[36,12728,2751],{"class":62},[36,12730,5424],{"class":42},[36,12732,3463],{"class":46},[36,12734,12524],{"class":42},[36,12736,4685],{"class":46},[36,12738,123],{"class":42},[36,12740,12741],{"class":38,"line":2329},[36,12742,4423],{"class":42},[36,12744,12745,12747,12749,12751,12753,12756,12758,12760,12762,12765,12767,12769,12771,12774,12776,12778,12780,12783,12785,12787,12789,12792,12794,12796,12798,12801,12803],{"class":38,"line":2334},[36,12746,5836],{"class":42},[36,12748,3594],{"class":46},[36,12750,604],{"class":50},[36,12752,3651],{"class":62},[36,12754,12755],{"class":50},"姓名：\"",[36,12757,3594],{"class":46},[36,12759,12614],{"class":42},[36,12761,1885],{"class":46},[36,12763,12764],{"class":42},"i)->name",[36,12766,3594],{"class":46},[36,12768,604],{"class":50},[36,12770,3651],{"class":62},[36,12772,12773],{"class":50},"年龄：\"",[36,12775,3594],{"class":46},[36,12777,12614],{"class":42},[36,12779,1885],{"class":46},[36,12781,12782],{"class":42},"i)->age",[36,12784,3594],{"class":46},[36,12786,604],{"class":50},[36,12788,3651],{"class":62},[36,12790,12791],{"class":50},"性别：\"",[36,12793,3594],{"class":46},[36,12795,12614],{"class":42},[36,12797,1885],{"class":46},[36,12799,12800],{"class":42},"i)->gender",[36,12802,3594],{"class":46},[36,12804,3616],{"class":42},[36,12806,12807],{"class":38,"line":2339},[36,12808,4580],{"class":42},[36,12810,12811],{"class":38,"line":2365},[36,12812,3982],{"class":42},[36,12814,12815,12817,12819],{"class":38,"line":2373},[36,12816,2570],{"class":46},[36,12818,4366],{"class":79},[36,12820,4369],{"class":42},[36,12822,12823],{"class":38,"line":5001},[36,12824,3963],{"class":42},[36,12826,12827],{"class":38,"line":5006},[36,12828,12829],{"class":2621},"    \u002F\u002F定义结构体变量\n",[36,12831,12832,12835,12837,12839],{"class":38,"line":10328},[36,12833,12834],{"class":42},"    Sanguo s1[",[36,12836,2875],{"class":62},[36,12838,3493],{"class":42},[36,12840,7291],{"class":46},[36,12842,12843],{"class":38,"line":10352},[36,12844,4423],{"class":42},[36,12846,12847,12849,12851,12853,12855,12857,12859],{"class":38,"line":10357},[36,12848,7300],{"class":42},[36,12850,12331],{"class":50},[36,12852,2934],{"class":42},[36,12854,3329],{"class":62},[36,12856,2934],{"class":42},[36,12858,12340],{"class":50},[36,12860,7313],{"class":42},[36,12862,12863,12865,12867,12869,12871,12873,12875],{"class":38,"line":10363},[36,12864,7300],{"class":42},[36,12866,12349],{"class":50},[36,12868,2934],{"class":42},[36,12870,3304],{"class":62},[36,12872,2934],{"class":42},[36,12874,12340],{"class":50},[36,12876,7313],{"class":42},[36,12878,12879,12881,12883,12885,12887,12889,12891],{"class":38,"line":10390},[36,12880,7300],{"class":42},[36,12882,12366],{"class":50},[36,12884,2934],{"class":42},[36,12886,3254],{"class":62},[36,12888,2934],{"class":42},[36,12890,12340],{"class":50},[36,12892,7313],{"class":42},[36,12894,12895,12897,12899,12901,12903,12905,12907],{"class":38,"line":10395},[36,12896,7300],{"class":42},[36,12898,12383],{"class":50},[36,12900,2934],{"class":42},[36,12902,3279],{"class":62},[36,12904,2934],{"class":42},[36,12906,12340],{"class":50},[36,12908,7313],{"class":42},[36,12910,12911,12913,12915,12917,12919,12921,12923],{"class":38,"line":10401},[36,12912,7300],{"class":42},[36,12914,12400],{"class":50},[36,12916,2934],{"class":42},[36,12918,3229],{"class":62},[36,12920,2934],{"class":42},[36,12922,12409],{"class":50},[36,12924,7313],{"class":42},[36,12926,12927],{"class":38,"line":10413},[36,12928,7334],{"class":42},[36,12930,12931,12933,12935,12937,12940,12942,12945,12947],{"class":38,"line":10425},[36,12932,4378],{"class":46},[36,12934,9712],{"class":42},[36,12936,6586],{"class":46},[36,12938,12939],{"class":42},"(s1)",[36,12941,6592],{"class":46},[36,12943,12944],{"class":42},"(s1[",[36,12946,2751],{"class":62},[36,12948,6240],{"class":42},[36,12950,12951,12954,12956,12959,12961,12964,12967,12969],{"class":38,"line":10437},[36,12952,12953],{"class":42},"    Sanguo ",[36,12955,3011],{"class":46},[36,12957,12958],{"class":42},"s ",[36,12960,47],{"class":46},[36,12962,12963],{"class":46}," &",[36,12965,12966],{"class":42},"s1[",[36,12968,2751],{"class":62},[36,12970,7073],{"class":42},[36,12972,12973],{"class":38,"line":12095},[36,12974,12975],{"class":2621},"    \u002F\u002F排序前：\n",[36,12977,12978,12980,12982,12985,12987],{"class":38,"line":12120},[36,12979,8910],{"class":42},[36,12981,3594],{"class":46},[36,12983,12984],{"class":50}," \"排序前：\"",[36,12986,3861],{"class":46},[36,12988,11220],{"class":42},[36,12990,12991,12993],{"class":38,"line":12143},[36,12992,12294],{"class":79},[36,12994,12995],{"class":42},"(s,len);\n",[36,12997,12998],{"class":38,"line":12167},[36,12999,13000],{"class":2621},"    \u002F\u002F调用排序函数\n",[36,13002,13003,13005],{"class":38,"line":12172},[36,13004,9979],{"class":79},[36,13006,12995],{"class":42},[36,13008,13009],{"class":38,"line":12177},[36,13010,13011],{"class":2621},"    \u002F\u002F排序后\n",[36,13013,13014,13016,13018,13021,13023],{"class":38,"line":12182},[36,13015,8910],{"class":42},[36,13017,3594],{"class":46},[36,13019,13020],{"class":50}," \"排序后：\"",[36,13022,3861],{"class":46},[36,13024,11220],{"class":42},[36,13026,13027,13029],{"class":38,"line":12191},[36,13028,12294],{"class":79},[36,13030,12995],{"class":42},[36,13032,13033],{"class":38,"line":12196},[36,13034,3982],{"class":42},[19,13036,13037,13038,13040],{},"注意：使用指针时直接用传首地址**&s",[36,13039,2751],{},"**",[2467,13042,13043],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":13045},[13046,13047,13048,13049,13050,13051,13052],{"id":10084,"depth":54,"text":10085},{"id":10445,"depth":54,"text":10446},{"id":10714,"depth":54,"text":10715},{"id":10879,"depth":54,"text":10880},{"id":11095,"depth":54,"text":11096},{"id":11416,"depth":54,"text":11417},{"id":11644,"depth":54,"text":11645},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10073,"description":10081},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13059,"title":13060,"body":13061,"description":31,"extension":2494,"meta":14403,"navigation":69,"path":14404,"seo":14405,"stem":14406,"__hash__":14407},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13062,"toc":14397},[13063,13066,13070,13076,13090,13095,13098,13102,13109,13115,13118,13125,13131,13136,13139,13142,13145,13708,13711,13725,13729,13734,13750,13890,13893,13899,13902,13907,13915,14023,14026,14031,14034,14039,14042,14048,14051,14394],[10,13064,13060],{"id":13065},"_5程序内存模型",[14,13067,13069],{"id":13068},"_51内存分区模型","5.1内存分区模型",[19,13071,13072,13073],{},"C++程序在执行时，将内存大方向划分为",[667,13074,13075],{},"4个区域",[3557,13077,13078,13081,13084,13087],{},[653,13079,13080],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[653,13082,13083],{},"全局区：存放全局变量和静态变量以及常量",[653,13085,13086],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[653,13088,13089],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,13091,13092],{},[667,13093,13094],{},"内存四区意义：",[19,13096,13097],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1752,13099,13101],{"id":13100},"_511程序运行前","5.1.1程序运行前",[19,13103,13104,13105,13108],{},"​\t在程序编译后，生成了exe可执行程序，",[667,13106,13107],{},"未执行该程序前","分为两个区域",[19,13110,13111,13112],{},"​\t",[667,13113,13114],{},"代码区：",[19,13116,13117],{},"​\t\t存放 CPU 执行的机器指令",[19,13119,13120,13121,13124],{},"​\t\t代码区是",[667,13122,13123],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13126,13120,13127,13130],{},[667,13128,13129],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13132,13111,13133],{},[667,13134,13135],{},"全局区：",[19,13137,13138],{},"​\t\t全局变量和静态变量存放在此.",[19,13140,13141],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13143,13144],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,13146,13148],{"className":2556,"code":13147,"language":2558,"meta":31,"style":31},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,13149,13150,13155,13168,13181,13185,13190,13205,13220,13224,13233,13237,13242,13254,13267,13271,13276,13302,13328,13332,13359,13385,13389,13394,13410,13425,13429,13455,13481,13485,13510,13535,13539,13565,13591,13595,13611,13626,13652,13678,13682,13692,13696,13704],{"__ignoreMap":31},[36,13151,13152],{"class":38,"line":39},[36,13153,13154],{"class":2621},"\u002F\u002F全局变量\n",[36,13156,13157,13159,13162,13164,13166],{"class":38,"line":54},[36,13158,2570],{"class":46},[36,13160,13161],{"class":42}," g_a ",[36,13163,47],{"class":46},[36,13165,4431],{"class":62},[36,13167,3711],{"class":42},[36,13169,13170,13172,13175,13177,13179],{"class":38,"line":66},[36,13171,2570],{"class":46},[36,13173,13174],{"class":42}," g_b ",[36,13176,47],{"class":46},[36,13178,4431],{"class":62},[36,13180,3711],{"class":42},[36,13182,13183],{"class":38,"line":73},[36,13184,70],{"emptyLinePlaceholder":69},[36,13186,13187],{"class":38,"line":86},[36,13188,13189],{"class":2621},"\u002F\u002F全局常量\n",[36,13191,13192,13194,13196,13199,13201,13203],{"class":38,"line":126},[36,13193,9173],{"class":46},[36,13195,4775],{"class":46},[36,13197,13198],{"class":42}," c_g_a ",[36,13200,47],{"class":46},[36,13202,4431],{"class":62},[36,13204,3711],{"class":42},[36,13206,13207,13209,13211,13214,13216,13218],{"class":38,"line":131},[36,13208,9173],{"class":46},[36,13210,4775],{"class":46},[36,13212,13213],{"class":42}," c_g_b ",[36,13215,47],{"class":46},[36,13217,4431],{"class":62},[36,13219,3711],{"class":42},[36,13221,13222],{"class":38,"line":225},[36,13223,70],{"emptyLinePlaceholder":69},[36,13225,13226,13228,13230],{"class":38,"line":235},[36,13227,2570],{"class":46},[36,13229,4366],{"class":79},[36,13231,13232],{"class":42},"() {\n",[36,13234,13235],{"class":38,"line":377},[36,13236,70],{"emptyLinePlaceholder":69},[36,13238,13239],{"class":38,"line":617},[36,13240,13241],{"class":2621},"    \u002F\u002F局部变量\n",[36,13243,13244,13246,13248,13250,13252],{"class":38,"line":643},[36,13245,4378],{"class":46},[36,13247,1882],{"class":42},[36,13249,47],{"class":46},[36,13251,4431],{"class":62},[36,13253,3711],{"class":42},[36,13255,13256,13258,13261,13263,13265],{"class":38,"line":921},[36,13257,4378],{"class":46},[36,13259,13260],{"class":42}," b ",[36,13262,47],{"class":46},[36,13264,4431],{"class":62},[36,13266,3711],{"class":42},[36,13268,13269],{"class":38,"line":934},[36,13270,70],{"emptyLinePlaceholder":69},[36,13272,13273],{"class":38,"line":939},[36,13274,13275],{"class":2621},"    \u002F\u002F打印地址\n",[36,13277,13278,13280,13282,13285,13287,13289,13291,13293,13295,13298,13300],{"class":38,"line":949},[36,13279,8910],{"class":42},[36,13281,3594],{"class":46},[36,13283,13284],{"class":50}," \"局部变量a地址为： \"",[36,13286,3861],{"class":46},[36,13288,4066],{"class":42},[36,13290,2570],{"class":46},[36,13292,2985],{"class":42},[36,13294,2909],{"class":46},[36,13296,13297],{"class":42},"a ",[36,13299,3594],{"class":46},[36,13301,11220],{"class":42},[36,13303,13304,13306,13308,13311,13313,13315,13317,13319,13321,13324,13326],{"class":38,"line":962},[36,13305,8910],{"class":42},[36,13307,3594],{"class":46},[36,13309,13310],{"class":50}," \"局部变量b地址为： \"",[36,13312,3861],{"class":46},[36,13314,4066],{"class":42},[36,13316,2570],{"class":46},[36,13318,2985],{"class":42},[36,13320,2909],{"class":46},[36,13322,13323],{"class":42},"b ",[36,13325,3594],{"class":46},[36,13327,11220],{"class":42},[36,13329,13330],{"class":38,"line":974},[36,13331,70],{"emptyLinePlaceholder":69},[36,13333,13334,13336,13338,13341,13343,13346,13348,13350,13352,13355,13357],{"class":38,"line":979},[36,13335,8910],{"class":42},[36,13337,3594],{"class":46},[36,13339,13340],{"class":50}," \"全局变量g_a地址为： \"",[36,13342,3861],{"class":46},[36,13344,13345],{"class":42},"  (",[36,13347,2570],{"class":46},[36,13349,2985],{"class":42},[36,13351,2909],{"class":46},[36,13353,13354],{"class":42},"g_a ",[36,13356,3594],{"class":46},[36,13358,11220],{"class":42},[36,13360,13361,13363,13365,13368,13370,13372,13374,13376,13378,13381,13383],{"class":38,"line":994},[36,13362,8910],{"class":42},[36,13364,3594],{"class":46},[36,13366,13367],{"class":50}," \"全局变量g_b地址为： \"",[36,13369,3861],{"class":46},[36,13371,13345],{"class":42},[36,13373,2570],{"class":46},[36,13375,2985],{"class":42},[36,13377,2909],{"class":46},[36,13379,13380],{"class":42},"g_b ",[36,13382,3594],{"class":46},[36,13384,11220],{"class":42},[36,13386,13387],{"class":38,"line":1006},[36,13388,70],{"emptyLinePlaceholder":69},[36,13390,13391],{"class":38,"line":1011},[36,13392,13393],{"class":2621},"    \u002F\u002F静态变量\n",[36,13395,13396,13399,13401,13404,13406,13408],{"class":38,"line":1023},[36,13397,13398],{"class":46},"    static",[36,13400,4775],{"class":46},[36,13402,13403],{"class":42}," s_a ",[36,13405,47],{"class":46},[36,13407,4431],{"class":62},[36,13409,3711],{"class":42},[36,13411,13412,13414,13416,13419,13421,13423],{"class":38,"line":1028},[36,13413,13398],{"class":46},[36,13415,4775],{"class":46},[36,13417,13418],{"class":42}," s_b ",[36,13420,47],{"class":46},[36,13422,4431],{"class":62},[36,13424,3711],{"class":42},[36,13426,13427],{"class":38,"line":1033},[36,13428,70],{"emptyLinePlaceholder":69},[36,13430,13431,13433,13435,13438,13440,13442,13444,13446,13448,13451,13453],{"class":38,"line":1053},[36,13432,8910],{"class":42},[36,13434,3594],{"class":46},[36,13436,13437],{"class":50}," \"静态变量s_a地址为： \"",[36,13439,3861],{"class":46},[36,13441,4066],{"class":42},[36,13443,2570],{"class":46},[36,13445,2985],{"class":42},[36,13447,2909],{"class":46},[36,13449,13450],{"class":42},"s_a ",[36,13452,3594],{"class":46},[36,13454,11220],{"class":42},[36,13456,13457,13459,13461,13464,13466,13468,13470,13472,13474,13477,13479],{"class":38,"line":1064},[36,13458,8910],{"class":42},[36,13460,3594],{"class":46},[36,13462,13463],{"class":50}," \"静态变量s_b地址为： \"",[36,13465,3861],{"class":46},[36,13467,4066],{"class":42},[36,13469,2570],{"class":46},[36,13471,2985],{"class":42},[36,13473,2909],{"class":46},[36,13475,13476],{"class":42},"s_b ",[36,13478,3594],{"class":46},[36,13480,11220],{"class":42},[36,13482,13483],{"class":38,"line":1075},[36,13484,70],{"emptyLinePlaceholder":69},[36,13486,13487,13489,13491,13494,13496,13498,13500,13502,13504,13506,13508],{"class":38,"line":2291},[36,13488,8910],{"class":42},[36,13490,3594],{"class":46},[36,13492,13493],{"class":50}," \"字符串常量地址为： \"",[36,13495,3861],{"class":46},[36,13497,4066],{"class":42},[36,13499,2570],{"class":46},[36,13501,2985],{"class":42},[36,13503,2909],{"class":46},[36,13505,3611],{"class":50},[36,13507,3861],{"class":46},[36,13509,11220],{"class":42},[36,13511,13512,13514,13516,13518,13520,13522,13524,13526,13528,13531,13533],{"class":38,"line":2329},[36,13513,8910],{"class":42},[36,13515,3594],{"class":46},[36,13517,13493],{"class":50},[36,13519,3861],{"class":46},[36,13521,4066],{"class":42},[36,13523,2570],{"class":46},[36,13525,2985],{"class":42},[36,13527,2909],{"class":46},[36,13529,13530],{"class":50},"\"hello world1\"",[36,13532,3861],{"class":46},[36,13534,11220],{"class":42},[36,13536,13537],{"class":38,"line":2334},[36,13538,70],{"emptyLinePlaceholder":69},[36,13540,13541,13543,13545,13548,13550,13552,13554,13556,13558,13561,13563],{"class":38,"line":2339},[36,13542,8910],{"class":42},[36,13544,3594],{"class":46},[36,13546,13547],{"class":50}," \"全局常量c_g_a地址为： \"",[36,13549,3861],{"class":46},[36,13551,4066],{"class":42},[36,13553,2570],{"class":46},[36,13555,2985],{"class":42},[36,13557,2909],{"class":46},[36,13559,13560],{"class":42},"c_g_a ",[36,13562,3594],{"class":46},[36,13564,11220],{"class":42},[36,13566,13567,13569,13571,13574,13576,13578,13580,13582,13584,13587,13589],{"class":38,"line":2365},[36,13568,8910],{"class":42},[36,13570,3594],{"class":46},[36,13572,13573],{"class":50}," \"全局常量c_g_b地址为： \"",[36,13575,3861],{"class":46},[36,13577,4066],{"class":42},[36,13579,2570],{"class":46},[36,13581,2985],{"class":42},[36,13583,2909],{"class":46},[36,13585,13586],{"class":42},"c_g_b ",[36,13588,3594],{"class":46},[36,13590,11220],{"class":42},[36,13592,13593],{"class":38,"line":2373},[36,13594,70],{"emptyLinePlaceholder":69},[36,13596,13597,13600,13602,13605,13607,13609],{"class":38,"line":5001},[36,13598,13599],{"class":46},"    const",[36,13601,4775],{"class":46},[36,13603,13604],{"class":42}," c_l_a ",[36,13606,47],{"class":46},[36,13608,4431],{"class":62},[36,13610,3711],{"class":42},[36,13612,13613,13615,13617,13620,13622,13624],{"class":38,"line":5006},[36,13614,13599],{"class":46},[36,13616,4775],{"class":46},[36,13618,13619],{"class":42}," c_l_b ",[36,13621,47],{"class":46},[36,13623,4431],{"class":62},[36,13625,3711],{"class":42},[36,13627,13628,13630,13632,13635,13637,13639,13641,13643,13645,13648,13650],{"class":38,"line":10328},[36,13629,8910],{"class":42},[36,13631,3594],{"class":46},[36,13633,13634],{"class":50}," \"局部常量c_l_a地址为： \"",[36,13636,3861],{"class":46},[36,13638,4066],{"class":42},[36,13640,2570],{"class":46},[36,13642,2985],{"class":42},[36,13644,2909],{"class":46},[36,13646,13647],{"class":42},"c_l_a ",[36,13649,3594],{"class":46},[36,13651,11220],{"class":42},[36,13653,13654,13656,13658,13661,13663,13665,13667,13669,13671,13674,13676],{"class":38,"line":10352},[36,13655,8910],{"class":42},[36,13657,3594],{"class":46},[36,13659,13660],{"class":50}," \"局部常量c_l_b地址为： \"",[36,13662,3861],{"class":46},[36,13664,4066],{"class":42},[36,13666,2570],{"class":46},[36,13668,2985],{"class":42},[36,13670,2909],{"class":46},[36,13672,13673],{"class":42},"c_l_b ",[36,13675,3594],{"class":46},[36,13677,11220],{"class":42},[36,13679,13680],{"class":38,"line":10357},[36,13681,70],{"emptyLinePlaceholder":69},[36,13683,13684,13686,13688,13690],{"class":38,"line":10363},[36,13685,4696],{"class":79},[36,13687,92],{"class":42},[36,13689,4701],{"class":50},[36,13691,5104],{"class":42},[36,13693,13694],{"class":38,"line":10390},[36,13695,70],{"emptyLinePlaceholder":69},[36,13697,13698,13700,13702],{"class":38,"line":10395},[36,13699,6474],{"class":46},[36,13701,899],{"class":62},[36,13703,3711],{"class":42},[36,13705,13706],{"class":38,"line":10401},[36,13707,3982],{"class":42},[19,13709,13710],{},"总结：",[3557,13712,13713,13716,13719,13722],{},[653,13714,13715],{},"c++中程序运行前分为全局区和代码区",[653,13717,13718],{},"代码区特点是共享和只读",[653,13720,13721],{},"全局区中存放全局变量、静态变量、常量",[653,13723,13724],{},"常量区中存放const修饰的全局常量和字符串常量",[1752,13726,13728],{"id":13727},"_512程序运行后","5.1.2程序运行后",[650,13730,13731],{},[653,13732,13733],{},"栈区：",[3557,13735,13736,13743],{},[653,13737,13738,13739,13742],{},"由编译器自动分配释放, 存放",[667,13740,13741],{},"函数的参数值,局部变量","等",[653,13744,13745,13746,13749],{},"注意事项：",[667,13747,13748],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,13751,13753],{"className":2556,"code":13752,"language":2558,"meta":31,"style":31},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[33,13754,13755,13766,13770,13785,13797,13801,13805,13813,13818,13833,13851,13868,13878,13886],{"__ignoreMap":31},[36,13756,13757,13759,13761,13764],{"class":38,"line":39},[36,13758,2570],{"class":46},[36,13760,8899],{"class":46},[36,13762,13763],{"class":79}," func",[36,13765,4369],{"class":42},[36,13767,13768],{"class":38,"line":54},[36,13769,3963],{"class":42},[36,13771,13772,13774,13776,13778,13780,13782],{"class":38,"line":66},[36,13773,4378],{"class":46},[36,13775,1882],{"class":42},[36,13777,47],{"class":46},[36,13779,4431],{"class":62},[36,13781,2618],{"class":42},[36,13783,13784],{"class":2621}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,13786,13787,13789,13791,13794],{"class":38,"line":73},[36,13788,6474],{"class":46},[36,13790,12963],{"class":46},[36,13792,13793],{"class":42},"a;",[36,13795,13796],{"class":2621}," \u002F\u002F放回局部变量的地址\n",[36,13798,13799],{"class":38,"line":86},[36,13800,3982],{"class":42},[36,13802,13803],{"class":38,"line":126},[36,13804,70],{"emptyLinePlaceholder":69},[36,13806,13807,13809,13811],{"class":38,"line":131},[36,13808,2570],{"class":46},[36,13810,4366],{"class":79},[36,13812,13232],{"class":42},[36,13814,13815],{"class":38,"line":225},[36,13816,13817],{"class":2621},"    \u002F\u002F接受func的返回值\n",[36,13819,13820,13822,13824,13827,13829,13831],{"class":38,"line":235},[36,13821,4378],{"class":46},[36,13823,8899],{"class":46},[36,13825,13826],{"class":42},"p ",[36,13828,47],{"class":46},[36,13830,13763],{"class":79},[36,13832,8018],{"class":42},[36,13834,13835,13837,13839,13841,13843,13845,13848],{"class":38,"line":377},[36,13836,8910],{"class":42},[36,13838,3594],{"class":46},[36,13840,8899],{"class":46},[36,13842,13826],{"class":42},[36,13844,3594],{"class":46},[36,13846,13847],{"class":42}," endl;",[36,13849,13850],{"class":2621}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,13852,13853,13855,13857,13859,13861,13863,13865],{"class":38,"line":617},[36,13854,8910],{"class":42},[36,13856,3594],{"class":46},[36,13858,8899],{"class":46},[36,13860,13826],{"class":42},[36,13862,3594],{"class":46},[36,13864,13847],{"class":42},[36,13866,13867],{"class":2621}," \u002F\u002F第二次这个数据不再保留\n",[36,13869,13870,13872,13874,13876],{"class":38,"line":643},[36,13871,4696],{"class":79},[36,13873,92],{"class":42},[36,13875,4701],{"class":50},[36,13877,5104],{"class":42},[36,13879,13880,13882,13884],{"class":38,"line":921},[36,13881,6474],{"class":46},[36,13883,899],{"class":62},[36,13885,3711],{"class":42},[36,13887,13888],{"class":38,"line":934},[36,13889,3982],{"class":42},[19,13891,13892],{},"输出结果：",[19,13894,13895],{},[3879,13896],{"alt":13897,"src":13898},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13900,13901],{},"总结：不要返回局部变量的地址",[650,13903,13904],{"start":54},[653,13905,13906],{},"堆区",[3557,13908,13909,13912],{},[653,13910,13911],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[653,13913,13914],{},"在c++中主要利用new在堆区开辟内存",[26,13916,13918],{"className":2556,"code":13917,"language":2558,"meta":31,"style":31},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,13919,13920,13935,13939,13944,13965,13972,13976,13984,13988,13993,14007,14019],{"__ignoreMap":31},[36,13921,13922,13924,13927,13930,13932],{"class":38,"line":39},[36,13923,2570],{"class":46},[36,13925,13926],{"class":46},"  *",[36,13928,13929],{"class":79},"func",[36,13931,4819],{"class":42},[36,13933,13934],{"class":2621},"  \u002F\u002F函数返回指针\n",[36,13936,13937],{"class":38,"line":54},[36,13938,3963],{"class":42},[36,13940,13941],{"class":38,"line":66},[36,13942,13943],{"class":2621},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,13945,13946,13948,13950,13952,13954,13957,13959,13961,13963],{"class":38,"line":73},[36,13947,6530],{"class":46},[36,13949,8899],{"class":46},[36,13951,19],{"class":42},[36,13953,47],{"class":46},[36,13955,13956],{"class":46}," new",[36,13958,4775],{"class":46},[36,13960,92],{"class":42},[36,13962,3002],{"class":62},[36,13964,5104],{"class":42},[36,13966,13967,13969],{"class":38,"line":86},[36,13968,6764],{"class":46},[36,13970,13971],{"class":42}," p;\n",[36,13973,13974],{"class":38,"line":126},[36,13975,3982],{"class":42},[36,13977,13978,13980,13982],{"class":38,"line":131},[36,13979,2570],{"class":46},[36,13981,4366],{"class":79},[36,13983,4369],{"class":42},[36,13985,13986],{"class":38,"line":225},[36,13987,3963],{"class":42},[36,13989,13990],{"class":38,"line":235},[36,13991,13992],{"class":2621},"    \u002F\u002F在堆区开辟数据\n",[36,13994,13995,13997,13999,14001,14003,14005],{"class":38,"line":377},[36,13996,4378],{"class":46},[36,13998,8899],{"class":46},[36,14000,19],{"class":42},[36,14002,47],{"class":46},[36,14004,13929],{"class":79},[36,14006,8018],{"class":42},[36,14008,14009,14011,14013,14015,14017],{"class":38,"line":617},[36,14010,3968],{"class":42},[36,14012,8800],{"class":46},[36,14014,19],{"class":42},[36,14016,3594],{"class":46},[36,14018,3616],{"class":42},[36,14020,14021],{"class":38,"line":643},[36,14022,3982],{"class":42},[19,14024,14025],{},"图片展示：",[19,14027,14028],{},[3879,14029],{"alt":13897,"src":14030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14032,14033],{},"堆区内存由程序员管生死！！！",[650,14035,14036],{"start":66},[653,14037,14038],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14040,14041],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14043,14044,14045],{},"​语法：",[33,14046,14047],{}," new 数据类型",[19,14049,14050],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,14052,14054],{"className":2556,"code":14053,"language":2558,"meta":31,"style":31},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[33,14055,14056,14061,14071,14075,14080,14085,14107,14111,14119,14123,14137,14149,14161,14173,14178,14183,14194,14198,14203,14211,14215,14220,14242,14268,14272,14290,14294,14320,14324,14336,14340,14345,14350,14358,14362,14366,14374,14378,14384,14390],{"__ignoreMap":31},[36,14057,14058],{"class":38,"line":39},[36,14059,14060],{"class":2621},"\u002F\u002F1.new的基本语法\n",[36,14062,14063,14065,14067,14069],{"class":38,"line":54},[36,14064,2570],{"class":46},[36,14066,8899],{"class":46},[36,14068,13929],{"class":79},[36,14070,4369],{"class":42},[36,14072,14073],{"class":38,"line":66},[36,14074,3963],{"class":42},[36,14076,14077],{"class":38,"line":73},[36,14078,14079],{"class":2621},"    \u002F\u002F在堆区创建整型数据\n",[36,14081,14082],{"class":38,"line":86},[36,14083,14084],{"class":2621},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,14086,14087,14089,14091,14093,14096,14098,14100,14102,14104],{"class":38,"line":126},[36,14088,4378],{"class":46},[36,14090,8899],{"class":46},[36,14092,19],{"class":42},[36,14094,14095],{"class":46},"=new",[36,14097,4775],{"class":46},[36,14099,92],{"class":42},[36,14101,3002],{"class":62},[36,14103,8348],{"class":42},[36,14105,14106],{"class":2621},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,14108,14109],{"class":38,"line":131},[36,14110,3982],{"class":42},[36,14112,14113,14115,14117],{"class":38,"line":225},[36,14114,7746],{"class":46},[36,14116,7970],{"class":79},[36,14118,4369],{"class":42},[36,14120,14121],{"class":38,"line":235},[36,14122,3963],{"class":42},[36,14124,14125,14127,14129,14131,14133,14135],{"class":38,"line":377},[36,14126,4378],{"class":46},[36,14128,8899],{"class":46},[36,14130,19],{"class":42},[36,14132,47],{"class":46},[36,14134,13929],{"class":79},[36,14136,8018],{"class":42},[36,14138,14139,14141,14143,14145,14147],{"class":38,"line":617},[36,14140,3968],{"class":42},[36,14142,8800],{"class":46},[36,14144,19],{"class":42},[36,14146,3594],{"class":46},[36,14148,3616],{"class":42},[36,14150,14151,14153,14155,14157,14159],{"class":38,"line":643},[36,14152,3968],{"class":42},[36,14154,8800],{"class":46},[36,14156,19],{"class":42},[36,14158,3594],{"class":46},[36,14160,3616],{"class":42},[36,14162,14163,14165,14167,14169,14171],{"class":38,"line":921},[36,14164,3968],{"class":42},[36,14166,8800],{"class":46},[36,14168,19],{"class":42},[36,14170,3594],{"class":46},[36,14172,3616],{"class":42},[36,14174,14175],{"class":38,"line":934},[36,14176,14177],{"class":2621},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,14179,14180],{"class":38,"line":939},[36,14181,14182],{"class":2621},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,14184,14185,14188,14191],{"class":38,"line":949},[36,14186,14187],{"class":46},"    delete",[36,14189,14190],{"class":42}," p;",[36,14192,14193],{"class":2621},"\u002F\u002F删除这块地址\n",[36,14195,14196],{"class":38,"line":962},[36,14197,3982],{"class":42},[36,14199,14200],{"class":38,"line":974},[36,14201,14202],{"class":2621},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,14204,14205,14207,14209],{"class":38,"line":979},[36,14206,7746],{"class":46},[36,14208,8039],{"class":79},[36,14210,4369],{"class":42},[36,14212,14213],{"class":38,"line":994},[36,14214,3963],{"class":42},[36,14216,14217],{"class":38,"line":1006},[36,14218,14219],{"class":2621},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,14221,14222,14224,14226,14228,14230,14232,14234,14236,14239],{"class":38,"line":1011},[36,14223,4378],{"class":46},[36,14225,8899],{"class":46},[36,14227,6264],{"class":42},[36,14229,14095],{"class":46},[36,14231,4775],{"class":46},[36,14233,3444],{"class":42},[36,14235,3002],{"class":62},[36,14237,14238],{"class":42},"];",[36,14240,14241],{"class":2621},"\u002F\u002F10代表数组有10个元素\n",[36,14243,14244,14246,14248,14250,14252,14254,14256,14258,14260,14262,14264,14266],{"class":38,"line":1023},[36,14245,5586],{"class":46},[36,14247,4066],{"class":42},[36,14249,2570],{"class":46},[36,14251,5417],{"class":42},[36,14253,47],{"class":46},[36,14255,2751],{"class":62},[36,14257,5424],{"class":42},[36,14259,3463],{"class":46},[36,14261,3002],{"class":62},[36,14263,5424],{"class":42},[36,14265,4685],{"class":46},[36,14267,123],{"class":42},[36,14269,14270],{"class":38,"line":1028},[36,14271,4423],{"class":42},[36,14273,14274,14277,14279,14281,14283,14285,14287],{"class":38,"line":1033},[36,14275,14276],{"class":42},"        arr[i]",[36,14278,47],{"class":46},[36,14280,2997],{"class":42},[36,14282,1885],{"class":46},[36,14284,1070],{"class":62},[36,14286,2618],{"class":42},[36,14288,14289],{"class":2621},"\u002F\u002F给10个元素赋值100～109\n",[36,14291,14292],{"class":38,"line":1053},[36,14293,4580],{"class":42},[36,14295,14296,14298,14300,14302,14304,14306,14308,14310,14312,14314,14316,14318],{"class":38,"line":1064},[36,14297,5586],{"class":46},[36,14299,4066],{"class":42},[36,14301,2570],{"class":46},[36,14303,5417],{"class":42},[36,14305,47],{"class":46},[36,14307,2751],{"class":62},[36,14309,5424],{"class":42},[36,14311,3463],{"class":46},[36,14313,3002],{"class":62},[36,14315,5424],{"class":42},[36,14317,4685],{"class":46},[36,14319,123],{"class":42},[36,14321,14322],{"class":38,"line":1075},[36,14323,4423],{"class":42},[36,14325,14326,14328,14330,14332,14334],{"class":38,"line":2291},[36,14327,5836],{"class":42},[36,14329,3594],{"class":46},[36,14331,6737],{"class":42},[36,14333,3594],{"class":46},[36,14335,3616],{"class":42},[36,14337,14338],{"class":38,"line":2329},[36,14339,4580],{"class":42},[36,14341,14342],{"class":38,"line":2334},[36,14343,14344],{"class":2621},"    \u002F\u002F释放堆区数组\n",[36,14346,14347],{"class":38,"line":2339},[36,14348,14349],{"class":2621},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,14351,14352,14355],{"class":38,"line":2365},[36,14353,14354],{"class":46},"    delete[]",[36,14356,14357],{"class":42}," arr;\n",[36,14359,14360],{"class":38,"line":2373},[36,14361,3982],{"class":42},[36,14363,14364],{"class":38,"line":5001},[36,14365,70],{"emptyLinePlaceholder":69},[36,14367,14368,14370,14372],{"class":38,"line":5006},[36,14369,2570],{"class":46},[36,14371,4366],{"class":79},[36,14373,4369],{"class":42},[36,14375,14376],{"class":38,"line":10328},[36,14377,3963],{"class":42},[36,14379,14380,14382],{"class":38,"line":10352},[36,14381,8015],{"class":79},[36,14383,8018],{"class":42},[36,14385,14386,14388],{"class":38,"line":10357},[36,14387,8084],{"class":79},[36,14389,8018],{"class":42},[36,14391,14392],{"class":38,"line":10363},[36,14393,3982],{"class":42},[2467,14395,14396],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":14398},[14399],{"id":13068,"depth":54,"text":13069,"children":14400},[14401,14402],{"id":13100,"depth":66,"text":13101},{"id":13727,"depth":66,"text":13728},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13060,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14409,"title":14410,"body":14411,"description":31,"extension":2494,"meta":15891,"navigation":69,"path":15892,"seo":15893,"stem":15894,"__hash__":15895},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14412,"toc":15883},[14413,14416,14420,14423,14426,14595,14599,14604,14621,14626,14778,14782,14785,14788,15181,15185,15188,15193,15196,15508,15512,15518,15678,15680,15688,15692,15695,15702,15880],[10,14414,14410],{"id":14415},"_6引用",[14,14417,14419],{"id":14418},"_61引用基本用法","6.1引用基本用法",[19,14421,14422],{},"引用的本质：给变量起别名",[19,14424,14425],{},"语法：数据类型 &别名=原名",[26,14427,14429],{"className":2556,"code":14428,"language":2558,"meta":31,"style":31},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,14430,14431,14439,14443,14455,14467,14471,14490,14509,14513,14524,14528,14547,14565,14569,14579,14583,14591],{"__ignoreMap":31},[36,14432,14433,14435,14437],{"class":38,"line":39},[36,14434,2570],{"class":46},[36,14436,4366],{"class":79},[36,14438,13232],{"class":42},[36,14440,14441],{"class":38,"line":54},[36,14442,70],{"emptyLinePlaceholder":69},[36,14444,14445,14447,14449,14451,14453],{"class":38,"line":66},[36,14446,4378],{"class":46},[36,14448,1882],{"class":42},[36,14450,47],{"class":46},[36,14452,4431],{"class":62},[36,14454,3711],{"class":42},[36,14456,14457,14459,14461,14463,14465],{"class":38,"line":73},[36,14458,4378],{"class":46},[36,14460,12963],{"class":46},[36,14462,13323],{"class":42},[36,14464,47],{"class":46},[36,14466,3849],{"class":42},[36,14468,14469],{"class":38,"line":86},[36,14470,70],{"emptyLinePlaceholder":69},[36,14472,14473,14475,14477,14480,14482,14484,14486,14488],{"class":38,"line":126},[36,14474,8910],{"class":42},[36,14476,3594],{"class":46},[36,14478,14479],{"class":50}," \"a = \"",[36,14481,3861],{"class":46},[36,14483,1882],{"class":42},[36,14485,3594],{"class":46},[36,14487,13847],{"class":42},[36,14489,9649],{"class":2621},[36,14491,14492,14494,14496,14499,14501,14503,14505,14507],{"class":38,"line":131},[36,14493,8910],{"class":42},[36,14495,3594],{"class":46},[36,14497,14498],{"class":50}," \"b = \"",[36,14500,3861],{"class":46},[36,14502,13260],{"class":42},[36,14504,3594],{"class":46},[36,14506,13847],{"class":42},[36,14508,9649],{"class":2621},[36,14510,14511],{"class":38,"line":225},[36,14512,70],{"emptyLinePlaceholder":69},[36,14514,14515,14518,14520,14522],{"class":38,"line":235},[36,14516,14517],{"class":42},"    b ",[36,14519,47],{"class":46},[36,14521,8136],{"class":62},[36,14523,3711],{"class":42},[36,14525,14526],{"class":38,"line":377},[36,14527,70],{"emptyLinePlaceholder":69},[36,14529,14530,14532,14534,14536,14538,14540,14542,14544],{"class":38,"line":617},[36,14531,8910],{"class":42},[36,14533,3594],{"class":46},[36,14535,14479],{"class":50},[36,14537,3861],{"class":46},[36,14539,1882],{"class":42},[36,14541,3594],{"class":46},[36,14543,13847],{"class":42},[36,14545,14546],{"class":2621},"\u002F\u002F100\n",[36,14548,14549,14551,14553,14555,14557,14559,14561,14563],{"class":38,"line":643},[36,14550,8910],{"class":42},[36,14552,3594],{"class":46},[36,14554,14498],{"class":50},[36,14556,3861],{"class":46},[36,14558,13260],{"class":42},[36,14560,3594],{"class":46},[36,14562,13847],{"class":42},[36,14564,14546],{"class":2621},[36,14566,14567],{"class":38,"line":921},[36,14568,70],{"emptyLinePlaceholder":69},[36,14570,14571,14573,14575,14577],{"class":38,"line":934},[36,14572,4696],{"class":79},[36,14574,92],{"class":42},[36,14576,4701],{"class":50},[36,14578,5104],{"class":42},[36,14580,14581],{"class":38,"line":939},[36,14582,70],{"emptyLinePlaceholder":69},[36,14584,14585,14587,14589],{"class":38,"line":949},[36,14586,6474],{"class":46},[36,14588,899],{"class":62},[36,14590,3711],{"class":42},[36,14592,14593],{"class":38,"line":962},[36,14594,3982],{"class":42},[14,14596,14598],{"id":14597},"_62引用的注意事项","6.2引用的注意事项",[650,14600,14601],{},[653,14602,14603],{},"引用必须要初始化",[26,14605,14607],{"className":2556,"code":14606,"language":2558,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,14608,14609],{"__ignoreMap":31},[36,14610,14611,14613,14615,14618],{"class":38,"line":39},[36,14612,2570],{"class":46},[36,14614,12963],{"class":46},[36,14616,14617],{"class":42},"b;",[36,14619,14620],{"class":2621},"\u002F\u002F非常错误！\n",[650,14622,14623],{"start":54},[653,14624,14625],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,14627,14629],{"className":2556,"code":14628,"language":2558,"meta":31,"style":31},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[33,14630,14631,14639,14651,14663,14671,14687,14700,14718,14736,14756,14766,14774],{"__ignoreMap":31},[36,14632,14633,14635,14637],{"class":38,"line":39},[36,14634,2570],{"class":46},[36,14636,4366],{"class":79},[36,14638,13232],{"class":42},[36,14640,14641,14643,14645,14647,14649],{"class":38,"line":54},[36,14642,4378],{"class":46},[36,14644,1882],{"class":42},[36,14646,47],{"class":46},[36,14648,4431],{"class":62},[36,14650,3711],{"class":42},[36,14652,14653,14655,14657,14659,14661],{"class":38,"line":66},[36,14654,4378],{"class":46},[36,14656,13260],{"class":42},[36,14658,47],{"class":46},[36,14660,11330],{"class":62},[36,14662,3711],{"class":42},[36,14664,14665,14668],{"class":38,"line":73},[36,14666,14667],{"class":2621},"    \u002F\u002Fint &c;",[36,14669,14670],{"class":2621}," \u002F\u002F错误，引用必须初始化\n",[36,14672,14673,14675,14677,14679,14681,14684],{"class":38,"line":86},[36,14674,4378],{"class":46},[36,14676,12963],{"class":46},[36,14678,5331],{"class":42},[36,14680,47],{"class":46},[36,14682,14683],{"class":42}," a;",[36,14685,14686],{"class":2621}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,14688,14689,14692,14694,14697],{"class":38,"line":126},[36,14690,14691],{"class":42},"    c ",[36,14693,47],{"class":46},[36,14695,14696],{"class":42}," b;",[36,14698,14699],{"class":2621}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,14701,14702,14704,14706,14708,14710,14712,14714,14716],{"class":38,"line":131},[36,14703,8910],{"class":42},[36,14705,3594],{"class":46},[36,14707,14479],{"class":50},[36,14709,3861],{"class":46},[36,14711,1882],{"class":42},[36,14713,3594],{"class":46},[36,14715,13847],{"class":42},[36,14717,9634],{"class":2621},[36,14719,14720,14722,14724,14726,14728,14730,14732,14734],{"class":38,"line":225},[36,14721,8910],{"class":42},[36,14723,3594],{"class":46},[36,14725,14498],{"class":50},[36,14727,3861],{"class":46},[36,14729,13260],{"class":42},[36,14731,3594],{"class":46},[36,14733,13847],{"class":42},[36,14735,9634],{"class":2621},[36,14737,14738,14740,14742,14745,14747,14750,14752,14754],{"class":38,"line":235},[36,14739,8910],{"class":42},[36,14741,3594],{"class":46},[36,14743,14744],{"class":50}," \"c = \"",[36,14746,3861],{"class":46},[36,14748,14749],{"class":42}," c ",[36,14751,3594],{"class":46},[36,14753,13847],{"class":42},[36,14755,9634],{"class":2621},[36,14757,14758,14760,14762,14764],{"class":38,"line":377},[36,14759,4696],{"class":79},[36,14761,92],{"class":42},[36,14763,4701],{"class":50},[36,14765,5104],{"class":42},[36,14767,14768,14770,14772],{"class":38,"line":617},[36,14769,6474],{"class":46},[36,14771,899],{"class":62},[36,14773,3711],{"class":42},[36,14775,14776],{"class":38,"line":643},[36,14777,3982],{"class":42},[14,14779,14781],{"id":14780},"_63引用做函数参数","6.3引用做函数参数",[19,14783,14784],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14786,14787],{},"优点：可以简化指针修改实参",[26,14789,14791],{"className":2556,"code":14790,"language":2558,"meta":31,"style":31},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[33,14792,14793,14798,14820,14831,14841,14850,14854,14858,14863,14885,14897,14909,14919,14923,14927,14932,14954,14964,14972,14980,14984,14988,14996,15000,15012,15024,15028,15039,15065,15069,15089,15113,15117,15127,15151,15155,15165,15169,15177],{"__ignoreMap":31},[36,14794,14795],{"class":38,"line":39},[36,14796,14797],{"class":2621},"\u002F\u002F1. 值传递\n",[36,14799,14800,14802,14805,14807,14809,14811,14813,14815,14817],{"class":38,"line":54},[36,14801,7746],{"class":46},[36,14803,14804],{"class":79}," mySwap01",[36,14806,92],{"class":42},[36,14808,2570],{"class":46},[36,14810,3815],{"class":7598},[36,14812,630],{"class":42},[36,14814,2570],{"class":46},[36,14816,5218],{"class":7598},[36,14818,14819],{"class":42},") {\n",[36,14821,14822,14824,14827,14829],{"class":38,"line":66},[36,14823,4378],{"class":46},[36,14825,14826],{"class":42}," temp ",[36,14828,47],{"class":46},[36,14830,3849],{"class":42},[36,14832,14833,14836,14838],{"class":38,"line":73},[36,14834,14835],{"class":42},"    a ",[36,14837,47],{"class":46},[36,14839,14840],{"class":42}," b;\n",[36,14842,14843,14845,14847],{"class":38,"line":86},[36,14844,14517],{"class":42},[36,14846,47],{"class":46},[36,14848,14849],{"class":42}," temp;\n",[36,14851,14852],{"class":38,"line":126},[36,14853,3982],{"class":42},[36,14855,14856],{"class":38,"line":131},[36,14857,70],{"emptyLinePlaceholder":69},[36,14859,14860],{"class":38,"line":225},[36,14861,14862],{"class":2621},"\u002F\u002F2. 地址传递\n",[36,14864,14865,14867,14870,14872,14875,14877,14879,14881,14883],{"class":38,"line":235},[36,14866,7746],{"class":46},[36,14868,14869],{"class":79}," mySwap02",[36,14871,92],{"class":42},[36,14873,14874],{"class":46},"int*",[36,14876,3815],{"class":7598},[36,14878,630],{"class":42},[36,14880,14874],{"class":46},[36,14882,5218],{"class":7598},[36,14884,14819],{"class":42},[36,14886,14887,14889,14891,14893,14895],{"class":38,"line":377},[36,14888,4378],{"class":46},[36,14890,14826],{"class":42},[36,14892,47],{"class":46},[36,14894,8899],{"class":46},[36,14896,8579],{"class":42},[36,14898,14899,14901,14903,14905,14907],{"class":38,"line":617},[36,14900,8785],{"class":46},[36,14902,13297],{"class":42},[36,14904,47],{"class":46},[36,14906,8899],{"class":46},[36,14908,8451],{"class":42},[36,14910,14911,14913,14915,14917],{"class":38,"line":643},[36,14912,8785],{"class":46},[36,14914,13323],{"class":42},[36,14916,47],{"class":46},[36,14918,14849],{"class":42},[36,14920,14921],{"class":38,"line":921},[36,14922,3982],{"class":42},[36,14924,14925],{"class":38,"line":934},[36,14926,70],{"emptyLinePlaceholder":69},[36,14928,14929],{"class":38,"line":939},[36,14930,14931],{"class":2621},"\u002F\u002F3. 引用传递\n",[36,14933,14934,14936,14939,14941,14944,14946,14948,14950,14952],{"class":38,"line":949},[36,14935,7746],{"class":46},[36,14937,14938],{"class":79}," mySwap03",[36,14940,92],{"class":42},[36,14942,14943],{"class":46},"int&",[36,14945,3815],{"class":7598},[36,14947,630],{"class":42},[36,14949,14943],{"class":46},[36,14951,5218],{"class":7598},[36,14953,14819],{"class":42},[36,14955,14956,14958,14960,14962],{"class":38,"line":962},[36,14957,4378],{"class":46},[36,14959,14826],{"class":42},[36,14961,47],{"class":46},[36,14963,3849],{"class":42},[36,14965,14966,14968,14970],{"class":38,"line":974},[36,14967,14835],{"class":42},[36,14969,47],{"class":46},[36,14971,14840],{"class":42},[36,14973,14974,14976,14978],{"class":38,"line":979},[36,14975,14517],{"class":42},[36,14977,47],{"class":46},[36,14979,14849],{"class":42},[36,14981,14982],{"class":38,"line":994},[36,14983,3982],{"class":42},[36,14985,14986],{"class":38,"line":1006},[36,14987,70],{"emptyLinePlaceholder":69},[36,14989,14990,14992,14994],{"class":38,"line":1011},[36,14991,2570],{"class":46},[36,14993,4366],{"class":79},[36,14995,13232],{"class":42},[36,14997,14998],{"class":38,"line":1023},[36,14999,70],{"emptyLinePlaceholder":69},[36,15001,15002,15004,15006,15008,15010],{"class":38,"line":1028},[36,15003,4378],{"class":46},[36,15005,1882],{"class":42},[36,15007,47],{"class":46},[36,15009,4431],{"class":62},[36,15011,3711],{"class":42},[36,15013,15014,15016,15018,15020,15022],{"class":38,"line":1033},[36,15015,4378],{"class":46},[36,15017,13260],{"class":42},[36,15019,47],{"class":46},[36,15021,11330],{"class":62},[36,15023,3711],{"class":42},[36,15025,15026],{"class":38,"line":1053},[36,15027,70],{"emptyLinePlaceholder":69},[36,15029,15030,15033,15036],{"class":38,"line":1064},[36,15031,15032],{"class":79},"    mySwap01",[36,15034,15035],{"class":42},"(a, b);",[36,15037,15038],{"class":2621},"\u002F\u002F值传递，形参不会修饰实参\n",[36,15040,15041,15043,15045,15048,15050,15052,15054,15057,15059,15061,15063],{"class":38,"line":1075},[36,15042,8910],{"class":42},[36,15044,3594],{"class":46},[36,15046,15047],{"class":50}," \"a:\"",[36,15049,3861],{"class":46},[36,15051,1882],{"class":42},[36,15053,3594],{"class":46},[36,15055,15056],{"class":50}," \" b:\"",[36,15058,3861],{"class":46},[36,15060,13260],{"class":42},[36,15062,3594],{"class":46},[36,15064,11220],{"class":42},[36,15066,15067],{"class":38,"line":2291},[36,15068,70],{"emptyLinePlaceholder":69},[36,15070,15071,15074,15076,15078,15081,15083,15086],{"class":38,"line":2329},[36,15072,15073],{"class":79},"    mySwap02",[36,15075,92],{"class":42},[36,15077,2909],{"class":46},[36,15079,15080],{"class":42},"a, ",[36,15082,2909],{"class":46},[36,15084,15085],{"class":42},"b);",[36,15087,15088],{"class":2621},"\u002F\u002F地址传递，形参会修饰实参\n",[36,15090,15091,15093,15095,15097,15099,15101,15103,15105,15107,15109,15111],{"class":38,"line":2334},[36,15092,8910],{"class":42},[36,15094,3594],{"class":46},[36,15096,15047],{"class":50},[36,15098,3861],{"class":46},[36,15100,1882],{"class":42},[36,15102,3594],{"class":46},[36,15104,15056],{"class":50},[36,15106,3861],{"class":46},[36,15108,13260],{"class":42},[36,15110,3594],{"class":46},[36,15112,11220],{"class":42},[36,15114,15115],{"class":38,"line":2339},[36,15116,70],{"emptyLinePlaceholder":69},[36,15118,15119,15122,15124],{"class":38,"line":2365},[36,15120,15121],{"class":79},"    mySwap03",[36,15123,15035],{"class":42},[36,15125,15126],{"class":2621},"\u002F\u002F引用传递，形参会修饰实参\n",[36,15128,15129,15131,15133,15135,15137,15139,15141,15143,15145,15147,15149],{"class":38,"line":2373},[36,15130,8910],{"class":42},[36,15132,3594],{"class":46},[36,15134,15047],{"class":50},[36,15136,3861],{"class":46},[36,15138,1882],{"class":42},[36,15140,3594],{"class":46},[36,15142,15056],{"class":50},[36,15144,3861],{"class":46},[36,15146,13260],{"class":42},[36,15148,3594],{"class":46},[36,15150,11220],{"class":42},[36,15152,15153],{"class":38,"line":5001},[36,15154,70],{"emptyLinePlaceholder":69},[36,15156,15157,15159,15161,15163],{"class":38,"line":5006},[36,15158,4696],{"class":79},[36,15160,92],{"class":42},[36,15162,4701],{"class":50},[36,15164,5104],{"class":42},[36,15166,15167],{"class":38,"line":10328},[36,15168,70],{"emptyLinePlaceholder":69},[36,15170,15171,15173,15175],{"class":38,"line":10352},[36,15172,6474],{"class":46},[36,15174,899],{"class":62},[36,15176,3711],{"class":42},[36,15178,15179],{"class":38,"line":10357},[36,15180,3982],{"class":42},[14,15182,15184],{"id":15183},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15186,15187],{},"作用：引用是可以作为函数的返回值存在的",[19,15189,11405,15190],{},[667,15191,15192],{},"不要返回局部变量引用",[19,15194,15195],{},"用法：函数调用作为左值",[26,15197,15199],{"className":12320,"code":15198,"language":12322,"meta":31,"style":31},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,15200,15201,15206,15214,15229,15235,15239,15243,15248,15256,15273,15279,15283,15287,15295,15299,15304,15318,15338,15357,15361,15366,15379,15399,15417,15421,15437,15441,15460,15478,15482,15492,15496,15504],{"__ignoreMap":31},[36,15202,15203],{"class":38,"line":39},[36,15204,15205],{"class":2621},"\u002F\u002F返回局部变量引用\n",[36,15207,15208,15210,15212],{"class":38,"line":54},[36,15209,14943],{"class":46},[36,15211,7970],{"class":79},[36,15213,13232],{"class":42},[36,15215,15216,15218,15220,15222,15224,15226],{"class":38,"line":66},[36,15217,4378],{"class":46},[36,15219,1882],{"class":42},[36,15221,47],{"class":46},[36,15223,4431],{"class":62},[36,15225,2618],{"class":42},[36,15227,15228],{"class":2621}," \u002F\u002F局部变量\n",[36,15230,15231,15233],{"class":38,"line":73},[36,15232,6474],{"class":46},[36,15234,3849],{"class":42},[36,15236,15237],{"class":38,"line":86},[36,15238,3982],{"class":42},[36,15240,15241],{"class":38,"line":126},[36,15242,70],{"emptyLinePlaceholder":69},[36,15244,15245],{"class":38,"line":131},[36,15246,15247],{"class":2621},"\u002F\u002F返回静态变量引用\n",[36,15249,15250,15252,15254],{"class":38,"line":225},[36,15251,14943],{"class":46},[36,15253,8039],{"class":79},[36,15255,13232],{"class":42},[36,15257,15258,15260,15262,15264,15266,15268,15270],{"class":38,"line":235},[36,15259,13398],{"class":46},[36,15261,4775],{"class":46},[36,15263,1882],{"class":42},[36,15265,47],{"class":46},[36,15267,11330],{"class":62},[36,15269,2618],{"class":42},[36,15271,15272],{"class":2621},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,15274,15275,15277],{"class":38,"line":377},[36,15276,6474],{"class":46},[36,15278,3849],{"class":42},[36,15280,15281],{"class":38,"line":617},[36,15282,3982],{"class":42},[36,15284,15285],{"class":38,"line":643},[36,15286,70],{"emptyLinePlaceholder":69},[36,15288,15289,15291,15293],{"class":38,"line":921},[36,15290,2570],{"class":46},[36,15292,4366],{"class":79},[36,15294,13232],{"class":42},[36,15296,15297],{"class":38,"line":934},[36,15298,70],{"emptyLinePlaceholder":69},[36,15300,15301],{"class":38,"line":939},[36,15302,15303],{"class":2621},"    \u002F\u002F不能返回局部变量的引用\n",[36,15305,15306,15309,15312,15314,15316],{"class":38,"line":949},[36,15307,15308],{"class":46},"    int&",[36,15310,15311],{"class":42}," ref ",[36,15313,47],{"class":46},[36,15315,7970],{"class":79},[36,15317,8018],{"class":42},[36,15319,15320,15322,15324,15327,15329,15331,15333,15335],{"class":38,"line":962},[36,15321,8910],{"class":42},[36,15323,3594],{"class":46},[36,15325,15326],{"class":50}," \"ref = \"",[36,15328,3861],{"class":46},[36,15330,15311],{"class":42},[36,15332,3594],{"class":46},[36,15334,13847],{"class":42},[36,15336,15337],{"class":2621},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,15339,15340,15342,15344,15346,15348,15350,15352,15354],{"class":38,"line":974},[36,15341,8910],{"class":42},[36,15343,3594],{"class":46},[36,15345,15326],{"class":50},[36,15347,3861],{"class":46},[36,15349,15311],{"class":42},[36,15351,3594],{"class":46},[36,15353,13847],{"class":42},[36,15355,15356],{"class":2621},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,15358,15359],{"class":38,"line":979},[36,15360,70],{"emptyLinePlaceholder":69},[36,15362,15363],{"class":38,"line":994},[36,15364,15365],{"class":2621},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,15367,15368,15370,15373,15375,15377],{"class":38,"line":1006},[36,15369,15308],{"class":46},[36,15371,15372],{"class":42}," ref2 ",[36,15374,47],{"class":46},[36,15376,8039],{"class":79},[36,15378,8018],{"class":42},[36,15380,15381,15383,15385,15388,15390,15392,15394,15396],{"class":38,"line":1011},[36,15382,8910],{"class":42},[36,15384,3594],{"class":46},[36,15386,15387],{"class":50}," \"ref2 = \"",[36,15389,3861],{"class":46},[36,15391,15372],{"class":42},[36,15393,3594],{"class":46},[36,15395,13847],{"class":42},[36,15397,15398],{"class":2621}," \u002F\u002F20\n",[36,15400,15401,15403,15405,15407,15409,15411,15413,15415],{"class":38,"line":1023},[36,15402,8910],{"class":42},[36,15404,3594],{"class":46},[36,15406,15387],{"class":50},[36,15408,3861],{"class":46},[36,15410,15372],{"class":42},[36,15412,3594],{"class":46},[36,15414,13847],{"class":42},[36,15416,15398],{"class":2621},[36,15418,15419],{"class":38,"line":1028},[36,15420,70],{"emptyLinePlaceholder":69},[36,15422,15423,15425,15428,15430,15432,15434],{"class":38,"line":1033},[36,15424,8084],{"class":79},[36,15426,15427],{"class":42},"() ",[36,15429,47],{"class":46},[36,15431,5384],{"class":62},[36,15433,2618],{"class":42},[36,15435,15436],{"class":2621},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,15438,15439],{"class":38,"line":1053},[36,15440,70],{"emptyLinePlaceholder":69},[36,15442,15443,15445,15447,15449,15451,15453,15455,15457],{"class":38,"line":1064},[36,15444,8910],{"class":42},[36,15446,3594],{"class":46},[36,15448,15387],{"class":50},[36,15450,3861],{"class":46},[36,15452,15372],{"class":42},[36,15454,3594],{"class":46},[36,15456,13847],{"class":42},[36,15458,15459],{"class":2621}," \u002F\u002F1000\n",[36,15461,15462,15464,15466,15468,15470,15472,15474,15476],{"class":38,"line":1075},[36,15463,8910],{"class":42},[36,15465,3594],{"class":46},[36,15467,15387],{"class":50},[36,15469,3861],{"class":46},[36,15471,15372],{"class":42},[36,15473,3594],{"class":46},[36,15475,13847],{"class":42},[36,15477,15459],{"class":2621},[36,15479,15480],{"class":38,"line":2291},[36,15481,70],{"emptyLinePlaceholder":69},[36,15483,15484,15486,15488,15490],{"class":38,"line":2329},[36,15485,4696],{"class":79},[36,15487,92],{"class":42},[36,15489,4701],{"class":50},[36,15491,5104],{"class":42},[36,15493,15494],{"class":38,"line":2334},[36,15495,70],{"emptyLinePlaceholder":69},[36,15497,15498,15500,15502],{"class":38,"line":2339},[36,15499,6474],{"class":46},[36,15501,899],{"class":62},[36,15503,3711],{"class":42},[36,15505,15506],{"class":38,"line":2365},[36,15507,3982],{"class":42},[14,15509,15511],{"id":15510},"_65引用的本质","6.5引用的本质",[19,15513,15514,15515],{},"本质：",[667,15516,15517],{},"引用的本质在c++内部实现是一个指针常量.",[26,15519,15521],{"className":2556,"code":15520,"language":2558,"meta":31,"style":31},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[33,15522,15523,15528,15544,15558,15562,15571,15583,15588,15593,15604,15617,15621,15637,15654,15658,15666,15674],{"__ignoreMap":31},[36,15524,15525],{"class":38,"line":39},[36,15526,15527],{"class":2621},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,15529,15530,15532,15534,15536,15538,15541],{"class":38,"line":54},[36,15531,7746],{"class":46},[36,15533,13763],{"class":79},[36,15535,92],{"class":42},[36,15537,14943],{"class":46},[36,15539,15540],{"class":7598}," ref",[36,15542,15543],{"class":42},"){\n",[36,15545,15546,15549,15551,15553,15555],{"class":38,"line":66},[36,15547,15548],{"class":42},"    ref ",[36,15550,47],{"class":46},[36,15552,8136],{"class":62},[36,15554,2618],{"class":42},[36,15556,15557],{"class":2621}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,15559,15560],{"class":38,"line":73},[36,15561,3982],{"class":42},[36,15563,15564,15566,15568],{"class":38,"line":86},[36,15565,2570],{"class":46},[36,15567,4366],{"class":79},[36,15569,15570],{"class":42},"(){\n",[36,15572,15573,15575,15577,15579,15581],{"class":38,"line":126},[36,15574,4378],{"class":46},[36,15576,1882],{"class":42},[36,15578,47],{"class":46},[36,15580,4431],{"class":62},[36,15582,3711],{"class":42},[36,15584,15585],{"class":38,"line":131},[36,15586,15587],{"class":42},"    \n",[36,15589,15590],{"class":38,"line":225},[36,15591,15592],{"class":2621},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,15594,15595,15597,15599,15601],{"class":38,"line":235},[36,15596,15308],{"class":46},[36,15598,15311],{"class":42},[36,15600,47],{"class":46},[36,15602,15603],{"class":42}," a; \n",[36,15605,15606,15608,15610,15612,15614],{"class":38,"line":377},[36,15607,15548],{"class":42},[36,15609,47],{"class":46},[36,15611,11330],{"class":62},[36,15613,2618],{"class":42},[36,15615,15616],{"class":2621}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,15618,15619],{"class":38,"line":617},[36,15620,15587],{"class":42},[36,15622,15623,15625,15627,15629,15631,15633,15635],{"class":38,"line":643},[36,15624,8910],{"class":42},[36,15626,3594],{"class":46},[36,15628,15047],{"class":50},[36,15630,3861],{"class":46},[36,15632,1882],{"class":42},[36,15634,3594],{"class":46},[36,15636,11220],{"class":42},[36,15638,15639,15641,15643,15646,15648,15650,15652],{"class":38,"line":921},[36,15640,8910],{"class":42},[36,15642,3594],{"class":46},[36,15644,15645],{"class":50}," \"ref:\"",[36,15647,3861],{"class":46},[36,15649,15311],{"class":42},[36,15651,3594],{"class":46},[36,15653,11220],{"class":42},[36,15655,15656],{"class":38,"line":934},[36,15657,15587],{"class":42},[36,15659,15660,15663],{"class":38,"line":939},[36,15661,15662],{"class":79},"    func",[36,15664,15665],{"class":42},"(a);\n",[36,15667,15668,15670,15672],{"class":38,"line":949},[36,15669,6474],{"class":46},[36,15671,899],{"class":62},[36,15673,3711],{"class":42},[36,15675,15676],{"class":38,"line":962},[36,15677,3982],{"class":42},[19,15679,13710],{},[650,15681,15682,15685],{},[653,15683,15684],{},"引用的本质，就是一个指针常量",[653,15686,15687],{},"引用一旦初始化，就不可以发生改变",[14,15689,15691],{"id":15690},"_66常量引用","6.6常量引用",[19,15693,15694],{},"作用：常量引用主要用来修饰形参",[19,15696,15697,15698,15701],{},"在函数形参列表中，可以加",[667,15699,15700],{},"const修饰形参","，防止形参改变实参",[26,15703,15705],{"className":2556,"code":15704,"language":2558,"meta":31,"style":31},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,15706,15707,15712,15717,15736,15741,15754,15758,15762,15770,15774,15779,15784,15798,15802,15810,15822,15826,15831,15843,15850,15854,15864,15868,15876],{"__ignoreMap":31},[36,15708,15709],{"class":38,"line":39},[36,15710,15711],{"class":2621},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,15713,15714],{"class":38,"line":54},[36,15715,15716],{"class":2621},"\u002F\u002F加上const就不能修改实参的\n",[36,15718,15719,15721,15724,15726,15728,15731,15734],{"class":38,"line":66},[36,15720,7746],{"class":46},[36,15722,15723],{"class":79}," showValue",[36,15725,92],{"class":42},[36,15727,9173],{"class":46},[36,15729,15730],{"class":46}," int&",[36,15732,15733],{"class":7598}," v",[36,15735,14819],{"class":42},[36,15737,15738],{"class":38,"line":73},[36,15739,15740],{"class":2621},"    \u002F\u002Fv += 100;\n",[36,15742,15743,15745,15747,15750,15752],{"class":38,"line":86},[36,15744,8910],{"class":42},[36,15746,3594],{"class":46},[36,15748,15749],{"class":42}," v ",[36,15751,3594],{"class":46},[36,15753,11220],{"class":42},[36,15755,15756],{"class":38,"line":126},[36,15757,3982],{"class":42},[36,15759,15760],{"class":38,"line":131},[36,15761,70],{"emptyLinePlaceholder":69},[36,15763,15764,15766,15768],{"class":38,"line":225},[36,15765,2570],{"class":46},[36,15767,4366],{"class":79},[36,15769,13232],{"class":42},[36,15771,15772],{"class":38,"line":235},[36,15773,70],{"emptyLinePlaceholder":69},[36,15775,15776],{"class":38,"line":377},[36,15777,15778],{"class":2621},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,15780,15781],{"class":38,"line":617},[36,15782,15783],{"class":2621},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,15785,15786,15788,15790,15792,15794,15796],{"class":38,"line":643},[36,15787,13599],{"class":46},[36,15789,15730],{"class":46},[36,15791,15311],{"class":42},[36,15793,47],{"class":46},[36,15795,4431],{"class":62},[36,15797,3711],{"class":42},[36,15799,15800],{"class":38,"line":921},[36,15801,70],{"emptyLinePlaceholder":69},[36,15803,15804,15807],{"class":38,"line":934},[36,15805,15806],{"class":2621},"    \u002F\u002Fref = 100;",[36,15808,15809],{"class":2621},"  \u002F\u002F加入const后不可以修改变量\n",[36,15811,15812,15814,15816,15818,15820],{"class":38,"line":939},[36,15813,8910],{"class":42},[36,15815,3594],{"class":46},[36,15817,15311],{"class":42},[36,15819,3594],{"class":46},[36,15821,11220],{"class":42},[36,15823,15824],{"class":38,"line":949},[36,15825,70],{"emptyLinePlaceholder":69},[36,15827,15828],{"class":38,"line":962},[36,15829,15830],{"class":2621},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,15832,15833,15835,15837,15839,15841],{"class":38,"line":974},[36,15834,4378],{"class":46},[36,15836,1882],{"class":42},[36,15838,47],{"class":46},[36,15840,4431],{"class":62},[36,15842,3711],{"class":42},[36,15844,15845,15848],{"class":38,"line":979},[36,15846,15847],{"class":79},"    showValue",[36,15849,15665],{"class":42},[36,15851,15852],{"class":38,"line":994},[36,15853,70],{"emptyLinePlaceholder":69},[36,15855,15856,15858,15860,15862],{"class":38,"line":1006},[36,15857,4696],{"class":79},[36,15859,92],{"class":42},[36,15861,4701],{"class":50},[36,15863,5104],{"class":42},[36,15865,15866],{"class":38,"line":1011},[36,15867,70],{"emptyLinePlaceholder":69},[36,15869,15870,15872,15874],{"class":38,"line":1023},[36,15871,6474],{"class":46},[36,15873,899],{"class":62},[36,15875,3711],{"class":42},[36,15877,15878],{"class":38,"line":1028},[36,15879,3982],{"class":42},[2467,15881,15882],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":15884},[15885,15886,15887,15888,15889,15890],{"id":14418,"depth":54,"text":14419},{"id":14597,"depth":54,"text":14598},{"id":14780,"depth":54,"text":14781},{"id":15183,"depth":54,"text":15184},{"id":15510,"depth":54,"text":15511},{"id":15690,"depth":54,"text":15691},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14410,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15897,"title":15898,"body":15899,"description":31,"extension":2494,"meta":16980,"navigation":69,"path":16981,"seo":16982,"stem":16983,"__hash__":16984},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15900,"toc":16972},[15901,15904,15908,15911,15916,16148,16150,16161,16165,16168,16176,16280,16283,16287,16290,16294,16297,16302,16324,16330,16657,16660,16664,16672,16969],[10,15902,15898],{"id":15903},"_7函数高级部分",[14,15905,15907],{"id":15906},"_71函数默认参数","7.1函数默认参数",[19,15909,15910],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15912,7564,15913],{},[33,15914,15915],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,15917,15919],{"className":2556,"code":15918,"language":2558,"meta":31,"style":31},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,15920,15921,15956,15971,15975,15979,15984,15989,16018,16038,16048,16052,16056,16064,16068,16096,16118,16122,16132,16136,16144],{"__ignoreMap":31},[36,15922,15923,15925,15927,15929,15931,15933,15935,15937,15939,15942,15944,15946,15948,15950,15952,15954],{"class":38,"line":39},[36,15924,2570],{"class":46},[36,15926,13763],{"class":79},[36,15928,92],{"class":42},[36,15930,2570],{"class":46},[36,15932,3815],{"class":7598},[36,15934,630],{"class":42},[36,15936,2570],{"class":46},[36,15938,5218],{"class":7598},[36,15940,15941],{"class":46}," =",[36,15943,4431],{"class":62},[36,15945,630],{"class":42},[36,15947,2570],{"class":46},[36,15949,5234],{"class":7598},[36,15951,15941],{"class":46},[36,15953,4431],{"class":62},[36,15955,14819],{"class":42},[36,15957,15958,15960,15962,15964,15966,15968],{"class":38,"line":54},[36,15959,6474],{"class":46},[36,15961,1882],{"class":42},[36,15963,1885],{"class":46},[36,15965,13260],{"class":42},[36,15967,1885],{"class":46},[36,15969,15970],{"class":42}," c;\n",[36,15972,15973],{"class":38,"line":66},[36,15974,3982],{"class":42},[36,15976,15977],{"class":38,"line":73},[36,15978,70],{"emptyLinePlaceholder":69},[36,15980,15981],{"class":38,"line":86},[36,15982,15983],{"class":2621},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,15985,15986],{"class":38,"line":126},[36,15987,15988],{"class":2621},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,15990,15991,15993,15996,15998,16000,16002,16004,16006,16008,16010,16012,16014,16016],{"class":38,"line":131},[36,15992,2570],{"class":46},[36,15994,15995],{"class":79}," func2",[36,15997,92],{"class":42},[36,15999,2570],{"class":46},[36,16001,3815],{"class":7598},[36,16003,15941],{"class":46},[36,16005,4431],{"class":62},[36,16007,630],{"class":42},[36,16009,2570],{"class":46},[36,16011,5218],{"class":7598},[36,16013,15941],{"class":46},[36,16015,4431],{"class":62},[36,16017,5104],{"class":42},[36,16019,16020,16022,16024,16026,16028,16030,16032,16034,16036],{"class":38,"line":225},[36,16021,2570],{"class":46},[36,16023,15995],{"class":79},[36,16025,92],{"class":42},[36,16027,2570],{"class":46},[36,16029,3815],{"class":7598},[36,16031,630],{"class":42},[36,16033,2570],{"class":46},[36,16035,5218],{"class":7598},[36,16037,14819],{"class":42},[36,16039,16040,16042,16044,16046],{"class":38,"line":235},[36,16041,6474],{"class":46},[36,16043,1882],{"class":42},[36,16045,1885],{"class":46},[36,16047,14840],{"class":42},[36,16049,16050],{"class":38,"line":377},[36,16051,3982],{"class":42},[36,16053,16054],{"class":38,"line":617},[36,16055,70],{"emptyLinePlaceholder":69},[36,16057,16058,16060,16062],{"class":38,"line":643},[36,16059,2570],{"class":46},[36,16061,4366],{"class":79},[36,16063,13232],{"class":42},[36,16065,16066],{"class":38,"line":921},[36,16067,70],{"emptyLinePlaceholder":69},[36,16069,16070,16072,16074,16077,16079,16081,16083,16085,16087,16089,16092,16094],{"class":38,"line":934},[36,16071,8910],{"class":42},[36,16073,3594],{"class":46},[36,16075,16076],{"class":50}," \"ret = \"",[36,16078,3861],{"class":46},[36,16080,13763],{"class":79},[36,16082,92],{"class":42},[36,16084,3254],{"class":62},[36,16086,630],{"class":42},[36,16088,3254],{"class":62},[36,16090,16091],{"class":42},") ",[36,16093,3594],{"class":46},[36,16095,11220],{"class":42},[36,16097,16098,16100,16102,16104,16106,16108,16110,16112,16114,16116],{"class":38,"line":939},[36,16099,8910],{"class":42},[36,16101,3594],{"class":46},[36,16103,16076],{"class":50},[36,16105,3861],{"class":46},[36,16107,13763],{"class":79},[36,16109,92],{"class":42},[36,16111,1070],{"class":62},[36,16113,16091],{"class":42},[36,16115,3594],{"class":46},[36,16117,11220],{"class":42},[36,16119,16120],{"class":38,"line":949},[36,16121,70],{"emptyLinePlaceholder":69},[36,16123,16124,16126,16128,16130],{"class":38,"line":962},[36,16125,4696],{"class":79},[36,16127,92],{"class":42},[36,16129,4701],{"class":50},[36,16131,5104],{"class":42},[36,16133,16134],{"class":38,"line":974},[36,16135,70],{"emptyLinePlaceholder":69},[36,16137,16138,16140,16142],{"class":38,"line":979},[36,16139,6474],{"class":46},[36,16141,899],{"class":62},[36,16143,3711],{"class":42},[36,16145,16146],{"class":38,"line":994},[36,16147,3982],{"class":42},[19,16149,13710],{},[650,16151,16152,16155,16158],{},[653,16153,16154],{},"我传就用我；没传就用你",[653,16156,16157],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[653,16159,16160],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16162,16164],{"id":16163},"_72函数的占位参数","7.2函数的占位参数",[19,16166,16167],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16169,16170,16172,16173],{},[667,16171,7564],{}," ",[33,16174,16175],{},"返回值类型 函数名 (数据类型){}",[26,16177,16179],{"className":2556,"code":16178,"language":2558,"meta":31,"style":31},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,16180,16181,16186,16204,16217,16221,16229,16233,16250,16254,16264,16268,16276],{"__ignoreMap":31},[36,16182,16183],{"class":38,"line":39},[36,16184,16185],{"class":2621},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,16187,16188,16190,16192,16194,16196,16198,16200,16202],{"class":38,"line":54},[36,16189,7746],{"class":46},[36,16191,13763],{"class":79},[36,16193,92],{"class":42},[36,16195,2570],{"class":46},[36,16197,3815],{"class":7598},[36,16199,630],{"class":42},[36,16201,2570],{"class":46},[36,16203,14819],{"class":42},[36,16205,16206,16208,16210,16213,16215],{"class":38,"line":66},[36,16207,8910],{"class":42},[36,16209,3594],{"class":46},[36,16211,16212],{"class":50}," \"this is func\"",[36,16214,3861],{"class":46},[36,16216,11220],{"class":42},[36,16218,16219],{"class":38,"line":73},[36,16220,3982],{"class":42},[36,16222,16223,16225,16227],{"class":38,"line":86},[36,16224,2570],{"class":46},[36,16226,4366],{"class":79},[36,16228,13232],{"class":42},[36,16230,16231],{"class":38,"line":126},[36,16232,70],{"emptyLinePlaceholder":69},[36,16234,16235,16237,16239,16241,16243,16245,16247],{"class":38,"line":131},[36,16236,15662],{"class":79},[36,16238,92],{"class":42},[36,16240,3002],{"class":62},[36,16242,2934],{"class":42},[36,16244,3002],{"class":62},[36,16246,8348],{"class":42},[36,16248,16249],{"class":2621}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,16251,16252],{"class":38,"line":225},[36,16253,70],{"emptyLinePlaceholder":69},[36,16255,16256,16258,16260,16262],{"class":38,"line":235},[36,16257,4696],{"class":79},[36,16259,92],{"class":42},[36,16261,4701],{"class":50},[36,16263,5104],{"class":42},[36,16265,16266],{"class":38,"line":377},[36,16267,70],{"emptyLinePlaceholder":69},[36,16269,16270,16272,16274],{"class":38,"line":617},[36,16271,6474],{"class":46},[36,16273,899],{"class":62},[36,16275,3711],{"class":42},[36,16277,16278],{"class":38,"line":643},[36,16279,3982],{"class":42},[19,16281,16282],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16284,16286],{"id":16285},"_73函数重载","7.3函数重载",[19,16288,16289],{},"意思是函数名是可以相同的",[1752,16291,16293],{"id":16292},"_731基本语法","7.3.1基本语法",[19,16295,16296],{},"作用：函数名可以相同，提高复用性",[19,16298,16299],{},[667,16300,16301],{},"函数重载满足条件：",[3557,16303,16304,16307,16310],{},[653,16305,16306],{},"同一个作用域下",[653,16308,16309],{},"函数名称相同",[653,16311,16312,16313,16316,16317,16320,16321],{},"函数参数",[667,16314,16315],{},"类型不同","  或者 ",[667,16318,16319],{},"个数不同"," 或者 ",[667,16322,16323],{},"顺序不同",[19,16325,16326,16329],{},[667,16327,16328],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,16331,16333],{"className":12320,"code":16332,"language":12322,"meta":31,"style":31},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[33,16334,16335,16340,16348,16352,16365,16369,16383,16387,16400,16404,16419,16423,16436,16440,16461,16465,16478,16482,16502,16506,16519,16523,16527,16532,16537,16542,16547,16552,16556,16560,16568,16572,16578,16588,16598,16612,16627,16631,16641,16645,16653],{"__ignoreMap":31},[36,16336,16337],{"class":38,"line":39},[36,16338,16339],{"class":2621},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,16341,16342,16344,16346],{"class":38,"line":54},[36,16343,7746],{"class":46},[36,16345,13763],{"class":79},[36,16347,4369],{"class":42},[36,16349,16350],{"class":38,"line":66},[36,16351,3963],{"class":42},[36,16353,16354,16356,16358,16361,16363],{"class":38,"line":73},[36,16355,8910],{"class":42},[36,16357,3594],{"class":46},[36,16359,16360],{"class":50}," \"func 的调用！\"",[36,16362,3861],{"class":46},[36,16364,11220],{"class":42},[36,16366,16367],{"class":38,"line":86},[36,16368,3982],{"class":42},[36,16370,16371,16373,16375,16377,16379,16381],{"class":38,"line":126},[36,16372,7746],{"class":46},[36,16374,13763],{"class":79},[36,16376,92],{"class":42},[36,16378,2570],{"class":46},[36,16380,3815],{"class":7598},[36,16382,123],{"class":42},[36,16384,16385],{"class":38,"line":131},[36,16386,3963],{"class":42},[36,16388,16389,16391,16393,16396,16398],{"class":38,"line":225},[36,16390,8910],{"class":42},[36,16392,3594],{"class":46},[36,16394,16395],{"class":50}," \"func (int a) 的调用！\"",[36,16397,3861],{"class":46},[36,16399,11220],{"class":42},[36,16401,16402],{"class":38,"line":235},[36,16403,3982],{"class":42},[36,16405,16406,16408,16410,16412,16415,16417],{"class":38,"line":377},[36,16407,7746],{"class":46},[36,16409,13763],{"class":79},[36,16411,92],{"class":42},[36,16413,16414],{"class":46},"double",[36,16416,3815],{"class":7598},[36,16418,123],{"class":42},[36,16420,16421],{"class":38,"line":617},[36,16422,3963],{"class":42},[36,16424,16425,16427,16429,16432,16434],{"class":38,"line":643},[36,16426,8910],{"class":42},[36,16428,3594],{"class":46},[36,16430,16431],{"class":50}," \"func (double a)的调用！\"",[36,16433,3861],{"class":46},[36,16435,11220],{"class":42},[36,16437,16438],{"class":38,"line":921},[36,16439,3982],{"class":42},[36,16441,16442,16444,16446,16448,16450,16452,16455,16457,16459],{"class":38,"line":934},[36,16443,7746],{"class":46},[36,16445,13763],{"class":79},[36,16447,92],{"class":42},[36,16449,2570],{"class":46},[36,16451,3815],{"class":7598},[36,16453,16454],{"class":42}," ,",[36,16456,16414],{"class":46},[36,16458,5218],{"class":7598},[36,16460,123],{"class":42},[36,16462,16463],{"class":38,"line":939},[36,16464,3963],{"class":42},[36,16466,16467,16469,16471,16474,16476],{"class":38,"line":949},[36,16468,8910],{"class":42},[36,16470,3594],{"class":46},[36,16472,16473],{"class":50}," \"func (int a ,double b) 的调用！\"",[36,16475,3861],{"class":46},[36,16477,11220],{"class":42},[36,16479,16480],{"class":38,"line":962},[36,16481,3982],{"class":42},[36,16483,16484,16486,16488,16490,16492,16494,16496,16498,16500],{"class":38,"line":974},[36,16485,7746],{"class":46},[36,16487,13763],{"class":79},[36,16489,92],{"class":42},[36,16491,16414],{"class":46},[36,16493,3815],{"class":7598},[36,16495,16454],{"class":42},[36,16497,2570],{"class":46},[36,16499,5218],{"class":7598},[36,16501,123],{"class":42},[36,16503,16504],{"class":38,"line":979},[36,16505,3963],{"class":42},[36,16507,16508,16510,16512,16515,16517],{"class":38,"line":994},[36,16509,8910],{"class":42},[36,16511,3594],{"class":46},[36,16513,16514],{"class":50}," \"func (double a ,int b)的调用！\"",[36,16516,3861],{"class":46},[36,16518,11220],{"class":42},[36,16520,16521],{"class":38,"line":1006},[36,16522,3982],{"class":42},[36,16524,16525],{"class":38,"line":1011},[36,16526,70],{"emptyLinePlaceholder":69},[36,16528,16529],{"class":38,"line":1023},[36,16530,16531],{"class":2621},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,16533,16534],{"class":38,"line":1028},[36,16535,16536],{"class":2621},"\u002F\u002Fint func(double a, int b)\n",[36,16538,16539],{"class":38,"line":1033},[36,16540,16541],{"class":2621},"\u002F\u002F{\n",[36,16543,16544],{"class":38,"line":1053},[36,16545,16546],{"class":2621},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,16548,16549],{"class":38,"line":1064},[36,16550,16551],{"class":2621},"\u002F\u002F}\n",[36,16553,16554],{"class":38,"line":1075},[36,16555,70],{"emptyLinePlaceholder":69},[36,16557,16558],{"class":38,"line":2291},[36,16559,70],{"emptyLinePlaceholder":69},[36,16561,16562,16564,16566],{"class":38,"line":2329},[36,16563,2570],{"class":46},[36,16565,4366],{"class":79},[36,16567,13232],{"class":42},[36,16569,16570],{"class":38,"line":2334},[36,16571,70],{"emptyLinePlaceholder":69},[36,16573,16574,16576],{"class":38,"line":2339},[36,16575,15662],{"class":79},[36,16577,8018],{"class":42},[36,16579,16580,16582,16584,16586],{"class":38,"line":2365},[36,16581,15662],{"class":79},[36,16583,92],{"class":42},[36,16585,3002],{"class":62},[36,16587,5104],{"class":42},[36,16589,16590,16592,16594,16596],{"class":38,"line":2373},[36,16591,15662],{"class":79},[36,16593,92],{"class":42},[36,16595,2613],{"class":62},[36,16597,5104],{"class":42},[36,16599,16600,16602,16604,16606,16608,16610],{"class":38,"line":5001},[36,16601,15662],{"class":79},[36,16603,92],{"class":42},[36,16605,3002],{"class":62},[36,16607,2934],{"class":42},[36,16609,2613],{"class":62},[36,16611,5104],{"class":42},[36,16613,16614,16616,16618,16620,16623,16625],{"class":38,"line":5006},[36,16615,15662],{"class":79},[36,16617,92],{"class":42},[36,16619,2613],{"class":62},[36,16621,16622],{"class":42}," , ",[36,16624,3002],{"class":62},[36,16626,5104],{"class":42},[36,16628,16629],{"class":38,"line":10328},[36,16630,15587],{"class":42},[36,16632,16633,16635,16637,16639],{"class":38,"line":10352},[36,16634,4696],{"class":79},[36,16636,92],{"class":42},[36,16638,4701],{"class":50},[36,16640,5104],{"class":42},[36,16642,16643],{"class":38,"line":10357},[36,16644,70],{"emptyLinePlaceholder":69},[36,16646,16647,16649,16651],{"class":38,"line":10363},[36,16648,6474],{"class":46},[36,16650,899],{"class":62},[36,16652,3711],{"class":42},[36,16654,16655],{"class":38,"line":10390},[36,16656,3982],{"class":42},[19,16658,16659],{},"重点：函数返回值不可以作为函数重载条件！",[1752,16661,16663],{"id":16662},"_732注意事项","7.3.2注意事项",[3557,16665,16666,16669],{},[653,16667,16668],{},"引用作为重载条件!!!",[653,16670,16671],{},"函数重载碰到函数默认参数",[26,16673,16675],{"className":2556,"code":16674,"language":2558,"meta":31,"style":31},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,16676,16677,16682,16687,16691,16707,16711,16724,16728,16732,16750,16754,16767,16771,16775,16779,16784,16788,16812,16816,16829,16833,16837,16851,16855,16868,16872,16876,16884,16888,16900,16910,16923,16927,16931,16939,16943,16953,16957,16965],{"__ignoreMap":31},[36,16678,16679],{"class":38,"line":39},[36,16680,16681],{"class":2621},"\u002F\u002F函数重载注意事项\n",[36,16683,16684],{"class":38,"line":54},[36,16685,16686],{"class":2621},"\u002F\u002F1、引用作为重载条件\n",[36,16688,16689],{"class":38,"line":66},[36,16690,70],{"emptyLinePlaceholder":69},[36,16692,16693,16695,16697,16699,16701,16703,16705],{"class":38,"line":73},[36,16694,7746],{"class":46},[36,16696,13763],{"class":79},[36,16698,92],{"class":42},[36,16700,2570],{"class":46},[36,16702,12963],{"class":46},[36,16704,2796],{"class":7598},[36,16706,123],{"class":42},[36,16708,16709],{"class":38,"line":86},[36,16710,3963],{"class":42},[36,16712,16713,16715,16717,16720,16722],{"class":38,"line":126},[36,16714,8910],{"class":42},[36,16716,3594],{"class":46},[36,16718,16719],{"class":50}," \"func (int &a) 调用 \"",[36,16721,3861],{"class":46},[36,16723,11220],{"class":42},[36,16725,16726],{"class":38,"line":131},[36,16727,3982],{"class":42},[36,16729,16730],{"class":38,"line":225},[36,16731,70],{"emptyLinePlaceholder":69},[36,16733,16734,16736,16738,16740,16742,16744,16746,16748],{"class":38,"line":235},[36,16735,7746],{"class":46},[36,16737,13763],{"class":79},[36,16739,92],{"class":42},[36,16741,9173],{"class":46},[36,16743,4775],{"class":46},[36,16745,12963],{"class":46},[36,16747,2796],{"class":7598},[36,16749,123],{"class":42},[36,16751,16752],{"class":38,"line":377},[36,16753,3963],{"class":42},[36,16755,16756,16758,16760,16763,16765],{"class":38,"line":617},[36,16757,8910],{"class":42},[36,16759,3594],{"class":46},[36,16761,16762],{"class":50}," \"func (const int &a) 调用 \"",[36,16764,3861],{"class":46},[36,16766,11220],{"class":42},[36,16768,16769],{"class":38,"line":643},[36,16770,3982],{"class":42},[36,16772,16773],{"class":38,"line":921},[36,16774,70],{"emptyLinePlaceholder":69},[36,16776,16777],{"class":38,"line":934},[36,16778,70],{"emptyLinePlaceholder":69},[36,16780,16781],{"class":38,"line":939},[36,16782,16783],{"class":2621},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,16785,16786],{"class":38,"line":949},[36,16787,70],{"emptyLinePlaceholder":69},[36,16789,16790,16792,16794,16796,16798,16800,16802,16804,16806,16808,16810],{"class":38,"line":962},[36,16791,7746],{"class":46},[36,16793,15995],{"class":79},[36,16795,92],{"class":42},[36,16797,2570],{"class":46},[36,16799,3815],{"class":7598},[36,16801,630],{"class":42},[36,16803,2570],{"class":46},[36,16805,5218],{"class":7598},[36,16807,15941],{"class":46},[36,16809,4431],{"class":62},[36,16811,123],{"class":42},[36,16813,16814],{"class":38,"line":974},[36,16815,3963],{"class":42},[36,16817,16818,16820,16822,16825,16827],{"class":38,"line":979},[36,16819,8910],{"class":42},[36,16821,3594],{"class":46},[36,16823,16824],{"class":50}," \"func2(int a, int b = 10) 调用\"",[36,16826,3861],{"class":46},[36,16828,11220],{"class":42},[36,16830,16831],{"class":38,"line":994},[36,16832,3982],{"class":42},[36,16834,16835],{"class":38,"line":1006},[36,16836,70],{"emptyLinePlaceholder":69},[36,16838,16839,16841,16843,16845,16847,16849],{"class":38,"line":1011},[36,16840,7746],{"class":46},[36,16842,15995],{"class":79},[36,16844,92],{"class":42},[36,16846,2570],{"class":46},[36,16848,3815],{"class":7598},[36,16850,123],{"class":42},[36,16852,16853],{"class":38,"line":1023},[36,16854,3963],{"class":42},[36,16856,16857,16859,16861,16864,16866],{"class":38,"line":1028},[36,16858,8910],{"class":42},[36,16860,3594],{"class":46},[36,16862,16863],{"class":50}," \"func2(int a) 调用\"",[36,16865,3861],{"class":46},[36,16867,11220],{"class":42},[36,16869,16870],{"class":38,"line":1033},[36,16871,3982],{"class":42},[36,16873,16874],{"class":38,"line":1053},[36,16875,70],{"emptyLinePlaceholder":69},[36,16877,16878,16880,16882],{"class":38,"line":1064},[36,16879,2570],{"class":46},[36,16881,4366],{"class":79},[36,16883,13232],{"class":42},[36,16885,16886],{"class":38,"line":1075},[36,16887,15587],{"class":42},[36,16889,16890,16892,16894,16896,16898],{"class":38,"line":2291},[36,16891,4378],{"class":46},[36,16893,1882],{"class":42},[36,16895,47],{"class":46},[36,16897,4431],{"class":62},[36,16899,3711],{"class":42},[36,16901,16902,16904,16907],{"class":38,"line":2329},[36,16903,15662],{"class":79},[36,16905,16906],{"class":42},"(a);",[36,16908,16909],{"class":2621}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,16911,16912,16914,16916,16918,16920],{"class":38,"line":2334},[36,16913,15662],{"class":79},[36,16915,92],{"class":42},[36,16917,3002],{"class":62},[36,16919,8348],{"class":42},[36,16921,16922],{"class":2621},"\u002F\u002F调用有const   10是个常量\n",[36,16924,16925],{"class":38,"line":2339},[36,16926,70],{"emptyLinePlaceholder":69},[36,16928,16929],{"class":38,"line":2365},[36,16930,70],{"emptyLinePlaceholder":69},[36,16932,16933,16936],{"class":38,"line":2373},[36,16934,16935],{"class":2621},"    \u002F\u002Ffunc2(10);",[36,16937,16938],{"class":2621}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,16940,16941],{"class":38,"line":5001},[36,16942,70],{"emptyLinePlaceholder":69},[36,16944,16945,16947,16949,16951],{"class":38,"line":5006},[36,16946,4696],{"class":79},[36,16948,92],{"class":42},[36,16950,4701],{"class":50},[36,16952,5104],{"class":42},[36,16954,16955],{"class":38,"line":10328},[36,16956,70],{"emptyLinePlaceholder":69},[36,16958,16959,16961,16963],{"class":38,"line":10352},[36,16960,6474],{"class":46},[36,16962,899],{"class":62},[36,16964,3711],{"class":42},[36,16966,16967],{"class":38,"line":10357},[36,16968,3982],{"class":42},[2467,16970,16971],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":16973},[16974,16975,16976],{"id":15906,"depth":54,"text":15907},{"id":16163,"depth":54,"text":16164},{"id":16285,"depth":54,"text":16286,"children":16977},[16978,16979],{"id":16292,"depth":66,"text":16293},{"id":16662,"depth":66,"text":16663},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15898,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16986,"title":16987,"body":16988,"description":25735,"extension":2494,"meta":25736,"navigation":69,"path":25737,"seo":25738,"stem":25739,"__hash__":25740},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16989,"toc":25716},[16990,16993,16999,17006,17011,17014,17017,17020,17024,17028,17031,17034,17042,17047,17050,17057,17062,17219,17222,17475,17478,17481,17484,17489,17492,17495,17506,17511,17747,17751,17761,17764,17772,17919,17923,17926,17929,17933,18376,18380,18388,18396,19308,19315,19320,19946,19949,19952,19955,20074,20077,20164,20167,20293,20296,20390,20393,20746,20750,20758,20762,20769,20772,20775,20786,20792,20797,20809,20817,20837,20845,20862,21048,21051,21055,21058,21061,21064,21067,21070,21073,21076,21535,21541,21545,21548,21559,22146,22149,22638,22642,22645,22648,22651,22654,22657,22665,23061,23065,23068,23071,23518,23521,23524,23529,23532,23537,23540,23544,23547,23549,23555,23558,23864,23874,23915,23919,23922,23924,23957,23960,24267,24269,24284,24287,24310,24319,24325,24328,24332,24335,24338,24343,24354,24359,24367,24372,24502,24505,24508,24683,24688,24900,24904,24907,25021,25026,25265,25269,25273,25276,25279,25284,25389,25392,25395,25398,25402,25513,25516,25519,25524,25576,25579,25582,25587,25633,25636,25641,25709,25711,25714],[10,16991,16987],{"id":16992},"_8类和对象",[19,16994,16995,16996],{},"C++面向对象的三大特性为",[667,16997,16998],{},"封装、继承、多态",[19,17000,17001,17002,17005],{},"C++认为",[667,17003,17004],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17007,17008],{},[667,17009,17010],{},"例如：",[19,17012,17013],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17015,17016],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17018,17019],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17021,17023],{"id":17022},"_81封装","8.1封装",[1752,17025,17027],{"id":17026},"_811封装的意义","8.1.1封装的意义",[19,17029,17030],{},"封装是C++面向对象三大特性之一",[19,17032,17033],{},"封装的意义：",[3557,17035,17036,17039],{},[653,17037,17038],{},"将属性和行为作为一个整体，表现生活中的事物",[653,17040,17041],{},"将属性和行为加以权限控制",[19,17043,17044],{},[667,17045,17046],{},"封装意义一：",[19,17048,17049],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17051,17052,16172,17054],{},[667,17053,7564],{},[33,17055,17056],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[650,17058,17059],{},[653,17060,17061],{},"**示例1：**设计一个圆类，求圆的周长",[26,17063,17065],{"className":2556,"code":17064,"language":2558,"meta":31,"style":31},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[33,17066,17067,17074,17078,17083,17088,17093,17098,17105,17110,17120,17124,17141,17145,17149,17157,17161,17166,17171,17176,17181,17192,17215],{"__ignoreMap":31},[36,17068,17069,17071],{"class":38,"line":39},[36,17070,147],{"class":46},[36,17072,17073],{"class":79}," Circle\n",[36,17075,17076],{"class":38,"line":54},[36,17077,3963],{"class":42},[36,17079,17080],{"class":38,"line":66},[36,17081,17082],{"class":2621},"    \u002F\u002F访问权限\n",[36,17084,17085],{"class":38,"line":73},[36,17086,17087],{"class":2621},"    \u002F\u002F公共权限\n",[36,17089,17090],{"class":38,"line":86},[36,17091,17092],{"class":46},"public:\n",[36,17094,17095],{"class":38,"line":126},[36,17096,17097],{"class":2621},"    \u002F\u002F属性\n",[36,17099,17100,17102],{"class":38,"line":131},[36,17101,4378],{"class":46},[36,17103,17104],{"class":42}," m_r;\n",[36,17106,17107],{"class":38,"line":225},[36,17108,17109],{"class":2621},"    \u002F\u002F行为\n",[36,17111,17112,17115,17118],{"class":38,"line":235},[36,17113,17114],{"class":46},"    double",[36,17116,17117],{"class":79}," calculateZC",[36,17119,4369],{"class":42},[36,17121,17122],{"class":38,"line":377},[36,17123,4423],{"class":42},[36,17125,17126,17128,17131,17133,17136,17138],{"class":38,"line":617},[36,17127,736],{"class":46},[36,17129,17130],{"class":62}," 2",[36,17132,3011],{"class":46},[36,17134,17135],{"class":42},"PI",[36,17137,3011],{"class":46},[36,17139,17140],{"class":42},"m_r;\n",[36,17142,17143],{"class":38,"line":643},[36,17144,4580],{"class":42},[36,17146,17147],{"class":38,"line":921},[36,17148,6379],{"class":42},[36,17150,17151,17153,17155],{"class":38,"line":934},[36,17152,2570],{"class":46},[36,17154,4366],{"class":79},[36,17156,4369],{"class":42},[36,17158,17159],{"class":38,"line":939},[36,17160,3963],{"class":42},[36,17162,17163],{"class":38,"line":949},[36,17164,17165],{"class":2621},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,17167,17168],{"class":38,"line":962},[36,17169,17170],{"class":2621},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,17172,17173],{"class":38,"line":974},[36,17174,17175],{"class":42},"    Circle c1;\n",[36,17177,17178],{"class":38,"line":979},[36,17179,17180],{"class":2621},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,17182,17183,17186,17188,17190],{"class":38,"line":994},[36,17184,17185],{"class":42},"    c1.m_r",[36,17187,47],{"class":46},[36,17189,3002],{"class":62},[36,17191,3711],{"class":42},[36,17193,17194,17196,17198,17201,17203,17206,17209,17211,17213],{"class":38,"line":1006},[36,17195,3968],{"class":42},[36,17197,3594],{"class":46},[36,17199,17200],{"class":50},"\"圆的周长\"",[36,17202,3594],{"class":46},[36,17204,17205],{"class":42},"c1.",[36,17207,17208],{"class":79},"calculateZC",[36,17210,4819],{"class":42},[36,17212,3594],{"class":46},[36,17214,3616],{"class":42},[36,17216,17217],{"class":38,"line":1011},[36,17218,3982],{"class":42},[19,17220,17221],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,17223,17225],{"className":2556,"code":17224,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[33,17226,17227,17233,17243,17249,17255,17259,17263,17268,17275,17280,17298,17302,17312,17316,17321,17337,17341,17351,17355,17360,17368,17372,17404,17408,17412,17420,17424,17429,17434,17448,17462,17471],{"__ignoreMap":31},[36,17228,17229,17231],{"class":38,"line":39},[36,17230,4343],{"class":46},[36,17232,4346],{"class":50},[36,17234,17235,17237,17239,17241],{"class":38,"line":54},[36,17236,4351],{"class":46},[36,17238,4354],{"class":46},[36,17240,4357],{"class":79},[36,17242,3711],{"class":42},[36,17244,17245,17247],{"class":38,"line":66},[36,17246,4343],{"class":46},[36,17248,10130],{"class":50},[36,17250,17251,17253],{"class":38,"line":73},[36,17252,147],{"class":46},[36,17254,10143],{"class":79},[36,17256,17257],{"class":38,"line":86},[36,17258,3963],{"class":42},[36,17260,17261],{"class":38,"line":126},[36,17262,17092],{"class":46},[36,17264,17265],{"class":38,"line":131},[36,17266,17267],{"class":42},"    string m_name;\n",[36,17269,17270,17272],{"class":38,"line":225},[36,17271,4378],{"class":46},[36,17273,17274],{"class":42}," m_id;\n",[36,17276,17277],{"class":38,"line":235},[36,17278,17279],{"class":2621},"    \u002F\u002F赋值姓名\n",[36,17281,17282,17285,17288,17290,17293,17296],{"class":38,"line":377},[36,17283,17284],{"class":46},"    void",[36,17286,17287],{"class":79}," setName",[36,17289,92],{"class":42},[36,17291,17292],{"class":79},"string",[36,17294,17295],{"class":7598}," name",[36,17297,123],{"class":42},[36,17299,17300],{"class":38,"line":617},[36,17301,4423],{"class":42},[36,17303,17304,17307,17309],{"class":38,"line":643},[36,17305,17306],{"class":42},"        m_name",[36,17308,47],{"class":46},[36,17310,17311],{"class":42},"name;\n",[36,17313,17314],{"class":38,"line":921},[36,17315,4580],{"class":42},[36,17317,17318],{"class":38,"line":934},[36,17319,17320],{"class":2621},"    \u002F\u002F赋值学号\n",[36,17322,17323,17325,17328,17330,17332,17335],{"class":38,"line":939},[36,17324,17284],{"class":46},[36,17326,17327],{"class":79}," setId",[36,17329,92],{"class":42},[36,17331,2570],{"class":46},[36,17333,17334],{"class":7598}," id",[36,17336,123],{"class":42},[36,17338,17339],{"class":38,"line":949},[36,17340,4423],{"class":42},[36,17342,17343,17346,17348],{"class":38,"line":962},[36,17344,17345],{"class":42},"        m_id",[36,17347,47],{"class":46},[36,17349,17350],{"class":42},"id;\n",[36,17352,17353],{"class":38,"line":974},[36,17354,4580],{"class":42},[36,17356,17357],{"class":38,"line":979},[36,17358,17359],{"class":2621},"    \u002F\u002F打印学生信息\n",[36,17361,17362,17364,17366],{"class":38,"line":994},[36,17363,17284],{"class":46},[36,17365,11994],{"class":79},[36,17367,4369],{"class":42},[36,17369,17370],{"class":38,"line":1006},[36,17371,4423],{"class":42},[36,17373,17374,17376,17378,17381,17383,17386,17388,17390,17392,17395,17397,17400,17402],{"class":38,"line":1011},[36,17375,5836],{"class":42},[36,17377,3594],{"class":46},[36,17379,17380],{"class":50},"\"姓名：\"",[36,17382,3594],{"class":46},[36,17384,17385],{"class":42},"m_name",[36,17387,3594],{"class":46},[36,17389,6742],{"class":50},[36,17391,3594],{"class":46},[36,17393,17394],{"class":50},"\"学号：\"",[36,17396,3594],{"class":46},[36,17398,17399],{"class":42},"m_id",[36,17401,3594],{"class":46},[36,17403,3616],{"class":42},[36,17405,17406],{"class":38,"line":1023},[36,17407,4580],{"class":42},[36,17409,17410],{"class":38,"line":1028},[36,17411,6379],{"class":42},[36,17413,17414,17416,17418],{"class":38,"line":1033},[36,17415,2570],{"class":46},[36,17417,4366],{"class":79},[36,17419,4369],{"class":42},[36,17421,17422],{"class":38,"line":1053},[36,17423,3963],{"class":42},[36,17425,17426],{"class":38,"line":1064},[36,17427,17428],{"class":2621},"    \u002F\u002F实例化\n",[36,17430,17431],{"class":38,"line":1075},[36,17432,17433],{"class":42},"    Student s1;\n",[36,17435,17436,17439,17442,17444,17446],{"class":38,"line":2291},[36,17437,17438],{"class":42},"    s1.",[36,17440,17441],{"class":79},"setName",[36,17443,92],{"class":42},[36,17445,10296],{"class":50},[36,17447,5104],{"class":42},[36,17449,17450,17452,17455,17457,17460],{"class":38,"line":2329},[36,17451,17438],{"class":42},[36,17453,17454],{"class":79},"setId",[36,17456,92],{"class":42},[36,17458,17459],{"class":62},"123456",[36,17461,5104],{"class":42},[36,17463,17464,17466,17469],{"class":38,"line":2334},[36,17465,17438],{"class":42},[36,17467,17468],{"class":79},"printInfo",[36,17470,8018],{"class":42},[36,17472,17473],{"class":38,"line":2339},[36,17474,3982],{"class":42},[19,17476,17477],{},"类中的属性和行为统称为成员",[19,17479,17480],{},"属性：成员属性(成员变量)",[19,17482,17483],{},"方法：成员函数(成员方法)",[19,17485,17486],{},[667,17487,17488],{},"封装意义二：",[19,17490,17491],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17493,17494],{},"访问权限有三种：",[650,17496,17497,17500,17503],{},[653,17498,17499],{},"public        公共权限",[653,17501,17502],{},"protected 保护权限",[653,17504,17505],{},"private      私有权限",[19,17507,17508],{},[667,17509,17510],{},"示例：",[26,17512,17514],{"className":12320,"code":17513,"language":12322,"meta":31,"style":31},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,17515,17516,17521,17526,17531,17536,17540,17547,17551,17556,17560,17565,17569,17574,17579,17584,17588,17593,17598,17605,17609,17613,17621,17625,17636,17648,17660,17664,17668,17672,17680,17684,17689,17701,17709,17717,17721,17731,17735,17743],{"__ignoreMap":31},[36,17517,17518],{"class":38,"line":39},[36,17519,17520],{"class":2621},"\u002F\u002F三种权限\n",[36,17522,17523],{"class":38,"line":54},[36,17524,17525],{"class":2621},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,17527,17528],{"class":38,"line":66},[36,17529,17530],{"class":2621},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,17532,17533],{"class":38,"line":73},[36,17534,17535],{"class":2621},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,17537,17538],{"class":38,"line":86},[36,17539,70],{"emptyLinePlaceholder":69},[36,17541,17542,17544],{"class":38,"line":126},[36,17543,147],{"class":46},[36,17545,17546],{"class":79}," Person\n",[36,17548,17549],{"class":38,"line":131},[36,17550,3963],{"class":42},[36,17552,17553],{"class":38,"line":225},[36,17554,17555],{"class":2621},"    \u002F\u002F姓名  公共权限\n",[36,17557,17558],{"class":38,"line":235},[36,17559,17092],{"class":46},[36,17561,17562],{"class":38,"line":377},[36,17563,17564],{"class":42},"    string m_Name;\n",[36,17566,17567],{"class":38,"line":617},[36,17568,70],{"emptyLinePlaceholder":69},[36,17570,17571],{"class":38,"line":643},[36,17572,17573],{"class":2621},"    \u002F\u002F汽车  保护权限\n",[36,17575,17576],{"class":38,"line":921},[36,17577,17578],{"class":46},"protected:\n",[36,17580,17581],{"class":38,"line":934},[36,17582,17583],{"class":42},"    string m_Car;\n",[36,17585,17586],{"class":38,"line":939},[36,17587,70],{"emptyLinePlaceholder":69},[36,17589,17590],{"class":38,"line":949},[36,17591,17592],{"class":2621},"    \u002F\u002F银行卡密码  私有权限\n",[36,17594,17595],{"class":38,"line":962},[36,17596,17597],{"class":46},"private:\n",[36,17599,17600,17602],{"class":38,"line":974},[36,17601,4378],{"class":46},[36,17603,17604],{"class":42}," m_Password;\n",[36,17606,17607],{"class":38,"line":979},[36,17608,70],{"emptyLinePlaceholder":69},[36,17610,17611],{"class":38,"line":994},[36,17612,17092],{"class":46},[36,17614,17615,17617,17619],{"class":38,"line":1006},[36,17616,17284],{"class":46},[36,17618,13763],{"class":79},[36,17620,4369],{"class":42},[36,17622,17623],{"class":38,"line":1011},[36,17624,4423],{"class":42},[36,17626,17627,17630,17632,17634],{"class":38,"line":1023},[36,17628,17629],{"class":42},"        m_Name ",[36,17631,47],{"class":46},[36,17633,11318],{"class":50},[36,17635,3711],{"class":42},[36,17637,17638,17641,17643,17646],{"class":38,"line":1028},[36,17639,17640],{"class":42},"        m_Car ",[36,17642,47],{"class":46},[36,17644,17645],{"class":50}," \"拖拉机\"",[36,17647,3711],{"class":42},[36,17649,17650,17653,17655,17658],{"class":38,"line":1033},[36,17651,17652],{"class":42},"        m_Password ",[36,17654,47],{"class":46},[36,17656,17657],{"class":62}," 123456",[36,17659,3711],{"class":42},[36,17661,17662],{"class":38,"line":1053},[36,17663,4580],{"class":42},[36,17665,17666],{"class":38,"line":1064},[36,17667,6379],{"class":42},[36,17669,17670],{"class":38,"line":1075},[36,17671,70],{"emptyLinePlaceholder":69},[36,17673,17674,17676,17678],{"class":38,"line":2291},[36,17675,2570],{"class":46},[36,17677,4366],{"class":79},[36,17679,13232],{"class":42},[36,17681,17682],{"class":38,"line":2329},[36,17683,70],{"emptyLinePlaceholder":69},[36,17685,17686],{"class":38,"line":2334},[36,17687,17688],{"class":42},"    Person p;\n",[36,17690,17691,17694,17696,17699],{"class":38,"line":2339},[36,17692,17693],{"class":42},"    p.m_Name ",[36,17695,47],{"class":46},[36,17697,17698],{"class":50}," \"李四\"",[36,17700,3711],{"class":42},[36,17702,17703,17706],{"class":38,"line":2365},[36,17704,17705],{"class":2621},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,17707,17708],{"class":2621},"  \u002F\u002F保护权限类外访问不到\n",[36,17710,17711,17714],{"class":38,"line":2373},[36,17712,17713],{"class":2621},"    \u002F\u002Fp.m_Password = 123;",[36,17715,17716],{"class":2621}," \u002F\u002F私有权限类外访问不到\n",[36,17718,17719],{"class":38,"line":5001},[36,17720,70],{"emptyLinePlaceholder":69},[36,17722,17723,17725,17727,17729],{"class":38,"line":5006},[36,17724,4696],{"class":79},[36,17726,92],{"class":42},[36,17728,4701],{"class":50},[36,17730,5104],{"class":42},[36,17732,17733],{"class":38,"line":10328},[36,17734,70],{"emptyLinePlaceholder":69},[36,17736,17737,17739,17741],{"class":38,"line":10352},[36,17738,6474],{"class":46},[36,17740,899],{"class":62},[36,17742,3711],{"class":42},[36,17744,17745],{"class":38,"line":10357},[36,17746,3982],{"class":42},[1752,17748,17750],{"id":17749},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17752,17753,17754,17757,17758],{},"在C++中 struct和class唯一的",[667,17755,17756],{},"区别","就在于 ",[667,17759,17760],{},"默认的访问权限不同",[19,17762,17763],{},"区别：",[3557,17765,17766,17769],{},[653,17767,17768],{},"struct 默认权限为公共",[653,17770,17771],{},"class   默认权限为私有",[26,17773,17775],{"className":12320,"code":17774,"language":12322,"meta":31,"style":31},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,17776,17777,17784,17788,17798,17802,17806,17813,17817,17827,17831,17835,17843,17847,17852,17866,17870,17875,17889,17893,17903,17907,17915],{"__ignoreMap":31},[36,17778,17779,17781],{"class":38,"line":39},[36,17780,147],{"class":46},[36,17782,17783],{"class":79}," C1\n",[36,17785,17786],{"class":38,"line":54},[36,17787,3963],{"class":42},[36,17789,17790,17792,17795],{"class":38,"line":66},[36,17791,4378],{"class":46},[36,17793,17794],{"class":42},"  m_A;",[36,17796,17797],{"class":2621}," \u002F\u002F默认是私有权限\n",[36,17799,17800],{"class":38,"line":73},[36,17801,6379],{"class":42},[36,17803,17804],{"class":38,"line":86},[36,17805,70],{"emptyLinePlaceholder":69},[36,17807,17808,17810],{"class":38,"line":126},[36,17809,10140],{"class":46},[36,17811,17812],{"class":79}," C2\n",[36,17814,17815],{"class":38,"line":131},[36,17816,3963],{"class":42},[36,17818,17819,17821,17824],{"class":38,"line":225},[36,17820,4378],{"class":46},[36,17822,17823],{"class":42}," m_A;",[36,17825,17826],{"class":2621},"  \u002F\u002F默认是公共权限\n",[36,17828,17829],{"class":38,"line":235},[36,17830,6379],{"class":42},[36,17832,17833],{"class":38,"line":377},[36,17834,70],{"emptyLinePlaceholder":69},[36,17836,17837,17839,17841],{"class":38,"line":617},[36,17838,2570],{"class":46},[36,17840,4366],{"class":79},[36,17842,13232],{"class":42},[36,17844,17845],{"class":38,"line":643},[36,17846,70],{"emptyLinePlaceholder":69},[36,17848,17849],{"class":38,"line":921},[36,17850,17851],{"class":42},"    C1 c1;\n",[36,17853,17854,17857,17859,17861,17863],{"class":38,"line":934},[36,17855,17856],{"class":42},"    c1.m_A ",[36,17858,47],{"class":46},[36,17860,4431],{"class":62},[36,17862,2618],{"class":42},[36,17864,17865],{"class":2621}," \u002F\u002F错误，访问权限是私有\n",[36,17867,17868],{"class":38,"line":939},[36,17869,70],{"emptyLinePlaceholder":69},[36,17871,17872],{"class":38,"line":949},[36,17873,17874],{"class":42},"    C2 c2;\n",[36,17876,17877,17880,17882,17884,17886],{"class":38,"line":962},[36,17878,17879],{"class":42},"    c2.m_A ",[36,17881,47],{"class":46},[36,17883,4431],{"class":62},[36,17885,2618],{"class":42},[36,17887,17888],{"class":2621}," \u002F\u002F正确，访问权限是公共\n",[36,17890,17891],{"class":38,"line":974},[36,17892,70],{"emptyLinePlaceholder":69},[36,17894,17895,17897,17899,17901],{"class":38,"line":979},[36,17896,4696],{"class":79},[36,17898,92],{"class":42},[36,17900,4701],{"class":50},[36,17902,5104],{"class":42},[36,17904,17905],{"class":38,"line":994},[36,17906,70],{"emptyLinePlaceholder":69},[36,17908,17909,17911,17913],{"class":38,"line":1006},[36,17910,6474],{"class":46},[36,17912,899],{"class":62},[36,17914,3711],{"class":42},[36,17916,17917],{"class":38,"line":1011},[36,17918,3982],{"class":42},[1752,17920,17922],{"id":17921},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17924,17925],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17927,17928],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17930,17931],{},[667,17932,17510],{},[26,17934,17936],{"className":12320,"code":17935,"language":12322,"meta":31,"style":31},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,17937,17938,17946,17950,17954,17959,17973,17982,17986,17996,18000,18007,18011,18015,18019,18024,18033,18040,18044,18049,18065,18088,18101,18108,18112,18121,18125,18129,18134,18150,18160,18164,18168,18172,18180,18184,18194,18198,18206,18210,18214,18222,18226,18230,18235,18248,18271,18275,18280,18293,18315,18319,18324,18338,18346,18350,18360,18364,18372],{"__ignoreMap":31},[36,17939,17940,17942,17944],{"class":38,"line":39},[36,17941,147],{"class":46},[36,17943,1376],{"class":79},[36,17945,2150],{"class":42},[36,17947,17948],{"class":38,"line":54},[36,17949,17092],{"class":46},[36,17951,17952],{"class":38,"line":66},[36,17953,70],{"emptyLinePlaceholder":69},[36,17955,17956],{"class":38,"line":73},[36,17957,17958],{"class":2621},"    \u002F\u002F姓名设置可读可写\n",[36,17960,17961,17963,17965,17967,17969,17971],{"class":38,"line":86},[36,17962,17284],{"class":46},[36,17964,17287],{"class":79},[36,17966,92],{"class":42},[36,17968,17292],{"class":79},[36,17970,17295],{"class":7598},[36,17972,14819],{"class":42},[36,17974,17975,17977,17979],{"class":38,"line":126},[36,17976,17629],{"class":42},[36,17978,47],{"class":46},[36,17980,17981],{"class":42}," name;\n",[36,17983,17984],{"class":38,"line":131},[36,17985,4580],{"class":42},[36,17987,17988,17991,17994],{"class":38,"line":225},[36,17989,17990],{"class":79},"    string",[36,17992,17993],{"class":79}," getName",[36,17995,4369],{"class":42},[36,17997,17998],{"class":38,"line":235},[36,17999,4423],{"class":42},[36,18001,18002,18004],{"class":38,"line":377},[36,18003,736],{"class":46},[36,18005,18006],{"class":42}," m_Name;\n",[36,18008,18009],{"class":38,"line":617},[36,18010,4580],{"class":42},[36,18012,18013],{"class":38,"line":643},[36,18014,70],{"emptyLinePlaceholder":69},[36,18016,18017],{"class":38,"line":921},[36,18018,70],{"emptyLinePlaceholder":69},[36,18020,18021],{"class":38,"line":934},[36,18022,18023],{"class":2621},"    \u002F\u002F获取年龄 \n",[36,18025,18026,18028,18031],{"class":38,"line":939},[36,18027,4378],{"class":46},[36,18029,18030],{"class":79}," getAge",[36,18032,13232],{"class":42},[36,18034,18035,18037],{"class":38,"line":949},[36,18036,736],{"class":46},[36,18038,18039],{"class":42}," m_Age;\n",[36,18041,18042],{"class":38,"line":962},[36,18043,4580],{"class":42},[36,18045,18046],{"class":38,"line":974},[36,18047,18048],{"class":2621},"    \u002F\u002F设置年龄\n",[36,18050,18051,18053,18056,18058,18060,18063],{"class":38,"line":979},[36,18052,17284],{"class":46},[36,18054,18055],{"class":79}," setAge",[36,18057,92],{"class":42},[36,18059,2570],{"class":46},[36,18061,18062],{"class":7598}," age",[36,18064,14819],{"class":42},[36,18066,18067,18069,18072,18074,18076,18078,18081,18083,18086],{"class":38,"line":994},[36,18068,890],{"class":46},[36,18070,18071],{"class":42}," (age ",[36,18073,3463],{"class":46},[36,18075,899],{"class":62},[36,18077,5640],{"class":46},[36,18079,18080],{"class":42}," age ",[36,18082,986],{"class":46},[36,18084,18085],{"class":62}," 150",[36,18087,14819],{"class":42},[36,18089,18090,18092,18094,18097,18099],{"class":38,"line":1006},[36,18091,12098],{"class":42},[36,18093,3594],{"class":46},[36,18095,18096],{"class":50}," \"你个老妖精!\"",[36,18098,3861],{"class":46},[36,18100,11220],{"class":42},[36,18102,18103,18106],{"class":38,"line":1011},[36,18104,18105],{"class":46},"            return",[36,18107,3711],{"class":42},[36,18109,18110],{"class":38,"line":1023},[36,18111,2204],{"class":42},[36,18113,18114,18117,18119],{"class":38,"line":1028},[36,18115,18116],{"class":42},"        m_Age ",[36,18118,47],{"class":46},[36,18120,10178],{"class":42},[36,18122,18123],{"class":38,"line":1033},[36,18124,4580],{"class":42},[36,18126,18127],{"class":38,"line":1053},[36,18128,70],{"emptyLinePlaceholder":69},[36,18130,18131],{"class":38,"line":1064},[36,18132,18133],{"class":2621},"    \u002F\u002F情人设置为只写\n",[36,18135,18136,18138,18141,18143,18145,18148],{"class":38,"line":1075},[36,18137,17284],{"class":46},[36,18139,18140],{"class":79}," setLover",[36,18142,92],{"class":42},[36,18144,17292],{"class":79},[36,18146,18147],{"class":7598}," lover",[36,18149,14819],{"class":42},[36,18151,18152,18155,18157],{"class":38,"line":2291},[36,18153,18154],{"class":42},"        m_Lover ",[36,18156,47],{"class":46},[36,18158,18159],{"class":42}," lover;\n",[36,18161,18162],{"class":38,"line":2329},[36,18163,4580],{"class":42},[36,18165,18166],{"class":38,"line":2334},[36,18167,70],{"emptyLinePlaceholder":69},[36,18169,18170],{"class":38,"line":2339},[36,18171,17597],{"class":46},[36,18173,18174,18177],{"class":38,"line":2365},[36,18175,18176],{"class":42},"    string m_Name;",[36,18178,18179],{"class":2621}," \u002F\u002F可读可写  姓名\n",[36,18181,18182],{"class":38,"line":2373},[36,18183,15587],{"class":42},[36,18185,18186,18188,18191],{"class":38,"line":5001},[36,18187,4378],{"class":46},[36,18189,18190],{"class":42}," m_Age;",[36,18192,18193],{"class":2621}," \u002F\u002F只读  年龄\n",[36,18195,18196],{"class":38,"line":5006},[36,18197,70],{"emptyLinePlaceholder":69},[36,18199,18200,18203],{"class":38,"line":10328},[36,18201,18202],{"class":42},"    string m_Lover;",[36,18204,18205],{"class":2621}," \u002F\u002F只写  情人\n",[36,18207,18208],{"class":38,"line":10352},[36,18209,6379],{"class":42},[36,18211,18212],{"class":38,"line":10357},[36,18213,70],{"emptyLinePlaceholder":69},[36,18215,18216,18218,18220],{"class":38,"line":10363},[36,18217,2570],{"class":46},[36,18219,4366],{"class":79},[36,18221,13232],{"class":42},[36,18223,18224],{"class":38,"line":10390},[36,18225,70],{"emptyLinePlaceholder":69},[36,18227,18228],{"class":38,"line":10395},[36,18229,17688],{"class":42},[36,18231,18232],{"class":38,"line":10401},[36,18233,18234],{"class":2621},"    \u002F\u002F姓名设置\n",[36,18236,18237,18240,18242,18244,18246],{"class":38,"line":10413},[36,18238,18239],{"class":42},"    p.",[36,18241,17441],{"class":79},[36,18243,92],{"class":42},[36,18245,10296],{"class":50},[36,18247,5104],{"class":42},[36,18249,18250,18252,18254,18257,18259,18262,18265,18267,18269],{"class":38,"line":10425},[36,18251,8910],{"class":42},[36,18253,3594],{"class":46},[36,18255,18256],{"class":50}," \"姓名： \"",[36,18258,3861],{"class":46},[36,18260,18261],{"class":42}," p.",[36,18263,18264],{"class":79},"getName",[36,18266,15427],{"class":42},[36,18268,3594],{"class":46},[36,18270,11220],{"class":42},[36,18272,18273],{"class":38,"line":10437},[36,18274,70],{"emptyLinePlaceholder":69},[36,18276,18277],{"class":38,"line":12095},[36,18278,18279],{"class":2621},"    \u002F\u002F年龄设置\n",[36,18281,18282,18284,18287,18289,18291],{"class":38,"line":12120},[36,18283,18239],{"class":42},[36,18285,18286],{"class":79},"setAge",[36,18288,92],{"class":42},[36,18290,3210],{"class":62},[36,18292,5104],{"class":42},[36,18294,18295,18297,18299,18302,18304,18306,18309,18311,18313],{"class":38,"line":12143},[36,18296,8910],{"class":42},[36,18298,3594],{"class":46},[36,18300,18301],{"class":50}," \"年龄： \"",[36,18303,3861],{"class":46},[36,18305,18261],{"class":42},[36,18307,18308],{"class":79},"getAge",[36,18310,15427],{"class":42},[36,18312,3594],{"class":46},[36,18314,11220],{"class":42},[36,18316,18317],{"class":38,"line":12167},[36,18318,70],{"emptyLinePlaceholder":69},[36,18320,18321],{"class":38,"line":12172},[36,18322,18323],{"class":2621},"    \u002F\u002F情人设置\n",[36,18325,18326,18328,18331,18333,18336],{"class":38,"line":12177},[36,18327,18239],{"class":42},[36,18329,18330],{"class":79},"setLover",[36,18332,92],{"class":42},[36,18334,18335],{"class":50},"\"苍井\"",[36,18337,5104],{"class":42},[36,18339,18340,18343],{"class":38,"line":12182},[36,18341,18342],{"class":2621},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,18344,18345],{"class":2621},"  \u002F\u002F只写属性，不可以读取\n",[36,18347,18348],{"class":38,"line":12191},[36,18349,70],{"emptyLinePlaceholder":69},[36,18351,18352,18354,18356,18358],{"class":38,"line":12196},[36,18353,4696],{"class":79},[36,18355,92],{"class":42},[36,18357,4701],{"class":50},[36,18359,5104],{"class":42},[36,18361,18362],{"class":38,"line":12202},[36,18363,70],{"emptyLinePlaceholder":69},[36,18365,18366,18368,18370],{"class":38,"line":12223},[36,18367,6474],{"class":46},[36,18369,899],{"class":62},[36,18371,3711],{"class":42},[36,18373,18374],{"class":38,"line":12229},[36,18375,3982],{"class":42},[1752,18377,18379],{"id":18378},"_814封装案例","8.1.4封装案例",[650,18381,18382],{},[653,18383,18384,18387],{},[667,18385,18386],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3557,18389,18390,18393],{},[653,18391,18392],{},"求出立方体的面积和体积",[653,18394,18395],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,18397,18399],{"className":2556,"code":18398,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[33,18400,18401,18407,18417,18424,18428,18432,18437,18467,18471,18481,18491,18501,18505,18514,18518,18554,18558,18567,18571,18587,18591,18596,18605,18609,18616,18620,18629,18633,18640,18644,18653,18657,18664,18668,18673,18690,18694,18740,18744,18753,18757,18761,18765,18774,18778,18782,18787,18791,18797,18803,18809,18813,18817,18822,18844,18848,18902,18906,18914,18918,18923,18928,18941,18948,18964,18975,18981,19004,19010,19033,19047,19067,19073,19084,19107,19129,19134,19140,19154,19167,19172,19186,19191,19197,19202,19216,19221,19226,19240,19252,19257,19270,19275,19280,19285,19298,19303],{"__ignoreMap":31},[36,18402,18403,18405],{"class":38,"line":39},[36,18404,4343],{"class":46},[36,18406,4346],{"class":50},[36,18408,18409,18411,18413,18415],{"class":38,"line":54},[36,18410,4351],{"class":46},[36,18412,4354],{"class":46},[36,18414,4357],{"class":79},[36,18416,3711],{"class":42},[36,18418,18419,18421],{"class":38,"line":66},[36,18420,147],{"class":46},[36,18422,18423],{"class":79}," Cube\n",[36,18425,18426],{"class":38,"line":73},[36,18427,3963],{"class":42},[36,18429,18430],{"class":38,"line":86},[36,18431,17092],{"class":46},[36,18433,18434],{"class":38,"line":126},[36,18435,18436],{"class":2621},"    \u002F\u002F输入长宽高\n",[36,18438,18439,18441,18444,18446,18448,18451,18453,18455,18458,18460,18462,18465],{"class":38,"line":131},[36,18440,17284],{"class":46},[36,18442,18443],{"class":79}," setLwh",[36,18445,92],{"class":42},[36,18447,2570],{"class":46},[36,18449,18450],{"class":7598}," l",[36,18452,2934],{"class":42},[36,18454,2570],{"class":46},[36,18456,18457],{"class":7598}," w",[36,18459,2934],{"class":42},[36,18461,2570],{"class":46},[36,18463,18464],{"class":7598}," h",[36,18466,123],{"class":42},[36,18468,18469],{"class":38,"line":225},[36,18470,4423],{"class":42},[36,18472,18473,18476,18478],{"class":38,"line":235},[36,18474,18475],{"class":42},"        m_L",[36,18477,47],{"class":46},[36,18479,18480],{"class":42},"l;\n",[36,18482,18483,18486,18488],{"class":38,"line":377},[36,18484,18485],{"class":42},"        m_W",[36,18487,47],{"class":46},[36,18489,18490],{"class":42},"w;\n",[36,18492,18493,18496,18498],{"class":38,"line":617},[36,18494,18495],{"class":42},"        m_H",[36,18497,47],{"class":46},[36,18499,18500],{"class":42},"h;\n",[36,18502,18503],{"class":38,"line":643},[36,18504,4580],{"class":42},[36,18506,18507,18509,18512],{"class":38,"line":921},[36,18508,4378],{"class":46},[36,18510,18511],{"class":79}," mianji",[36,18513,4369],{"class":42},[36,18515,18516],{"class":38,"line":934},[36,18517,4423],{"class":42},[36,18519,18520,18522,18524,18526,18529,18531,18534,18536,18539,18541,18544,18546,18549,18551],{"class":38,"line":939},[36,18521,736],{"class":46},[36,18523,17130],{"class":62},[36,18525,3011],{"class":46},[36,18527,18528],{"class":42},"(m_L",[36,18530,3011],{"class":46},[36,18532,18533],{"class":42},"m_W ",[36,18535,1885],{"class":46},[36,18537,18538],{"class":42}," m_L",[36,18540,3011],{"class":46},[36,18542,18543],{"class":42},"m_H ",[36,18545,1885],{"class":46},[36,18547,18548],{"class":42}," m_W",[36,18550,3011],{"class":46},[36,18552,18553],{"class":42},"m_H);\n",[36,18555,18556],{"class":38,"line":949},[36,18557,4580],{"class":42},[36,18559,18560,18562,18565],{"class":38,"line":962},[36,18561,4378],{"class":46},[36,18563,18564],{"class":79}," tiji",[36,18566,4369],{"class":42},[36,18568,18569],{"class":38,"line":974},[36,18570,4423],{"class":42},[36,18572,18573,18575,18577,18579,18582,18584],{"class":38,"line":979},[36,18574,736],{"class":46},[36,18576,18538],{"class":42},[36,18578,3011],{"class":46},[36,18580,18581],{"class":42},"m_W",[36,18583,3011],{"class":46},[36,18585,18586],{"class":42},"m_H;\n",[36,18588,18589],{"class":38,"line":994},[36,18590,4580],{"class":42},[36,18592,18593],{"class":38,"line":1006},[36,18594,18595],{"class":2621},"    \u002F\u002F获取长宽高\n",[36,18597,18598,18600,18603],{"class":38,"line":1011},[36,18599,4378],{"class":46},[36,18601,18602],{"class":79}," getLength",[36,18604,4369],{"class":42},[36,18606,18607],{"class":38,"line":1023},[36,18608,4423],{"class":42},[36,18610,18611,18613],{"class":38,"line":1028},[36,18612,736],{"class":46},[36,18614,18615],{"class":42}," m_L;\n",[36,18617,18618],{"class":38,"line":1033},[36,18619,4580],{"class":42},[36,18621,18622,18624,18627],{"class":38,"line":1053},[36,18623,4378],{"class":46},[36,18625,18626],{"class":79}," getWidth",[36,18628,4369],{"class":42},[36,18630,18631],{"class":38,"line":1064},[36,18632,4423],{"class":42},[36,18634,18635,18637],{"class":38,"line":1075},[36,18636,736],{"class":46},[36,18638,18639],{"class":42}," m_W;\n",[36,18641,18642],{"class":38,"line":2291},[36,18643,4580],{"class":42},[36,18645,18646,18648,18651],{"class":38,"line":2329},[36,18647,4378],{"class":46},[36,18649,18650],{"class":79}," getHeight",[36,18652,4369],{"class":42},[36,18654,18655],{"class":38,"line":2334},[36,18656,4423],{"class":42},[36,18658,18659,18661],{"class":38,"line":2339},[36,18660,736],{"class":46},[36,18662,18663],{"class":42}," m_H;\n",[36,18665,18666],{"class":38,"line":2365},[36,18667,4580],{"class":42},[36,18669,18670],{"class":38,"line":2373},[36,18671,18672],{"class":2621},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,18674,18675,18678,18681,18683,18686,18688],{"class":38,"line":5001},[36,18676,18677],{"class":46},"    bool",[36,18679,18680],{"class":79}," isEqual",[36,18682,92],{"class":42},[36,18684,18685],{"class":79},"Cube",[36,18687,5234],{"class":7598},[36,18689,123],{"class":42},[36,18691,18692],{"class":38,"line":5006},[36,18693,4423],{"class":42},[36,18695,18696,18698,18701,18704,18706,18708,18711,18713,18716,18719,18721,18723,18726,18728,18730,18733,18735,18737],{"class":38,"line":10328},[36,18697,890],{"class":46},[36,18699,18700],{"class":42}," (c.",[36,18702,18703],{"class":79},"getLength",[36,18705,15427],{"class":42},[36,18707,5334],{"class":46},[36,18709,18710],{"class":42}," m_L ",[36,18712,4118],{"class":46},[36,18714,18715],{"class":42}," c.",[36,18717,18718],{"class":79},"getWidth",[36,18720,15427],{"class":42},[36,18722,5334],{"class":46},[36,18724,18725],{"class":42}," m_W ",[36,18727,4118],{"class":46},[36,18729,18715],{"class":42},[36,18731,18732],{"class":79},"getHeight",[36,18734,15427],{"class":42},[36,18736,5334],{"class":46},[36,18738,18739],{"class":42}," m_H)\n",[36,18741,18742],{"class":38,"line":10352},[36,18743,4901],{"class":42},[36,18745,18746,18748,18751],{"class":38,"line":10357},[36,18747,18105],{"class":46},[36,18749,18750],{"class":62}," true",[36,18752,3711],{"class":42},[36,18754,18755],{"class":38,"line":10363},[36,18756,2204],{"class":42},[36,18758,18759],{"class":38,"line":10390},[36,18760,4960],{"class":46},[36,18762,18763],{"class":38,"line":10395},[36,18764,4901],{"class":42},[36,18766,18767,18769,18772],{"class":38,"line":10401},[36,18768,18105],{"class":46},[36,18770,18771],{"class":62}," false",[36,18773,3711],{"class":42},[36,18775,18776],{"class":38,"line":10413},[36,18777,2204],{"class":42},[36,18779,18780],{"class":38,"line":10425},[36,18781,4580],{"class":42},[36,18783,18784],{"class":38,"line":10437},[36,18785,18786],{"class":2621},"    \u002F\u002F私有属性\n",[36,18788,18789],{"class":38,"line":12095},[36,18790,17597],{"class":46},[36,18792,18793,18795],{"class":38,"line":12120},[36,18794,4378],{"class":46},[36,18796,18615],{"class":42},[36,18798,18799,18801],{"class":38,"line":12143},[36,18800,4378],{"class":46},[36,18802,18639],{"class":42},[36,18804,18805,18807],{"class":38,"line":12167},[36,18806,4378],{"class":46},[36,18808,18663],{"class":42},[36,18810,18811],{"class":38,"line":12172},[36,18812,70],{"emptyLinePlaceholder":69},[36,18814,18815],{"class":38,"line":12177},[36,18816,6379],{"class":42},[36,18818,18819],{"class":38,"line":12182},[36,18820,18821],{"class":2621},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,18823,18824,18826,18828,18830,18832,18835,18837,18839,18842],{"class":38,"line":12191},[36,18825,3771],{"class":46},[36,18827,18680],{"class":79},[36,18829,92],{"class":42},[36,18831,18685],{"class":79},[36,18833,18834],{"class":7598}," c1",[36,18836,2934],{"class":42},[36,18838,18685],{"class":79},[36,18840,18841],{"class":7598}," c2",[36,18843,123],{"class":42},[36,18845,18846],{"class":38,"line":12196},[36,18847,3963],{"class":42},[36,18849,18850,18852,18855,18857,18859,18861,18864,18866,18869,18871,18873,18875,18877,18879,18881,18883,18885,18887,18889,18891,18893,18895,18897,18899],{"class":38,"line":12202},[36,18851,6474],{"class":46},[36,18853,18854],{"class":42}," (c1.",[36,18856,18703],{"class":79},[36,18858,15427],{"class":42},[36,18860,5334],{"class":46},[36,18862,18863],{"class":42}," c2.",[36,18865,18703],{"class":79},[36,18867,18868],{"class":42},"()) ",[36,18870,4118],{"class":46},[36,18872,18854],{"class":42},[36,18874,18718],{"class":79},[36,18876,15427],{"class":42},[36,18878,5334],{"class":46},[36,18880,18863],{"class":42},[36,18882,18718],{"class":79},[36,18884,18868],{"class":42},[36,18886,4118],{"class":46},[36,18888,18854],{"class":42},[36,18890,18732],{"class":79},[36,18892,15427],{"class":42},[36,18894,5334],{"class":46},[36,18896,18863],{"class":42},[36,18898,18732],{"class":79},[36,18900,18901],{"class":42},"());\n",[36,18903,18904],{"class":38,"line":12223},[36,18905,3982],{"class":42},[36,18907,18908,18910,18912],{"class":38,"line":12229},[36,18909,2570],{"class":46},[36,18911,4366],{"class":79},[36,18913,4369],{"class":42},[36,18915,18916],{"class":38,"line":12243},[36,18917,3963],{"class":42},[36,18919,18920],{"class":38,"line":12249},[36,18921,18922],{"class":42},"    Cube c1;\n",[36,18924,18925],{"class":38,"line":12276},[36,18926,18927],{"class":2621},"    \u002F\u002F输入立方体的长宽高\n",[36,18929,18930,18932,18934,18937,18939],{"class":38,"line":12285},[36,18931,3968],{"class":42},[36,18933,3594],{"class":46},[36,18935,18936],{"class":50},"\"请输入第一个立方体的长、宽、高：\"",[36,18938,3594],{"class":46},[36,18940,3616],{"class":42},[36,18942,18943,18945],{"class":38,"line":12291},[36,18944,4378],{"class":46},[36,18946,18947],{"class":42}," l,w,h,l1,w1,h1;\n",[36,18949,18950,18952,18954,18956,18958,18960,18962],{"class":38,"line":12299},[36,18951,4405],{"class":42},[36,18953,3846],{"class":46},[36,18955,3073],{"class":42},[36,18957,3846],{"class":46},[36,18959,3349],{"class":42},[36,18961,3846],{"class":46},[36,18963,18500],{"class":42},[36,18965,18966,18969,18972],{"class":38,"line":12304},[36,18967,18968],{"class":42},"    c1.",[36,18970,18971],{"class":79},"setLwh",[36,18973,18974],{"class":42},"(l,w,h);\n",[36,18976,18978],{"class":38,"line":18977},66,[36,18979,18980],{"class":2621},"    \u002F\u002F面积\n",[36,18982,18984,18986,18988,18991,18993,18995,18998,19000,19002],{"class":38,"line":18983},67,[36,18985,3968],{"class":42},[36,18987,3594],{"class":46},[36,18989,18990],{"class":50},"\"立方体的表面积为：\"",[36,18992,3594],{"class":46},[36,18994,17205],{"class":42},[36,18996,18997],{"class":79},"mianji",[36,18999,4819],{"class":42},[36,19001,3594],{"class":46},[36,19003,3616],{"class":42},[36,19005,19007],{"class":38,"line":19006},68,[36,19008,19009],{"class":2621},"    \u002F\u002F体积\n",[36,19011,19013,19015,19017,19020,19022,19024,19027,19029,19031],{"class":38,"line":19012},69,[36,19014,3968],{"class":42},[36,19016,3594],{"class":46},[36,19018,19019],{"class":50},"\"立方体的体积为：\"",[36,19021,3594],{"class":46},[36,19023,17205],{"class":42},[36,19025,19026],{"class":79},"tiji",[36,19028,4819],{"class":42},[36,19030,3594],{"class":46},[36,19032,3616],{"class":42},[36,19034,19036,19038,19040,19043,19045],{"class":38,"line":19035},70,[36,19037,3968],{"class":42},[36,19039,3594],{"class":46},[36,19041,19042],{"class":50},"\"请输入第二个立方体的长、宽、高：\"",[36,19044,3594],{"class":46},[36,19046,3616],{"class":42},[36,19048,19050,19052,19054,19057,19059,19062,19064],{"class":38,"line":19049},71,[36,19051,4405],{"class":42},[36,19053,3846],{"class":46},[36,19055,19056],{"class":42},"l1",[36,19058,3846],{"class":46},[36,19060,19061],{"class":42},"w1",[36,19063,3846],{"class":46},[36,19065,19066],{"class":42},"h1;\n",[36,19068,19070],{"class":38,"line":19069},72,[36,19071,19072],{"class":42},"    Cube c2;\n",[36,19074,19076,19079,19081],{"class":38,"line":19075},73,[36,19077,19078],{"class":42},"    c2.",[36,19080,18971],{"class":79},[36,19082,19083],{"class":42},"(l1,w1,h1);\n",[36,19085,19087,19089,19091,19094,19096,19099,19101,19103,19105],{"class":38,"line":19086},74,[36,19088,3968],{"class":42},[36,19090,3594],{"class":46},[36,19092,19093],{"class":50},"\"第二个立方体的表面积为：\"",[36,19095,3594],{"class":46},[36,19097,19098],{"class":42},"c2.",[36,19100,18997],{"class":79},[36,19102,4819],{"class":42},[36,19104,3594],{"class":46},[36,19106,3616],{"class":42},[36,19108,19110,19112,19114,19117,19119,19121,19123,19125,19127],{"class":38,"line":19109},75,[36,19111,3968],{"class":42},[36,19113,3594],{"class":46},[36,19115,19116],{"class":50},"\"第二个立方体的体积为：\"",[36,19118,3594],{"class":46},[36,19120,19098],{"class":42},[36,19122,19026],{"class":79},[36,19124,4819],{"class":42},[36,19126,3594],{"class":46},[36,19128,3616],{"class":42},[36,19130,19132],{"class":38,"line":19131},76,[36,19133,70],{"emptyLinePlaceholder":69},[36,19135,19137],{"class":38,"line":19136},77,[36,19138,19139],{"class":2621},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,19141,19143,19145,19147,19150,19152],{"class":38,"line":19142},78,[36,19144,3968],{"class":42},[36,19146,3594],{"class":46},[36,19148,19149],{"class":50},"\"内部函数判断结果：\"",[36,19151,3594],{"class":46},[36,19153,3616],{"class":42},[36,19155,19157,19159,19161,19164],{"class":38,"line":19156},79,[36,19158,5486],{"class":46},[36,19160,18854],{"class":42},[36,19162,19163],{"class":79},"isEqual",[36,19165,19166],{"class":42},"(c2))\n",[36,19168,19170],{"class":38,"line":19169},80,[36,19171,4423],{"class":42},[36,19173,19175,19177,19179,19182,19184],{"class":38,"line":19174},81,[36,19176,5836],{"class":42},[36,19178,3594],{"class":46},[36,19180,19181],{"class":50},"\"两个立方体相等\"",[36,19183,3594],{"class":46},[36,19185,3616],{"class":42},[36,19187,19189],{"class":38,"line":19188},82,[36,19190,4580],{"class":42},[36,19192,19194],{"class":38,"line":19193},83,[36,19195,19196],{"class":46},"    else\n",[36,19198,19200],{"class":38,"line":19199},84,[36,19201,4423],{"class":42},[36,19203,19205,19207,19209,19212,19214],{"class":38,"line":19204},85,[36,19206,5836],{"class":42},[36,19208,3594],{"class":46},[36,19210,19211],{"class":50},"\"两个立方体不相等\"",[36,19213,3594],{"class":46},[36,19215,3616],{"class":42},[36,19217,19219],{"class":38,"line":19218},86,[36,19220,4580],{"class":42},[36,19222,19224],{"class":38,"line":19223},87,[36,19225,70],{"emptyLinePlaceholder":69},[36,19227,19229,19231,19233,19236,19238],{"class":38,"line":19228},88,[36,19230,3968],{"class":42},[36,19232,3594],{"class":46},[36,19234,19235],{"class":50},"\"全局函数判断结果：\"",[36,19237,3594],{"class":46},[36,19239,3616],{"class":42},[36,19241,19243,19245,19247,19249],{"class":38,"line":19242},89,[36,19244,5486],{"class":46},[36,19246,4066],{"class":42},[36,19248,19163],{"class":79},[36,19250,19251],{"class":42},"(c1, c2))\n",[36,19253,19255],{"class":38,"line":19254},90,[36,19256,4423],{"class":42},[36,19258,19260,19262,19264,19266,19268],{"class":38,"line":19259},91,[36,19261,5836],{"class":42},[36,19263,3594],{"class":46},[36,19265,19181],{"class":50},[36,19267,3594],{"class":46},[36,19269,3616],{"class":42},[36,19271,19273],{"class":38,"line":19272},92,[36,19274,4580],{"class":42},[36,19276,19278],{"class":38,"line":19277},93,[36,19279,19196],{"class":46},[36,19281,19283],{"class":38,"line":19282},94,[36,19284,4423],{"class":42},[36,19286,19288,19290,19292,19294,19296],{"class":38,"line":19287},95,[36,19289,5836],{"class":42},[36,19291,3594],{"class":46},[36,19293,19211],{"class":50},[36,19295,3594],{"class":46},[36,19297,3616],{"class":42},[36,19299,19301],{"class":38,"line":19300},96,[36,19302,4580],{"class":42},[36,19304,19306],{"class":38,"line":19305},97,[36,19307,3982],{"class":42},[650,19309,19310],{"start":54},[653,19311,19312],{},[667,19313,19314],{},"练习案例2：点和圆的关系",[3557,19316,19317],{},[653,19318,19319],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,19321,19323],{"className":2556,"code":19322,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[33,19324,19325,19331,19341,19348,19355,19359,19363,19368,19402,19407,19423,19437,19441,19445,19452,19459,19463,19469,19473,19477,19481,19503,19526,19531,19545,19560,19564,19568,19574,19579,19584,19588,19613,19617,19646,19674,19702,19719,19723,19736,19740,19744,19748,19761,19765,19769,19777,19781,19785,19789,19794,19798,19809,19816,19825,19835,19846,19853,19866,19877,19887,19898,19905,19919,19924,19934,19942],{"__ignoreMap":31},[36,19326,19327,19329],{"class":38,"line":39},[36,19328,4343],{"class":46},[36,19330,4346],{"class":50},[36,19332,19333,19335,19337,19339],{"class":38,"line":54},[36,19334,4351],{"class":46},[36,19336,4354],{"class":46},[36,19338,4357],{"class":79},[36,19340,3711],{"class":42},[36,19342,19343,19345],{"class":38,"line":66},[36,19344,4343],{"class":46},[36,19346,19347],{"class":50},"\u003Ccmath>\n",[36,19349,19350,19352],{"class":38,"line":73},[36,19351,147],{"class":46},[36,19353,19354],{"class":79}," Point\n",[36,19356,19357],{"class":38,"line":86},[36,19358,3963],{"class":42},[36,19360,19361],{"class":38,"line":126},[36,19362,17092],{"class":46},[36,19364,19365],{"class":38,"line":131},[36,19366,19367],{"class":2621},"    \u002F\u002F赋值\n",[36,19369,19370,19372,19375,19377,19379,19382,19384,19386,19389,19392,19394,19397,19399],{"class":38,"line":225},[36,19371,17284],{"class":46},[36,19373,19374],{"class":79}," setPoint",[36,19376,92],{"class":42},[36,19378,16414],{"class":46},[36,19380,19381],{"class":7598}," x",[36,19383,630],{"class":42},[36,19385,16414],{"class":46},[36,19387,19388],{"class":7598}," y",[36,19390,19391],{"class":42},") { m_x ",[36,19393,47],{"class":46},[36,19395,19396],{"class":42}," x; m_y ",[36,19398,47],{"class":46},[36,19400,19401],{"class":42}," y; }\n",[36,19403,19404],{"class":38,"line":235},[36,19405,19406],{"class":2621},"    \u002F\u002F获取坐标\n",[36,19408,19409,19411,19414,19417,19420],{"class":38,"line":377},[36,19410,17114],{"class":46},[36,19412,19413],{"class":79}," getX",[36,19415,19416],{"class":42},"() { ",[36,19418,19419],{"class":46},"return",[36,19421,19422],{"class":42}," m_x; }\n",[36,19424,19425,19427,19430,19432,19434],{"class":38,"line":617},[36,19426,17114],{"class":46},[36,19428,19429],{"class":79}," getY",[36,19431,19416],{"class":42},[36,19433,19419],{"class":46},[36,19435,19436],{"class":42}," m_y; }\n",[36,19438,19439],{"class":38,"line":643},[36,19440,70],{"emptyLinePlaceholder":69},[36,19442,19443],{"class":38,"line":921},[36,19444,17597],{"class":46},[36,19446,19447,19449],{"class":38,"line":934},[36,19448,17114],{"class":46},[36,19450,19451],{"class":42}," m_x;\n",[36,19453,19454,19456],{"class":38,"line":939},[36,19455,17114],{"class":46},[36,19457,19458],{"class":42}," m_y;\n",[36,19460,19461],{"class":38,"line":949},[36,19462,6379],{"class":42},[36,19464,19465,19467],{"class":38,"line":962},[36,19466,147],{"class":46},[36,19468,17073],{"class":79},[36,19470,19471],{"class":38,"line":974},[36,19472,3963],{"class":42},[36,19474,19475],{"class":38,"line":979},[36,19476,17092],{"class":46},[36,19478,19479],{"class":38,"line":994},[36,19480,19367],{"class":2621},[36,19482,19483,19485,19488,19490,19492,19495,19498,19500],{"class":38,"line":1006},[36,19484,17284],{"class":46},[36,19486,19487],{"class":79}," setRadius",[36,19489,92],{"class":42},[36,19491,16414],{"class":46},[36,19493,19494],{"class":7598}," r",[36,19496,19497],{"class":42},") { m_r ",[36,19499,47],{"class":46},[36,19501,19502],{"class":42}," r; }\n",[36,19504,19505,19507,19510,19512,19515,19518,19521,19523],{"class":38,"line":1011},[36,19506,17284],{"class":46},[36,19508,19509],{"class":79}," setCenter",[36,19511,92],{"class":42},[36,19513,19514],{"class":79},"Point",[36,19516,19517],{"class":7598}," center",[36,19519,19520],{"class":42},") { m_center ",[36,19522,47],{"class":46},[36,19524,19525],{"class":42}," center; }\n",[36,19527,19528],{"class":38,"line":1023},[36,19529,19530],{"class":2621},"    \u002F\u002F获取属性\n",[36,19532,19533,19535,19538,19540,19542],{"class":38,"line":1028},[36,19534,17114],{"class":46},[36,19536,19537],{"class":79}," getRadius",[36,19539,19416],{"class":42},[36,19541,19419],{"class":46},[36,19543,19544],{"class":42}," m_r; }\n",[36,19546,19547,19550,19553,19555,19557],{"class":38,"line":1033},[36,19548,19549],{"class":79},"    Point",[36,19551,19552],{"class":79}," getCenter",[36,19554,19416],{"class":42},[36,19556,19419],{"class":46},[36,19558,19559],{"class":42}," m_center; }\n",[36,19561,19562],{"class":38,"line":1053},[36,19563,70],{"emptyLinePlaceholder":69},[36,19565,19566],{"class":38,"line":1064},[36,19567,17597],{"class":46},[36,19569,19570,19572],{"class":38,"line":1075},[36,19571,17114],{"class":46},[36,19573,17104],{"class":42},[36,19575,19576],{"class":38,"line":2291},[36,19577,19578],{"class":2621},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,19580,19581],{"class":38,"line":2329},[36,19582,19583],{"class":42},"    Point m_center;\n",[36,19585,19586],{"class":38,"line":2334},[36,19587,6379],{"class":42},[36,19589,19590,19592,19595,19597,19599,19601,19603,19605,19607,19609,19611],{"class":38,"line":2339},[36,19591,7746],{"class":46},[36,19593,19594],{"class":79}," isInCircle",[36,19596,92],{"class":42},[36,19598,2442],{"class":79},[36,19600,12963],{"class":46},[36,19602,2845],{"class":7598},[36,19604,2934],{"class":42},[36,19606,19514],{"class":79},[36,19608,12963],{"class":46},[36,19610,19],{"class":7598},[36,19612,123],{"class":42},[36,19614,19615],{"class":38,"line":2365},[36,19616,3963],{"class":42},[36,19618,19619,19621,19624,19626,19628,19631,19633,19636,19638,19640,19642,19644],{"class":38,"line":2373},[36,19620,17114],{"class":46},[36,19622,19623],{"class":42}," dx ",[36,19625,47],{"class":46},[36,19627,18715],{"class":42},[36,19629,19630],{"class":79},"getCenter",[36,19632,1435],{"class":42},[36,19634,19635],{"class":79},"getX",[36,19637,15427],{"class":42},[36,19639,3087],{"class":46},[36,19641,18261],{"class":42},[36,19643,19635],{"class":79},[36,19645,8018],{"class":42},[36,19647,19648,19650,19653,19655,19657,19659,19661,19664,19666,19668,19670,19672],{"class":38,"line":5001},[36,19649,17114],{"class":46},[36,19651,19652],{"class":42}," dy ",[36,19654,47],{"class":46},[36,19656,18715],{"class":42},[36,19658,19630],{"class":79},[36,19660,1435],{"class":42},[36,19662,19663],{"class":79},"getY",[36,19665,15427],{"class":42},[36,19667,3087],{"class":46},[36,19669,18261],{"class":42},[36,19671,19663],{"class":79},[36,19673,8018],{"class":42},[36,19675,19676,19678,19681,19683,19686,19689,19691,19693,19695,19697,19699],{"class":38,"line":5006},[36,19677,17114],{"class":46},[36,19679,19680],{"class":42}," distance ",[36,19682,47],{"class":46},[36,19684,19685],{"class":79}," sqrt",[36,19687,19688],{"class":42},"(dx ",[36,19690,3011],{"class":46},[36,19692,19623],{"class":42},[36,19694,1885],{"class":46},[36,19696,19652],{"class":42},[36,19698,3011],{"class":46},[36,19700,19701],{"class":42}," dy);\n",[36,19703,19704,19706,19709,19711,19713,19716],{"class":38,"line":10328},[36,19705,5486],{"class":46},[36,19707,19708],{"class":42}," (distance ",[36,19710,3463],{"class":46},[36,19712,18715],{"class":42},[36,19714,19715],{"class":79},"getRadius",[36,19717,19718],{"class":42},"())\n",[36,19720,19721],{"class":38,"line":10352},[36,19722,4423],{"class":42},[36,19724,19725,19727,19729,19732,19734],{"class":38,"line":10357},[36,19726,12048],{"class":42},[36,19728,3594],{"class":46},[36,19730,19731],{"class":50}," \"点在圆内\"",[36,19733,3861],{"class":46},[36,19735,11220],{"class":42},[36,19737,19738],{"class":38,"line":10363},[36,19739,4580],{"class":42},[36,19741,19742],{"class":38,"line":10390},[36,19743,19196],{"class":46},[36,19745,19746],{"class":38,"line":10395},[36,19747,4423],{"class":42},[36,19749,19750,19752,19754,19757,19759],{"class":38,"line":10401},[36,19751,12048],{"class":42},[36,19753,3594],{"class":46},[36,19755,19756],{"class":50}," \"点在圆外\"",[36,19758,3861],{"class":46},[36,19760,11220],{"class":42},[36,19762,19763],{"class":38,"line":10413},[36,19764,4580],{"class":42},[36,19766,19767],{"class":38,"line":10425},[36,19768,3982],{"class":42},[36,19770,19771,19773,19775],{"class":38,"line":10437},[36,19772,2570],{"class":46},[36,19774,4366],{"class":79},[36,19776,4369],{"class":42},[36,19778,19779],{"class":38,"line":12095},[36,19780,3963],{"class":42},[36,19782,19783],{"class":38,"line":12120},[36,19784,17428],{"class":2621},[36,19786,19787],{"class":38,"line":12143},[36,19788,17175],{"class":42},[36,19790,19791],{"class":38,"line":12167},[36,19792,19793],{"class":42},"    Point p1;\n",[36,19795,19796],{"class":38,"line":12172},[36,19797,19367],{"class":2621},[36,19799,19800,19802,19804,19807],{"class":38,"line":12177},[36,19801,3968],{"class":42},[36,19803,3594],{"class":46},[36,19805,19806],{"class":50},"\"请输入圆的半径：\"",[36,19808,3711],{"class":42},[36,19810,19811,19813],{"class":38,"line":12182},[36,19812,17114],{"class":46},[36,19814,19815],{"class":42}," r;\n",[36,19817,19818,19820,19822],{"class":38,"line":12191},[36,19819,4405],{"class":42},[36,19821,3846],{"class":46},[36,19823,19824],{"class":42},"r;\n",[36,19826,19827,19829,19832],{"class":38,"line":12196},[36,19828,18968],{"class":42},[36,19830,19831],{"class":79},"setRadius",[36,19833,19834],{"class":42},"(r);\n",[36,19836,19837,19839,19841,19844],{"class":38,"line":12202},[36,19838,3968],{"class":42},[36,19840,3594],{"class":46},[36,19842,19843],{"class":50},"\"请输入圆心坐标：\"",[36,19845,3711],{"class":42},[36,19847,19848,19850],{"class":38,"line":12223},[36,19849,17114],{"class":46},[36,19851,19852],{"class":42}," x, y;\n",[36,19854,19855,19857,19859,19861,19863],{"class":38,"line":12229},[36,19856,4405],{"class":42},[36,19858,3846],{"class":46},[36,19860,3374],{"class":42},[36,19862,3846],{"class":46},[36,19864,19865],{"class":42},"y;\n",[36,19867,19868,19871,19874],{"class":38,"line":12243},[36,19869,19870],{"class":42},"    p1.",[36,19872,19873],{"class":79},"setPoint",[36,19875,19876],{"class":42},"(x, y);\n",[36,19878,19879,19881,19884],{"class":38,"line":12249},[36,19880,18968],{"class":42},[36,19882,19883],{"class":79},"setCenter",[36,19885,19886],{"class":42},"(p1);\n",[36,19888,19889,19891,19893,19896],{"class":38,"line":12276},[36,19890,3968],{"class":42},[36,19892,3594],{"class":46},[36,19894,19895],{"class":50},"\"请输入测试点坐标：\"",[36,19897,3711],{"class":42},[36,19899,19900,19902],{"class":38,"line":12285},[36,19901,17114],{"class":46},[36,19903,19904],{"class":42}," x1, y1;\n",[36,19906,19907,19909,19911,19914,19916],{"class":38,"line":12291},[36,19908,4405],{"class":42},[36,19910,3846],{"class":46},[36,19912,19913],{"class":42},"x1",[36,19915,3846],{"class":46},[36,19917,19918],{"class":42},"y1;\n",[36,19920,19921],{"class":38,"line":12299},[36,19922,19923],{"class":42},"    Point p2;\n",[36,19925,19926,19929,19931],{"class":38,"line":12304},[36,19927,19928],{"class":42},"    p2.",[36,19930,19873],{"class":79},[36,19932,19933],{"class":42},"(x1, y1);\n",[36,19935,19936,19939],{"class":38,"line":18977},[36,19937,19938],{"class":79},"    isInCircle",[36,19940,19941],{"class":42},"(c1, p2);\n",[36,19943,19944],{"class":38,"line":18983},[36,19945,3982],{"class":42},[19,19947,19948],{},"在类中可以让另一个类作为本来的成员",[19,19950,19951],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19953,19954],{},"创建point.h",[26,19956,19958],{"className":2556,"code":19957,"language":2558,"meta":31,"style":31},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[33,19959,19960,19971,19977,19987,19993,19997,20002,20006,20010,20030,20034,20042,20050,20054,20058,20064,20070],{"__ignoreMap":31},[36,19961,19962,19965,19968],{"class":38,"line":39},[36,19963,19964],{"class":46},"#pragma",[36,19966,19967],{"class":79}," once",[36,19969,19970],{"class":2621}," \u002F\u002F防止头文件重复包含\n",[36,19972,19973,19975],{"class":38,"line":54},[36,19974,4343],{"class":46},[36,19976,4346],{"class":50},[36,19978,19979,19981,19983,19985],{"class":38,"line":66},[36,19980,4351],{"class":46},[36,19982,4354],{"class":46},[36,19984,4357],{"class":79},[36,19986,3711],{"class":42},[36,19988,19989,19991],{"class":38,"line":73},[36,19990,147],{"class":46},[36,19992,19354],{"class":79},[36,19994,19995],{"class":38,"line":86},[36,19996,3963],{"class":42},[36,19998,19999],{"class":38,"line":126},[36,20000,20001],{"class":2621},"\u002F\u002F做好声明与变量定义就可以\n",[36,20003,20004],{"class":38,"line":131},[36,20005,17092],{"class":46},[36,20007,20008],{"class":38,"line":225},[36,20009,19367],{"class":2621},[36,20011,20012,20014,20016,20018,20020,20022,20024,20026,20028],{"class":38,"line":235},[36,20013,17284],{"class":46},[36,20015,19374],{"class":79},[36,20017,92],{"class":42},[36,20019,16414],{"class":46},[36,20021,19381],{"class":7598},[36,20023,630],{"class":42},[36,20025,16414],{"class":46},[36,20027,19388],{"class":7598},[36,20029,5104],{"class":42},[36,20031,20032],{"class":38,"line":377},[36,20033,19406],{"class":2621},[36,20035,20036,20038,20040],{"class":38,"line":617},[36,20037,17114],{"class":46},[36,20039,19413],{"class":79},[36,20041,8018],{"class":42},[36,20043,20044,20046,20048],{"class":38,"line":643},[36,20045,17114],{"class":46},[36,20047,19429],{"class":79},[36,20049,8018],{"class":42},[36,20051,20052],{"class":38,"line":921},[36,20053,70],{"emptyLinePlaceholder":69},[36,20055,20056],{"class":38,"line":934},[36,20057,17597],{"class":46},[36,20059,20060,20062],{"class":38,"line":939},[36,20061,17114],{"class":46},[36,20063,19451],{"class":42},[36,20065,20066,20068],{"class":38,"line":949},[36,20067,17114],{"class":46},[36,20069,19458],{"class":42},[36,20071,20072],{"class":38,"line":962},[36,20073,6379],{"class":42},[19,20075,20076],{},"创建point.cpp",[26,20078,20080],{"className":2556,"code":20079,"language":2558,"meta":31,"style":31},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[33,20081,20082,20089,20094,20128,20132,20148],{"__ignoreMap":31},[36,20083,20084,20086],{"class":38,"line":39},[36,20085,4343],{"class":46},[36,20087,20088],{"class":50},"\u003Cpoint.h>\n",[36,20090,20091],{"class":38,"line":54},[36,20092,20093],{"class":2621},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,20095,20096,20098,20101,20104,20106,20108,20110,20112,20114,20116,20118,20120,20122,20124,20126],{"class":38,"line":66},[36,20097,17284],{"class":46},[36,20099,20100],{"class":79}," Point",[36,20102,20103],{"class":42},"::",[36,20105,19873],{"class":79},[36,20107,92],{"class":42},[36,20109,16414],{"class":46},[36,20111,19381],{"class":7598},[36,20113,630],{"class":42},[36,20115,16414],{"class":46},[36,20117,19388],{"class":7598},[36,20119,19391],{"class":42},[36,20121,47],{"class":46},[36,20123,19396],{"class":42},[36,20125,47],{"class":46},[36,20127,19401],{"class":42},[36,20129,20130],{"class":38,"line":73},[36,20131,19406],{"class":2621},[36,20133,20134,20136,20138,20140,20142,20144,20146],{"class":38,"line":86},[36,20135,17114],{"class":46},[36,20137,20100],{"class":79},[36,20139,20103],{"class":42},[36,20141,19635],{"class":79},[36,20143,19416],{"class":42},[36,20145,19419],{"class":46},[36,20147,19422],{"class":42},[36,20149,20150,20152,20154,20156,20158,20160,20162],{"class":38,"line":126},[36,20151,17114],{"class":46},[36,20153,20100],{"class":79},[36,20155,20103],{"class":42},[36,20157,19663],{"class":79},[36,20159,19416],{"class":42},[36,20161,19419],{"class":46},[36,20163,19436],{"class":42},[19,20165,20166],{},"创建circle.h",[26,20168,20170],{"className":2556,"code":20169,"language":2558,"meta":31,"style":31},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[33,20171,20172,20179,20185,20195,20201,20207,20211,20215,20219,20233,20247,20251,20259,20267,20271,20275,20281,20285,20289],{"__ignoreMap":31},[36,20173,20174,20176],{"class":38,"line":39},[36,20175,19964],{"class":46},[36,20177,20178],{"class":79}," once\n",[36,20180,20181,20183],{"class":38,"line":54},[36,20182,4343],{"class":46},[36,20184,4346],{"class":50},[36,20186,20187,20189,20191,20193],{"class":38,"line":66},[36,20188,4351],{"class":46},[36,20190,4354],{"class":46},[36,20192,4357],{"class":79},[36,20194,3711],{"class":42},[36,20196,20197,20199],{"class":38,"line":73},[36,20198,4343],{"class":46},[36,20200,20088],{"class":50},[36,20202,20203,20205],{"class":38,"line":86},[36,20204,147],{"class":46},[36,20206,17073],{"class":79},[36,20208,20209],{"class":38,"line":126},[36,20210,3963],{"class":42},[36,20212,20213],{"class":38,"line":131},[36,20214,17092],{"class":46},[36,20216,20217],{"class":38,"line":225},[36,20218,19367],{"class":2621},[36,20220,20221,20223,20225,20227,20229,20231],{"class":38,"line":235},[36,20222,17284],{"class":46},[36,20224,19487],{"class":79},[36,20226,92],{"class":42},[36,20228,16414],{"class":46},[36,20230,19494],{"class":7598},[36,20232,5104],{"class":42},[36,20234,20235,20237,20239,20241,20243,20245],{"class":38,"line":377},[36,20236,17284],{"class":46},[36,20238,19509],{"class":79},[36,20240,92],{"class":42},[36,20242,19514],{"class":79},[36,20244,19517],{"class":7598},[36,20246,5104],{"class":42},[36,20248,20249],{"class":38,"line":617},[36,20250,19530],{"class":2621},[36,20252,20253,20255,20257],{"class":38,"line":643},[36,20254,17114],{"class":46},[36,20256,19537],{"class":79},[36,20258,8018],{"class":42},[36,20260,20261,20263,20265],{"class":38,"line":921},[36,20262,19549],{"class":79},[36,20264,19552],{"class":79},[36,20266,8018],{"class":42},[36,20268,20269],{"class":38,"line":934},[36,20270,70],{"emptyLinePlaceholder":69},[36,20272,20273],{"class":38,"line":939},[36,20274,17597],{"class":46},[36,20276,20277,20279],{"class":38,"line":949},[36,20278,17114],{"class":46},[36,20280,17104],{"class":42},[36,20282,20283],{"class":38,"line":962},[36,20284,19578],{"class":2621},[36,20286,20287],{"class":38,"line":974},[36,20288,19583],{"class":42},[36,20290,20291],{"class":38,"line":979},[36,20292,6379],{"class":42},[19,20294,20295],{},"创建circle.cpp",[26,20297,20299],{"className":2556,"code":20298,"language":2558,"meta":31,"style":31},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[33,20300,20301,20308,20331,20353,20358,20374],{"__ignoreMap":31},[36,20302,20303,20305],{"class":38,"line":39},[36,20304,4343],{"class":46},[36,20306,20307],{"class":50},"\u003Ccircle.h>\n",[36,20309,20310,20312,20315,20317,20319,20321,20323,20325,20327,20329],{"class":38,"line":54},[36,20311,7746],{"class":46},[36,20313,20314],{"class":79}," Circle",[36,20316,20103],{"class":42},[36,20318,19831],{"class":79},[36,20320,92],{"class":42},[36,20322,16414],{"class":46},[36,20324,19494],{"class":7598},[36,20326,19497],{"class":42},[36,20328,47],{"class":46},[36,20330,19502],{"class":42},[36,20332,20333,20335,20337,20339,20341,20343,20345,20347,20349,20351],{"class":38,"line":66},[36,20334,7746],{"class":46},[36,20336,20314],{"class":79},[36,20338,20103],{"class":42},[36,20340,19883],{"class":79},[36,20342,92],{"class":42},[36,20344,19514],{"class":79},[36,20346,19517],{"class":7598},[36,20348,19520],{"class":42},[36,20350,47],{"class":46},[36,20352,19525],{"class":42},[36,20354,20355],{"class":38,"line":73},[36,20356,20357],{"class":2621},"\u002F\u002F获取属性\n",[36,20359,20360,20362,20364,20366,20368,20370,20372],{"class":38,"line":86},[36,20361,16414],{"class":46},[36,20363,20314],{"class":79},[36,20365,20103],{"class":42},[36,20367,19715],{"class":79},[36,20369,19416],{"class":42},[36,20371,19419],{"class":46},[36,20373,19544],{"class":42},[36,20375,20376,20378,20380,20382,20384,20386,20388],{"class":38,"line":126},[36,20377,19514],{"class":79},[36,20379,20314],{"class":79},[36,20381,20103],{"class":42},[36,20383,19630],{"class":79},[36,20385,19416],{"class":42},[36,20387,19419],{"class":46},[36,20389,19559],{"class":42},[19,20391,20392],{},"使用封装的类",[26,20394,20396],{"className":2556,"code":20395,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[33,20397,20398,20404,20414,20420,20426,20450,20454,20480,20506,20530,20544,20548,20560,20564,20568,20572,20584,20588,20592,20600,20604,20608,20612,20616,20620,20630,20636,20644,20652,20662,20668,20680,20688,20696,20706,20712,20724,20728,20736,20742],{"__ignoreMap":31},[36,20399,20400,20402],{"class":38,"line":39},[36,20401,4343],{"class":46},[36,20403,4346],{"class":50},[36,20405,20406,20408,20410,20412],{"class":38,"line":54},[36,20407,4351],{"class":46},[36,20409,4354],{"class":46},[36,20411,4357],{"class":79},[36,20413,3711],{"class":42},[36,20415,20416,20418],{"class":38,"line":66},[36,20417,4343],{"class":46},[36,20419,20307],{"class":50},[36,20421,20422,20424],{"class":38,"line":73},[36,20423,4343],{"class":46},[36,20425,20088],{"class":50},[36,20427,20428,20430,20432,20434,20436,20438,20440,20442,20444,20446,20448],{"class":38,"line":86},[36,20429,7746],{"class":46},[36,20431,19594],{"class":79},[36,20433,92],{"class":42},[36,20435,2442],{"class":79},[36,20437,12963],{"class":46},[36,20439,2845],{"class":7598},[36,20441,2934],{"class":42},[36,20443,19514],{"class":79},[36,20445,12963],{"class":46},[36,20447,19],{"class":7598},[36,20449,123],{"class":42},[36,20451,20452],{"class":38,"line":126},[36,20453,3963],{"class":42},[36,20455,20456,20458,20460,20462,20464,20466,20468,20470,20472,20474,20476,20478],{"class":38,"line":131},[36,20457,17114],{"class":46},[36,20459,19623],{"class":42},[36,20461,47],{"class":46},[36,20463,18715],{"class":42},[36,20465,19630],{"class":79},[36,20467,1435],{"class":42},[36,20469,19635],{"class":79},[36,20471,15427],{"class":42},[36,20473,3087],{"class":46},[36,20475,18261],{"class":42},[36,20477,19635],{"class":79},[36,20479,8018],{"class":42},[36,20481,20482,20484,20486,20488,20490,20492,20494,20496,20498,20500,20502,20504],{"class":38,"line":225},[36,20483,17114],{"class":46},[36,20485,19652],{"class":42},[36,20487,47],{"class":46},[36,20489,18715],{"class":42},[36,20491,19630],{"class":79},[36,20493,1435],{"class":42},[36,20495,19663],{"class":79},[36,20497,15427],{"class":42},[36,20499,3087],{"class":46},[36,20501,18261],{"class":42},[36,20503,19663],{"class":79},[36,20505,8018],{"class":42},[36,20507,20508,20510,20512,20514,20516,20518,20520,20522,20524,20526,20528],{"class":38,"line":235},[36,20509,17114],{"class":46},[36,20511,19680],{"class":42},[36,20513,47],{"class":46},[36,20515,19685],{"class":79},[36,20517,19688],{"class":42},[36,20519,3011],{"class":46},[36,20521,19623],{"class":42},[36,20523,1885],{"class":46},[36,20525,19652],{"class":42},[36,20527,3011],{"class":46},[36,20529,19701],{"class":42},[36,20531,20532,20534,20536,20538,20540,20542],{"class":38,"line":377},[36,20533,5486],{"class":46},[36,20535,19708],{"class":42},[36,20537,3463],{"class":46},[36,20539,18715],{"class":42},[36,20541,19715],{"class":79},[36,20543,19718],{"class":42},[36,20545,20546],{"class":38,"line":617},[36,20547,4423],{"class":42},[36,20549,20550,20552,20554,20556,20558],{"class":38,"line":643},[36,20551,12048],{"class":42},[36,20553,3594],{"class":46},[36,20555,19731],{"class":50},[36,20557,3861],{"class":46},[36,20559,11220],{"class":42},[36,20561,20562],{"class":38,"line":921},[36,20563,4580],{"class":42},[36,20565,20566],{"class":38,"line":934},[36,20567,19196],{"class":46},[36,20569,20570],{"class":38,"line":939},[36,20571,4423],{"class":42},[36,20573,20574,20576,20578,20580,20582],{"class":38,"line":949},[36,20575,12048],{"class":42},[36,20577,3594],{"class":46},[36,20579,19756],{"class":50},[36,20581,3861],{"class":46},[36,20583,11220],{"class":42},[36,20585,20586],{"class":38,"line":962},[36,20587,4580],{"class":42},[36,20589,20590],{"class":38,"line":974},[36,20591,3982],{"class":42},[36,20593,20594,20596,20598],{"class":38,"line":979},[36,20595,2570],{"class":46},[36,20597,4366],{"class":79},[36,20599,4369],{"class":42},[36,20601,20602],{"class":38,"line":994},[36,20603,3963],{"class":42},[36,20605,20606],{"class":38,"line":1006},[36,20607,17428],{"class":2621},[36,20609,20610],{"class":38,"line":1011},[36,20611,17175],{"class":42},[36,20613,20614],{"class":38,"line":1023},[36,20615,19793],{"class":42},[36,20617,20618],{"class":38,"line":1028},[36,20619,19367],{"class":2621},[36,20621,20622,20624,20626,20628],{"class":38,"line":1033},[36,20623,3968],{"class":42},[36,20625,3594],{"class":46},[36,20627,19806],{"class":50},[36,20629,3711],{"class":42},[36,20631,20632,20634],{"class":38,"line":1053},[36,20633,17114],{"class":46},[36,20635,19815],{"class":42},[36,20637,20638,20640,20642],{"class":38,"line":1064},[36,20639,4405],{"class":42},[36,20641,3846],{"class":46},[36,20643,19824],{"class":42},[36,20645,20646,20648,20650],{"class":38,"line":1075},[36,20647,18968],{"class":42},[36,20649,19831],{"class":79},[36,20651,19834],{"class":42},[36,20653,20654,20656,20658,20660],{"class":38,"line":2291},[36,20655,3968],{"class":42},[36,20657,3594],{"class":46},[36,20659,19843],{"class":50},[36,20661,3711],{"class":42},[36,20663,20664,20666],{"class":38,"line":2329},[36,20665,17114],{"class":46},[36,20667,19852],{"class":42},[36,20669,20670,20672,20674,20676,20678],{"class":38,"line":2334},[36,20671,4405],{"class":42},[36,20673,3846],{"class":46},[36,20675,3374],{"class":42},[36,20677,3846],{"class":46},[36,20679,19865],{"class":42},[36,20681,20682,20684,20686],{"class":38,"line":2339},[36,20683,19870],{"class":42},[36,20685,19873],{"class":79},[36,20687,19876],{"class":42},[36,20689,20690,20692,20694],{"class":38,"line":2365},[36,20691,18968],{"class":42},[36,20693,19883],{"class":79},[36,20695,19886],{"class":42},[36,20697,20698,20700,20702,20704],{"class":38,"line":2373},[36,20699,3968],{"class":42},[36,20701,3594],{"class":46},[36,20703,19895],{"class":50},[36,20705,3711],{"class":42},[36,20707,20708,20710],{"class":38,"line":5001},[36,20709,17114],{"class":46},[36,20711,19904],{"class":42},[36,20713,20714,20716,20718,20720,20722],{"class":38,"line":5006},[36,20715,4405],{"class":42},[36,20717,3846],{"class":46},[36,20719,19913],{"class":42},[36,20721,3846],{"class":46},[36,20723,19918],{"class":42},[36,20725,20726],{"class":38,"line":10328},[36,20727,19923],{"class":42},[36,20729,20730,20732,20734],{"class":38,"line":10352},[36,20731,19928],{"class":42},[36,20733,19873],{"class":79},[36,20735,19933],{"class":42},[36,20737,20738,20740],{"class":38,"line":10357},[36,20739,19938],{"class":79},[36,20741,19941],{"class":42},[36,20743,20744],{"class":38,"line":10363},[36,20745,3982],{"class":42},[14,20747,20749],{"id":20748},"_82对象的初始化清理","8.2对象的初始化清理",[3557,20751,20752,20755],{},[653,20753,20754],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[653,20756,20757],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1752,20759,20761],{"id":20760},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20763,20764,20765,20768],{},"对象的",[667,20766,20767],{},"初始化和清理","也是两个非常重要的安全问题",[19,20770,20771],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20773,20774],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20776,20777,20778,20781,20782,20785],{},"c++利用了",[667,20779,20780],{},"构造函数","和",[667,20783,20784],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20787,20788,20789],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[667,20790,20791],{},"我们不提供构造和析构，编译器会提供",[19,20793,20794],{},[667,20795,20796],{},"编译器提供的构造函数和析构函数是空实现。",[3557,20798,20799,20802],{},[653,20800,20801],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[653,20803,20804,20805,20808],{},"析构函数：主要作用在于对象",[667,20806,20807],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20810,20811,20814],{},[667,20812,20813],{},"构造函数语法：",[33,20815,20816],{},"类名(){}",[650,20818,20819,20822,20825,20828,20831],{},[653,20820,20821],{},"构造函数，没有返回值也不写void",[653,20823,20824],{},"函数名称与类名相同",[653,20826,20827],{},"构造函数可以有参数，因此可以发生重载",[653,20829,20830],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[653,20832,20833,20834,2985],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,20835,20836],{},"Person(){}",[19,20838,20839,16172,20842],{},[667,20840,20841],{},"析构函数语法：",[33,20843,20844],{},"~类名(){}",[650,20846,20847,20850,20853,20859],{},[653,20848,20849],{},"析构函数，没有返回值也不写void",[653,20851,20852],{},"函数名称与类名相同,在名称前加上符号  ~",[653,20854,20855,20856],{},"析构函数不可以有参数，因此",[667,20857,20858],{},"不可以发生重载",[653,20860,20861],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,20863,20865],{"className":2556,"code":20864,"language":2558,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[33,20866,20867,20873,20877,20881,20886,20893,20897,20910,20914,20919,20926,20930,20943,20947,20951,20955,20959,20967,20971,20979,20983,20987,20995,20999,21004,21008,21015,21019,21032,21036,21044],{"__ignoreMap":31},[36,20868,20869,20871],{"class":38,"line":39},[36,20870,147],{"class":46},[36,20872,17546],{"class":79},[36,20874,20875],{"class":38,"line":54},[36,20876,3963],{"class":42},[36,20878,20879],{"class":38,"line":66},[36,20880,17092],{"class":46},[36,20882,20883],{"class":38,"line":73},[36,20884,20885],{"class":2621},"    \u002F\u002F构造函数\n",[36,20887,20888,20891],{"class":38,"line":86},[36,20889,20890],{"class":79},"    Person",[36,20892,4369],{"class":42},[36,20894,20895],{"class":38,"line":126},[36,20896,4423],{"class":42},[36,20898,20899,20901,20903,20906,20908],{"class":38,"line":131},[36,20900,12048],{"class":42},[36,20902,3594],{"class":46},[36,20904,20905],{"class":50}," \"Person的构造函数调用\"",[36,20907,3861],{"class":46},[36,20909,11220],{"class":42},[36,20911,20912],{"class":38,"line":225},[36,20913,4580],{"class":42},[36,20915,20916],{"class":38,"line":235},[36,20917,20918],{"class":2621},"    \u002F\u002F析构函数\n",[36,20920,20921,20924],{"class":38,"line":377},[36,20922,20923],{"class":79},"    ~Person",[36,20925,4369],{"class":42},[36,20927,20928],{"class":38,"line":617},[36,20929,4423],{"class":42},[36,20931,20932,20934,20936,20939,20941],{"class":38,"line":643},[36,20933,12048],{"class":42},[36,20935,3594],{"class":46},[36,20937,20938],{"class":50}," \"Person的析构函数调用\"",[36,20940,3861],{"class":46},[36,20942,11220],{"class":42},[36,20944,20945],{"class":38,"line":921},[36,20946,4580],{"class":42},[36,20948,20949],{"class":38,"line":934},[36,20950,70],{"emptyLinePlaceholder":69},[36,20952,20953],{"class":38,"line":939},[36,20954,6379],{"class":42},[36,20956,20957],{"class":38,"line":949},[36,20958,70],{"emptyLinePlaceholder":69},[36,20960,20961,20963,20965],{"class":38,"line":962},[36,20962,7746],{"class":46},[36,20964,7970],{"class":79},[36,20966,4369],{"class":42},[36,20968,20969],{"class":38,"line":974},[36,20970,3963],{"class":42},[36,20972,20973,20976],{"class":38,"line":979},[36,20974,20975],{"class":42},"    Person p;",[36,20977,20978],{"class":2621},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,20980,20981],{"class":38,"line":994},[36,20982,3982],{"class":42},[36,20984,20985],{"class":38,"line":1006},[36,20986,70],{"emptyLinePlaceholder":69},[36,20988,20989,20991,20993],{"class":38,"line":1011},[36,20990,2570],{"class":46},[36,20992,4366],{"class":79},[36,20994,13232],{"class":42},[36,20996,20997],{"class":38,"line":1023},[36,20998,15587],{"class":42},[36,21000,21001],{"class":38,"line":1028},[36,21002,21003],{"class":2621},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,21005,21006],{"class":38,"line":1033},[36,21007,70],{"emptyLinePlaceholder":69},[36,21009,21010,21012],{"class":38,"line":1053},[36,21011,20975],{"class":42},[36,21013,21014],{"class":2621},"\u002F\u002F只有构造函数\n",[36,21016,21017],{"class":38,"line":1064},[36,21018,70],{"emptyLinePlaceholder":69},[36,21020,21021,21023,21025,21027,21029],{"class":38,"line":1075},[36,21022,4696],{"class":79},[36,21024,92],{"class":42},[36,21026,4701],{"class":50},[36,21028,8348],{"class":42},[36,21030,21031],{"class":2621},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,21033,21034],{"class":38,"line":2291},[36,21035,70],{"emptyLinePlaceholder":69},[36,21037,21038,21040,21042],{"class":38,"line":2329},[36,21039,6474],{"class":46},[36,21041,899],{"class":62},[36,21043,3711],{"class":42},[36,21045,21046],{"class":38,"line":2334},[36,21047,3982],{"class":42},[19,21049,21050],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1752,21052,21054],{"id":21053},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,21056,21057],{},"两种分类方式：",[19,21059,21060],{},"​\t按参数分为： 有参构造和无参构造",[19,21062,21063],{},"​\t按类型分为： 普通构造和拷贝构造",[19,21065,21066],{},"三种调用方式：",[19,21068,21069],{},"​\t括号法",[19,21071,21072],{},"​\t显示法",[19,21074,21075],{},"​\t隐式转换法",[26,21077,21079],{"className":2556,"code":21078,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[33,21080,21081,21087,21097,21102,21107,21112,21117,21121,21129,21133,21137,21141,21147,21151,21164,21168,21180,21184,21193,21206,21210,21214,21220,21224,21237,21241,21246,21262,21266,21271,21280,21293,21297,21303,21307,21312,21320,21324,21329,21333,21341,21345,21350,21355,21360,21365,21370,21374,21379,21384,21389,21394,21398,21403,21408,21423,21435,21440,21444,21449,21454,21459,21463,21468,21482,21495,21499,21507,21511,21517,21523,21531],{"__ignoreMap":31},[36,21082,21083,21085],{"class":38,"line":39},[36,21084,4343],{"class":46},[36,21086,4346],{"class":50},[36,21088,21089,21091,21093,21095],{"class":38,"line":54},[36,21090,4351],{"class":46},[36,21092,4354],{"class":46},[36,21094,4357],{"class":79},[36,21096,3711],{"class":42},[36,21098,21099],{"class":38,"line":66},[36,21100,21101],{"class":2621},"\u002F\u002F1.构造函数的分类及调用\n",[36,21103,21104],{"class":38,"line":73},[36,21105,21106],{"class":2621},"\u002F\u002F分类\n",[36,21108,21109],{"class":38,"line":86},[36,21110,21111],{"class":2621},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,21113,21114],{"class":38,"line":126},[36,21115,21116],{"class":2621},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,21118,21119],{"class":38,"line":131},[36,21120,70],{"emptyLinePlaceholder":69},[36,21122,21123,21125,21127],{"class":38,"line":225},[36,21124,147],{"class":46},[36,21126,1376],{"class":79},[36,21128,5059],{"class":42},[36,21130,21131],{"class":38,"line":235},[36,21132,3963],{"class":42},[36,21134,21135],{"class":38,"line":377},[36,21136,17092],{"class":46},[36,21138,21139],{"class":38,"line":617},[36,21140,20885],{"class":2621},[36,21142,21143,21145],{"class":38,"line":643},[36,21144,20890],{"class":79},[36,21146,4369],{"class":42},[36,21148,21149],{"class":38,"line":921},[36,21150,4423],{"class":42},[36,21152,21153,21155,21157,21160,21162],{"class":38,"line":934},[36,21154,5836],{"class":42},[36,21156,3594],{"class":46},[36,21158,21159],{"class":50},"\"Person构造函数无参构造\"",[36,21161,3594],{"class":46},[36,21163,3616],{"class":42},[36,21165,21166],{"class":38,"line":939},[36,21167,4580],{"class":42},[36,21169,21170,21172,21174,21176,21178],{"class":38,"line":949},[36,21171,20890],{"class":79},[36,21173,92],{"class":42},[36,21175,2570],{"class":46},[36,21177,3815],{"class":7598},[36,21179,123],{"class":42},[36,21181,21182],{"class":38,"line":962},[36,21183,4423],{"class":42},[36,21185,21186,21189,21191],{"class":38,"line":974},[36,21187,21188],{"class":42},"        age",[36,21190,47],{"class":46},[36,21192,8579],{"class":42},[36,21194,21195,21197,21199,21202,21204],{"class":38,"line":979},[36,21196,5836],{"class":42},[36,21198,3594],{"class":46},[36,21200,21201],{"class":50},"\"Person构造函数有参构造\"",[36,21203,3594],{"class":46},[36,21205,3616],{"class":42},[36,21207,21208],{"class":38,"line":994},[36,21209,4580],{"class":42},[36,21211,21212],{"class":38,"line":1006},[36,21213,20918],{"class":2621},[36,21215,21216,21218],{"class":38,"line":1011},[36,21217,20923],{"class":79},[36,21219,4369],{"class":42},[36,21221,21222],{"class":38,"line":1023},[36,21223,4423],{"class":42},[36,21225,21226,21228,21230,21233,21235],{"class":38,"line":1028},[36,21227,5836],{"class":42},[36,21229,3594],{"class":46},[36,21231,21232],{"class":50},"\"Person析构函数被调用\"",[36,21234,3594],{"class":46},[36,21236,3616],{"class":42},[36,21238,21239],{"class":38,"line":1033},[36,21240,4580],{"class":42},[36,21242,21243],{"class":38,"line":1053},[36,21244,21245],{"class":2621},"    \u002F\u002F拷贝构造函数\n",[36,21247,21248,21250,21252,21254,21256,21258,21260],{"class":38,"line":1064},[36,21249,20890],{"class":79},[36,21251,92],{"class":42},[36,21253,9173],{"class":46},[36,21255,1376],{"class":79},[36,21257,12963],{"class":46},[36,21259,19],{"class":7598},[36,21261,123],{"class":42},[36,21263,21264],{"class":38,"line":1075},[36,21265,4423],{"class":42},[36,21267,21268],{"class":38,"line":2291},[36,21269,21270],{"class":2621},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,21272,21273,21275,21277],{"class":38,"line":2329},[36,21274,21188],{"class":42},[36,21276,47],{"class":46},[36,21278,21279],{"class":42},"p.age;\n",[36,21281,21282,21284,21286,21289,21291],{"class":38,"line":2334},[36,21283,5836],{"class":42},[36,21285,3594],{"class":46},[36,21287,21288],{"class":50},"\"Person拷贝构造函数被调用\"",[36,21290,3594],{"class":46},[36,21292,3616],{"class":42},[36,21294,21295],{"class":38,"line":2339},[36,21296,4580],{"class":42},[36,21298,21299,21301],{"class":38,"line":2365},[36,21300,4378],{"class":46},[36,21302,10178],{"class":42},[36,21304,21305],{"class":38,"line":2373},[36,21306,6379],{"class":42},[36,21308,21309],{"class":38,"line":5001},[36,21310,21311],{"class":2621},"\u002F\u002F调用\n",[36,21313,21314,21316,21318],{"class":38,"line":5006},[36,21315,7746],{"class":46},[36,21317,7970],{"class":79},[36,21319,4369],{"class":42},[36,21321,21322],{"class":38,"line":10328},[36,21323,3963],{"class":42},[36,21325,21326],{"class":38,"line":10352},[36,21327,21328],{"class":2621},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,21330,21331],{"class":38,"line":10357},[36,21332,3982],{"class":42},[36,21334,21335,21337,21339],{"class":38,"line":10363},[36,21336,7746],{"class":46},[36,21338,8039],{"class":79},[36,21340,4369],{"class":42},[36,21342,21343],{"class":38,"line":10390},[36,21344,3963],{"class":42},[36,21346,21347],{"class":38,"line":10395},[36,21348,21349],{"class":2621},"    \u002F\u002F1.括号法\n",[36,21351,21352],{"class":38,"line":10401},[36,21353,21354],{"class":2621},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,21356,21357],{"class":38,"line":10413},[36,21358,21359],{"class":2621},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,21361,21362],{"class":38,"line":10425},[36,21363,21364],{"class":2621},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,21366,21367],{"class":38,"line":10437},[36,21368,21369],{"class":2621},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,21371,21372],{"class":38,"line":12095},[36,21373,70],{"emptyLinePlaceholder":69},[36,21375,21376],{"class":38,"line":12120},[36,21377,21378],{"class":2621},"    \u002F\u002F注意事项\n",[36,21380,21381],{"class":38,"line":12143},[36,21382,21383],{"class":2621},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,21385,21386],{"class":38,"line":12167},[36,21387,21388],{"class":2621},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,21390,21391],{"class":38,"line":12172},[36,21392,21393],{"class":2621},"    \u002F\u002F Person p4();\n",[36,21395,21396],{"class":38,"line":12177},[36,21397,70],{"emptyLinePlaceholder":69},[36,21399,21400],{"class":38,"line":12182},[36,21401,21402],{"class":2621},"    \u002F\u002F2.显示法\n",[36,21404,21405],{"class":38,"line":12191},[36,21406,21407],{"class":42},"    Person p1;\n",[36,21409,21410,21413,21415,21417,21419,21421],{"class":38,"line":12196},[36,21411,21412],{"class":42},"    Person p2",[36,21414,47],{"class":46},[36,21416,1416],{"class":79},[36,21418,92],{"class":42},[36,21420,3002],{"class":62},[36,21422,5104],{"class":42},[36,21424,21425,21428,21430,21432],{"class":38,"line":12202},[36,21426,21427],{"class":42},"    Person p3",[36,21429,47],{"class":46},[36,21431,1416],{"class":79},[36,21433,21434],{"class":42},"(p2);\n",[36,21436,21437],{"class":38,"line":12223},[36,21438,21439],{"class":2621},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,21441,21442],{"class":38,"line":12229},[36,21443,70],{"emptyLinePlaceholder":69},[36,21445,21446],{"class":38,"line":12243},[36,21447,21448],{"class":2621},"    \u002F\u002F 注意事项2\n",[36,21450,21451],{"class":38,"line":12249},[36,21452,21453],{"class":2621},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,21455,21456],{"class":38,"line":12276},[36,21457,21458],{"class":2621},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,21460,21461],{"class":38,"line":12285},[36,21462,70],{"emptyLinePlaceholder":69},[36,21464,21465],{"class":38,"line":12291},[36,21466,21467],{"class":2621},"    \u002F\u002F3.隐士转换法\n",[36,21469,21470,21473,21475,21477,21479],{"class":38,"line":12299},[36,21471,21472],{"class":42},"    Person p4",[36,21474,47],{"class":46},[36,21476,3002],{"class":62},[36,21478,2618],{"class":42},[36,21480,21481],{"class":2621},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,21483,21484,21487,21489,21492],{"class":38,"line":12304},[36,21485,21486],{"class":42},"    Person p5",[36,21488,47],{"class":46},[36,21490,21491],{"class":42},"p4;",[36,21493,21494],{"class":2621}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,21496,21497],{"class":38,"line":18977},[36,21498,3982],{"class":42},[36,21500,21501,21503,21505],{"class":38,"line":18983},[36,21502,2570],{"class":46},[36,21504,4366],{"class":79},[36,21506,4369],{"class":42},[36,21508,21509],{"class":38,"line":19006},[36,21510,3963],{"class":42},[36,21512,21513,21515],{"class":38,"line":19012},[36,21514,8015],{"class":79},[36,21516,8018],{"class":42},[36,21518,21519,21521],{"class":38,"line":19035},[36,21520,8084],{"class":79},[36,21522,8018],{"class":42},[36,21524,21525,21527,21529],{"class":38,"line":19049},[36,21526,6474],{"class":46},[36,21528,899],{"class":62},[36,21530,3711],{"class":42},[36,21532,21533],{"class":38,"line":19069},[36,21534,3982],{"class":42},[19,21536,21537,21540],{},[667,21538,21539],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1752,21542,21544],{"id":21543},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21546,21547],{},"C++中拷贝构造函数调用时机通常有三种情况",[3557,21549,21550,21553,21556],{},[653,21551,21552],{},"使用一个已经创建完毕的对象来初始化一个新对象",[653,21554,21555],{},"值传递的方式给函数参数传值",[653,21557,21558],{},"以值方式返回局部对象",[26,21560,21562],{"className":2556,"code":21561,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[33,21563,21564,21570,21580,21584,21589,21593,21598,21603,21608,21614,21618,21622,21628,21632,21645,21649,21654,21666,21670,21678,21691,21695,21699,21715,21719,21728,21741,21745,21751,21755,21767,21771,21777,21781,21785,21793,21797,21810,21818,21836,21840,21845,21850,21865,21869,21882,21886,21894,21898,21902,21910,21914,21919,21928,21932,21936,21961,21971,21975,21983,21987,21998,22023,22027,22031,22035,22043,22047,22052,22057,22064,22069,22074,22079,22084,22088,22093,22097,22102,22106,22111,22116,22120,22124,22129,22134,22142],{"__ignoreMap":31},[36,21565,21566,21568],{"class":38,"line":39},[36,21567,4343],{"class":46},[36,21569,4346],{"class":50},[36,21571,21572,21574,21576,21578],{"class":38,"line":54},[36,21573,4351],{"class":46},[36,21575,4354],{"class":46},[36,21577,4357],{"class":79},[36,21579,3711],{"class":42},[36,21581,21582],{"class":38,"line":66},[36,21583,70],{"emptyLinePlaceholder":69},[36,21585,21586],{"class":38,"line":73},[36,21587,21588],{"class":2621},"\u002F\u002F拷贝构造函数调用时机\n",[36,21590,21591],{"class":38,"line":86},[36,21592,70],{"emptyLinePlaceholder":69},[36,21594,21595],{"class":38,"line":126},[36,21596,21597],{"class":2621},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,21599,21600],{"class":38,"line":131},[36,21601,21602],{"class":2621},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,21604,21605],{"class":38,"line":225},[36,21606,21607],{"class":2621},"\u002F\u002F3.以值方式返回局部对象\n",[36,21609,21610,21612],{"class":38,"line":235},[36,21611,147],{"class":46},[36,21613,17546],{"class":79},[36,21615,21616],{"class":38,"line":377},[36,21617,3963],{"class":42},[36,21619,21620],{"class":38,"line":617},[36,21621,17092],{"class":46},[36,21623,21624,21626],{"class":38,"line":643},[36,21625,20890],{"class":79},[36,21627,4369],{"class":42},[36,21629,21630],{"class":38,"line":921},[36,21631,4423],{"class":42},[36,21633,21634,21636,21638,21641,21643],{"class":38,"line":934},[36,21635,12048],{"class":42},[36,21637,3594],{"class":46},[36,21639,21640],{"class":50}," \"Person的默认构造函数调用\"",[36,21642,3861],{"class":46},[36,21644,11220],{"class":42},[36,21646,21647],{"class":38,"line":939},[36,21648,4580],{"class":42},[36,21650,21651],{"class":38,"line":949},[36,21652,21653],{"class":2621},"    \u002F\u002F有参构造\n",[36,21655,21656,21658,21660,21662,21664],{"class":38,"line":962},[36,21657,20890],{"class":79},[36,21659,92],{"class":42},[36,21661,2570],{"class":46},[36,21663,18062],{"class":7598},[36,21665,123],{"class":42},[36,21667,21668],{"class":38,"line":974},[36,21669,4423],{"class":42},[36,21671,21672,21674,21676],{"class":38,"line":979},[36,21673,18116],{"class":42},[36,21675,47],{"class":46},[36,21677,10178],{"class":42},[36,21679,21680,21682,21684,21687,21689],{"class":38,"line":994},[36,21681,12048],{"class":42},[36,21683,3594],{"class":46},[36,21685,21686],{"class":50}," \"Person的有参构造函数调用\"",[36,21688,3861],{"class":46},[36,21690,11220],{"class":42},[36,21692,21693],{"class":38,"line":1006},[36,21694,4580],{"class":42},[36,21696,21697],{"class":38,"line":1011},[36,21698,21245],{"class":2621},[36,21700,21701,21703,21705,21707,21709,21711,21713],{"class":38,"line":1023},[36,21702,20890],{"class":79},[36,21704,92],{"class":42},[36,21706,9173],{"class":46},[36,21708,1376],{"class":79},[36,21710,12963],{"class":46},[36,21712,19],{"class":7598},[36,21714,123],{"class":42},[36,21716,21717],{"class":38,"line":1028},[36,21718,4423],{"class":42},[36,21720,21721,21723,21725],{"class":38,"line":1033},[36,21722,18116],{"class":42},[36,21724,47],{"class":46},[36,21726,21727],{"class":42}," p.m_Age;\n",[36,21729,21730,21732,21734,21737,21739],{"class":38,"line":1053},[36,21731,12048],{"class":42},[36,21733,3594],{"class":46},[36,21735,21736],{"class":50}," \"Person的拷贝构造函数调用\"",[36,21738,3861],{"class":46},[36,21740,11220],{"class":42},[36,21742,21743],{"class":38,"line":1064},[36,21744,4580],{"class":42},[36,21746,21747,21749],{"class":38,"line":1075},[36,21748,20923],{"class":79},[36,21750,4369],{"class":42},[36,21752,21753],{"class":38,"line":2291},[36,21754,4423],{"class":42},[36,21756,21757,21759,21761,21763,21765],{"class":38,"line":2329},[36,21758,12048],{"class":42},[36,21760,3594],{"class":46},[36,21762,20938],{"class":50},[36,21764,3861],{"class":46},[36,21766,11220],{"class":42},[36,21768,21769],{"class":38,"line":2334},[36,21770,4580],{"class":42},[36,21772,21773,21775],{"class":38,"line":2339},[36,21774,4378],{"class":46},[36,21776,18039],{"class":42},[36,21778,21779],{"class":38,"line":2365},[36,21780,6379],{"class":42},[36,21782,21783],{"class":38,"line":2373},[36,21784,21597],{"class":2621},[36,21786,21787,21789,21791],{"class":38,"line":5001},[36,21788,7746],{"class":46},[36,21790,7970],{"class":79},[36,21792,4369],{"class":42},[36,21794,21795],{"class":38,"line":5006},[36,21796,3963],{"class":42},[36,21798,21799,21802,21804,21806,21808],{"class":38,"line":10328},[36,21800,21801],{"class":42},"    Person ",[36,21803,9511],{"class":79},[36,21805,92],{"class":42},[36,21807,3254],{"class":62},[36,21809,5104],{"class":42},[36,21811,21812,21814,21816],{"class":38,"line":10352},[36,21813,21801],{"class":42},[36,21815,9414],{"class":79},[36,21817,19886],{"class":42},[36,21819,21820,21822,21824,21827,21829,21832,21834],{"class":38,"line":10357},[36,21821,3968],{"class":42},[36,21823,3594],{"class":46},[36,21825,21826],{"class":50},"\"P2的年龄为：\"",[36,21828,3594],{"class":46},[36,21830,21831],{"class":42},"p2.m_Age",[36,21833,3594],{"class":46},[36,21835,3616],{"class":42},[36,21837,21838],{"class":38,"line":10363},[36,21839,3982],{"class":42},[36,21841,21842],{"class":38,"line":10390},[36,21843,21844],{"class":2621},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,21846,21847],{"class":38,"line":10395},[36,21848,21849],{"class":2621},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,21851,21852,21854,21857,21859,21861,21863],{"class":38,"line":10401},[36,21853,7746],{"class":46},[36,21855,21856],{"class":79}," doWork",[36,21858,92],{"class":42},[36,21860,1416],{"class":79},[36,21862,9206],{"class":7598},[36,21864,123],{"class":42},[36,21866,21867],{"class":38,"line":10413},[36,21868,3963],{"class":42},[36,21870,21871,21873,21875,21878,21880],{"class":38,"line":10425},[36,21872,8910],{"class":42},[36,21874,3594],{"class":46},[36,21876,21877],{"class":50}," \"doWork函数调用\"",[36,21879,3861],{"class":46},[36,21881,11220],{"class":42},[36,21883,21884],{"class":38,"line":10437},[36,21885,3982],{"class":42},[36,21887,21888,21890,21892],{"class":38,"line":12095},[36,21889,7746],{"class":46},[36,21891,8039],{"class":79},[36,21893,4369],{"class":42},[36,21895,21896],{"class":38,"line":12120},[36,21897,3963],{"class":42},[36,21899,21900],{"class":38,"line":12143},[36,21901,17688],{"class":42},[36,21903,21904,21907],{"class":38,"line":12167},[36,21905,21906],{"class":79},"    doWork",[36,21908,21909],{"class":42},"(p);\n",[36,21911,21912],{"class":38,"line":12172},[36,21913,3982],{"class":42},[36,21915,21916],{"class":38,"line":12177},[36,21917,21918],{"class":2621},"\u002F\u002F 3.以值方式返回局部对象\n",[36,21920,21921,21923,21926],{"class":38,"line":12182},[36,21922,1416],{"class":79},[36,21924,21925],{"class":79}," doWork2",[36,21927,4369],{"class":42},[36,21929,21930],{"class":38,"line":12191},[36,21931,3963],{"class":42},[36,21933,21934],{"class":38,"line":12196},[36,21935,21407],{"class":42},[36,21937,21938,21940,21942,21944,21946,21948,21950,21952,21954,21956,21958],{"class":38,"line":12202},[36,21939,3968],{"class":42},[36,21941,3594],{"class":46},[36,21943,92],{"class":42},[36,21945,2570],{"class":46},[36,21947,8899],{"class":46},[36,21949,2985],{"class":42},[36,21951,2909],{"class":46},[36,21953,9511],{"class":42},[36,21955,3594],{"class":46},[36,21957,3659],{"class":42},[36,21959,21960],{"class":2621},"\u002F\u002F打印p1的地址\n",[36,21962,21963,21965,21968],{"class":38,"line":12223},[36,21964,6474],{"class":46},[36,21966,21967],{"class":42}," p1;",[36,21969,21970],{"class":2621},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,21972,21973],{"class":38,"line":12229},[36,21974,3982],{"class":42},[36,21976,21977,21979,21981],{"class":38,"line":12243},[36,21978,7746],{"class":46},[36,21980,8111],{"class":79},[36,21982,4369],{"class":42},[36,21984,21985],{"class":38,"line":12249},[36,21986,3963],{"class":42},[36,21988,21989,21992,21994,21996],{"class":38,"line":12276},[36,21990,21991],{"class":42},"    Person p ",[36,21993,47],{"class":46},[36,21995,21925],{"class":79},[36,21997,8018],{"class":42},[36,21999,22000,22002,22004,22006,22008,22010,22012,22014,22016,22018,22020],{"class":38,"line":12285},[36,22001,3968],{"class":42},[36,22003,3594],{"class":46},[36,22005,92],{"class":42},[36,22007,2570],{"class":46},[36,22009,8899],{"class":46},[36,22011,2985],{"class":42},[36,22013,2909],{"class":46},[36,22015,19],{"class":42},[36,22017,3594],{"class":46},[36,22019,3659],{"class":42},[36,22021,22022],{"class":2621},"\u002F\u002F打印p的地址\n",[36,22024,22025],{"class":38,"line":12291},[36,22026,3982],{"class":42},[36,22028,22029],{"class":38,"line":12299},[36,22030,70],{"emptyLinePlaceholder":69},[36,22032,22033],{"class":38,"line":12304},[36,22034,70],{"emptyLinePlaceholder":69},[36,22036,22037,22039,22041],{"class":38,"line":18977},[36,22038,2570],{"class":46},[36,22040,4366],{"class":79},[36,22042,4369],{"class":42},[36,22044,22045],{"class":38,"line":18983},[36,22046,3963],{"class":42},[36,22048,22049],{"class":38,"line":19006},[36,22050,22051],{"class":2621},"    \u002F\u002F test01();\n",[36,22053,22054],{"class":38,"line":19012},[36,22055,22056],{"class":2621},"    \u002F\u002F test02();\n",[36,22058,22059,22062],{"class":38,"line":19035},[36,22060,22061],{"class":79},"    test03",[36,22063,8018],{"class":42},[36,22065,22066],{"class":38,"line":19049},[36,22067,22068],{"class":2621},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,22070,22071],{"class":38,"line":19069},[36,22072,22073],{"class":2621},"\u002F\u002F 输出结果如下：\n",[36,22075,22076],{"class":38,"line":19075},[36,22077,22078],{"class":2621},"\u002F\u002F Person的默认构造函数调用\n",[36,22080,22081],{"class":38,"line":19086},[36,22082,22083],{"class":2621},"\u002F\u002F 0x7fffffffceec\n",[36,22085,22086],{"class":38,"line":19109},[36,22087,22083],{"class":2621},[36,22089,22090],{"class":38,"line":19131},[36,22091,22092],{"class":2621},"\u002F\u002F Person的析构函数调用\n",[36,22094,22095],{"class":38,"line":19136},[36,22096,70],{"emptyLinePlaceholder":69},[36,22098,22099],{"class":38,"line":19142},[36,22100,22101],{"class":2621},"\u002F\u002F 之前的输出结果如下：\n",[36,22103,22104],{"class":38,"line":19156},[36,22105,22078],{"class":2621},[36,22107,22108],{"class":38,"line":19169},[36,22109,22110],{"class":2621},"\u002F\u002F 地址\n",[36,22112,22113],{"class":38,"line":19174},[36,22114,22115],{"class":2621},"\u002F\u002F Person的拷贝构造函数调用\n",[36,22117,22118],{"class":38,"line":19188},[36,22119,22092],{"class":2621},[36,22121,22122],{"class":38,"line":19193},[36,22123,22110],{"class":2621},[36,22125,22126],{"class":38,"line":19199},[36,22127,22128],{"class":2621},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,22130,22131],{"class":38,"line":19204},[36,22132,22133],{"class":2621},"\u002F\u002F Person的析构函数调用     \n",[36,22135,22136,22138,22140],{"class":38,"line":19218},[36,22137,6474],{"class":46},[36,22139,899],{"class":62},[36,22141,3711],{"class":42},[36,22143,22144],{"class":38,"line":19223},[36,22145,3982],{"class":42},[19,22147,22148],{},"简化版理解",[26,22150,22152],{"className":2556,"code":22151,"language":2558,"meta":31,"style":31},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,22153,22154,22162,22166,22172,22185,22196,22200,22212,22225,22233,22237,22253,22266,22275,22279,22284,22290,22303,22307,22311,22318,22322,22326,22331,22339,22343,22359,22372,22385,22389,22394,22402,22406,22410,22415,22420,22436,22444,22451,22457,22461,22465,22470,22478,22482,22486,22509,22516,22520,22524,22532,22536,22546,22568,22572,22576,22580,22588,22592,22597,22602,22608,22612,22622,22626,22634],{"__ignoreMap":31},[36,22155,22156,22158,22160],{"class":38,"line":39},[36,22157,147],{"class":46},[36,22159,1376],{"class":79},[36,22161,2150],{"class":42},[36,22163,22164],{"class":38,"line":54},[36,22165,17092],{"class":46},[36,22167,22168,22170],{"class":38,"line":66},[36,22169,20890],{"class":79},[36,22171,13232],{"class":42},[36,22173,22174,22176,22178,22181,22183],{"class":38,"line":73},[36,22175,12048],{"class":42},[36,22177,3594],{"class":46},[36,22179,22180],{"class":50}," \"无参构造函数!\"",[36,22182,3861],{"class":46},[36,22184,11220],{"class":42},[36,22186,22187,22190,22192,22194],{"class":38,"line":86},[36,22188,22189],{"class":42},"        mAge ",[36,22191,47],{"class":46},[36,22193,899],{"class":62},[36,22195,3711],{"class":42},[36,22197,22198],{"class":38,"line":126},[36,22199,4580],{"class":42},[36,22201,22202,22204,22206,22208,22210],{"class":38,"line":131},[36,22203,20890],{"class":79},[36,22205,92],{"class":42},[36,22207,2570],{"class":46},[36,22209,18062],{"class":7598},[36,22211,14819],{"class":42},[36,22213,22214,22216,22218,22221,22223],{"class":38,"line":225},[36,22215,12048],{"class":42},[36,22217,3594],{"class":46},[36,22219,22220],{"class":50}," \"有参构造函数!\"",[36,22222,3861],{"class":46},[36,22224,11220],{"class":42},[36,22226,22227,22229,22231],{"class":38,"line":235},[36,22228,22189],{"class":42},[36,22230,47],{"class":46},[36,22232,10178],{"class":42},[36,22234,22235],{"class":38,"line":377},[36,22236,4580],{"class":42},[36,22238,22239,22241,22243,22245,22247,22249,22251],{"class":38,"line":617},[36,22240,20890],{"class":79},[36,22242,92],{"class":42},[36,22244,9173],{"class":46},[36,22246,1376],{"class":79},[36,22248,2909],{"class":46},[36,22250,9206],{"class":7598},[36,22252,14819],{"class":42},[36,22254,22255,22257,22259,22262,22264],{"class":38,"line":643},[36,22256,12048],{"class":42},[36,22258,3594],{"class":46},[36,22260,22261],{"class":50}," \"拷贝构造函数!\"",[36,22263,3861],{"class":46},[36,22265,11220],{"class":42},[36,22267,22268,22270,22272],{"class":38,"line":921},[36,22269,22189],{"class":42},[36,22271,47],{"class":46},[36,22273,22274],{"class":42}," p.mAge;\n",[36,22276,22277],{"class":38,"line":934},[36,22278,4580],{"class":42},[36,22280,22281],{"class":38,"line":939},[36,22282,22283],{"class":2621},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,22285,22286,22288],{"class":38,"line":949},[36,22287,20923],{"class":79},[36,22289,13232],{"class":42},[36,22291,22292,22294,22296,22299,22301],{"class":38,"line":962},[36,22293,12048],{"class":42},[36,22295,3594],{"class":46},[36,22297,22298],{"class":50}," \"析构函数!\"",[36,22300,3861],{"class":46},[36,22302,11220],{"class":42},[36,22304,22305],{"class":38,"line":974},[36,22306,4580],{"class":42},[36,22308,22309],{"class":38,"line":979},[36,22310,17092],{"class":46},[36,22312,22313,22315],{"class":38,"line":994},[36,22314,4378],{"class":46},[36,22316,22317],{"class":42}," mAge;\n",[36,22319,22320],{"class":38,"line":1006},[36,22321,6379],{"class":42},[36,22323,22324],{"class":38,"line":1011},[36,22325,70],{"emptyLinePlaceholder":69},[36,22327,22328],{"class":38,"line":1023},[36,22329,22330],{"class":2621},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,22332,22333,22335,22337],{"class":38,"line":1028},[36,22334,7746],{"class":46},[36,22336,7970],{"class":79},[36,22338,13232],{"class":42},[36,22340,22341],{"class":38,"line":1033},[36,22342,70],{"emptyLinePlaceholder":69},[36,22344,22345,22347,22350,22352,22354,22356],{"class":38,"line":1053},[36,22346,21801],{"class":42},[36,22348,22349],{"class":79},"man",[36,22351,92],{"class":42},[36,22353,1070],{"class":62},[36,22355,8348],{"class":42},[36,22357,22358],{"class":2621}," \u002F\u002Fp对象已经创建完毕\n",[36,22360,22361,22363,22366,22369],{"class":38,"line":1064},[36,22362,21801],{"class":42},[36,22364,22365],{"class":79},"newman",[36,22367,22368],{"class":42},"(man);",[36,22370,22371],{"class":2621}," \u002F\u002F调用拷贝构造函数\n",[36,22373,22374,22377,22379,22382],{"class":38,"line":1075},[36,22375,22376],{"class":42},"    Person newman2 ",[36,22378,47],{"class":46},[36,22380,22381],{"class":42}," man;",[36,22383,22384],{"class":2621}," \u002F\u002F拷贝构造\n",[36,22386,22387],{"class":38,"line":2291},[36,22388,70],{"emptyLinePlaceholder":69},[36,22390,22391],{"class":38,"line":2329},[36,22392,22393],{"class":2621},"    \u002F\u002FPerson newman3;\n",[36,22395,22396,22399],{"class":38,"line":2334},[36,22397,22398],{"class":2621},"    \u002F\u002Fnewman3 = man;",[36,22400,22401],{"class":2621}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,22403,22404],{"class":38,"line":2339},[36,22405,3982],{"class":42},[36,22407,22408],{"class":38,"line":2365},[36,22409,70],{"emptyLinePlaceholder":69},[36,22411,22412],{"class":38,"line":2373},[36,22413,22414],{"class":2621},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,22416,22417],{"class":38,"line":5001},[36,22418,22419],{"class":2621},"\u002F\u002F相当于Person p1 = p;\n",[36,22421,22422,22424,22426,22428,22430,22433],{"class":38,"line":5006},[36,22423,7746],{"class":46},[36,22425,21856],{"class":79},[36,22427,92],{"class":42},[36,22429,1416],{"class":79},[36,22431,22432],{"class":7598}," p1",[36,22434,22435],{"class":42},") {}\n",[36,22437,22438,22440,22442],{"class":38,"line":10328},[36,22439,7746],{"class":46},[36,22441,8039],{"class":79},[36,22443,13232],{"class":42},[36,22445,22446,22448],{"class":38,"line":10352},[36,22447,20975],{"class":42},[36,22449,22450],{"class":2621}," \u002F\u002F无参构造函数\n",[36,22452,22453,22455],{"class":38,"line":10357},[36,22454,21906],{"class":79},[36,22456,21909],{"class":42},[36,22458,22459],{"class":38,"line":10363},[36,22460,3982],{"class":42},[36,22462,22463],{"class":38,"line":10390},[36,22464,70],{"emptyLinePlaceholder":69},[36,22466,22467],{"class":38,"line":10395},[36,22468,22469],{"class":2621},"\u002F\u002F3. 以值方式返回局部对象\n",[36,22471,22472,22474,22476],{"class":38,"line":10401},[36,22473,1416],{"class":79},[36,22475,21925],{"class":79},[36,22477,4369],{"class":42},[36,22479,22480],{"class":38,"line":10413},[36,22481,3963],{"class":42},[36,22483,22484],{"class":38,"line":10425},[36,22485,21407],{"class":42},[36,22487,22488,22490,22492,22494,22496,22498,22500,22502,22505,22507],{"class":38,"line":10437},[36,22489,8910],{"class":42},[36,22491,3594],{"class":46},[36,22493,4066],{"class":42},[36,22495,2570],{"class":46},[36,22497,8899],{"class":46},[36,22499,2985],{"class":42},[36,22501,2909],{"class":46},[36,22503,22504],{"class":42},"p1 ",[36,22506,3594],{"class":46},[36,22508,11220],{"class":42},[36,22510,22511,22513],{"class":38,"line":12095},[36,22512,6474],{"class":46},[36,22514,22515],{"class":42}," p1;\n",[36,22517,22518],{"class":38,"line":12120},[36,22519,3982],{"class":42},[36,22521,22522],{"class":38,"line":12143},[36,22523,70],{"emptyLinePlaceholder":69},[36,22525,22526,22528,22530],{"class":38,"line":12167},[36,22527,7746],{"class":46},[36,22529,8111],{"class":79},[36,22531,4369],{"class":42},[36,22533,22534],{"class":38,"line":12172},[36,22535,3963],{"class":42},[36,22537,22538,22540,22542,22544],{"class":38,"line":12177},[36,22539,21991],{"class":42},[36,22541,47],{"class":46},[36,22543,21925],{"class":79},[36,22545,8018],{"class":42},[36,22547,22548,22550,22552,22554,22556,22558,22560,22562,22564,22566],{"class":38,"line":12182},[36,22549,8910],{"class":42},[36,22551,3594],{"class":46},[36,22553,4066],{"class":42},[36,22555,2570],{"class":46},[36,22557,8899],{"class":46},[36,22559,2985],{"class":42},[36,22561,2909],{"class":46},[36,22563,13826],{"class":42},[36,22565,3594],{"class":46},[36,22567,11220],{"class":42},[36,22569,22570],{"class":38,"line":12191},[36,22571,3982],{"class":42},[36,22573,22574],{"class":38,"line":12196},[36,22575,70],{"emptyLinePlaceholder":69},[36,22577,22578],{"class":38,"line":12202},[36,22579,70],{"emptyLinePlaceholder":69},[36,22581,22582,22584,22586],{"class":38,"line":12223},[36,22583,2570],{"class":46},[36,22585,4366],{"class":79},[36,22587,13232],{"class":42},[36,22589,22590],{"class":38,"line":12229},[36,22591,70],{"emptyLinePlaceholder":69},[36,22593,22594],{"class":38,"line":12243},[36,22595,22596],{"class":2621},"    \u002F\u002Ftest01();\n",[36,22598,22599],{"class":38,"line":12249},[36,22600,22601],{"class":2621},"    \u002F\u002Ftest02();\n",[36,22603,22604,22606],{"class":38,"line":12276},[36,22605,22061],{"class":79},[36,22607,8018],{"class":42},[36,22609,22610],{"class":38,"line":12285},[36,22611,70],{"emptyLinePlaceholder":69},[36,22613,22614,22616,22618,22620],{"class":38,"line":12291},[36,22615,4696],{"class":79},[36,22617,92],{"class":42},[36,22619,4701],{"class":50},[36,22621,5104],{"class":42},[36,22623,22624],{"class":38,"line":12299},[36,22625,70],{"emptyLinePlaceholder":69},[36,22627,22628,22630,22632],{"class":38,"line":12304},[36,22629,6474],{"class":46},[36,22631,899],{"class":62},[36,22633,3711],{"class":42},[36,22635,22636],{"class":38,"line":18977},[36,22637,3982],{"class":42},[1752,22639,22641],{"id":22640},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22643,22644],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22646,22647],{},"1．默认构造函数(无参，函数体为空)",[19,22649,22650],{},"2．默认析构函数(无参，函数体为空)",[19,22652,22653],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22655,22656],{},"构造函数调用规则如下：",[3557,22658,22659,22662],{},[653,22660,22661],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[653,22663,22664],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,22666,22668],{"className":2556,"code":22667,"language":2558,"meta":31,"style":31},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,22669,22670,22678,22682,22687,22693,22705,22709,22714,22726,22735,22747,22751,22755,22771,22780,22792,22796,22800,22806,22818,22822,22826,22832,22836,22840,22848,22852,22864,22869,22877,22881,22899,22903,22907,22915,22919,22924,22932,22947,22960,22964,22969,22976,22992,23005,23009,23013,23021,23025,23031,23035,23045,23049,23057],{"__ignoreMap":31},[36,22671,22672,22674,22676],{"class":38,"line":39},[36,22673,147],{"class":46},[36,22675,1376],{"class":79},[36,22677,2150],{"class":42},[36,22679,22680],{"class":38,"line":54},[36,22681,17092],{"class":46},[36,22683,22684],{"class":38,"line":66},[36,22685,22686],{"class":2621},"    \u002F\u002F无参（默认）构造函数\n",[36,22688,22689,22691],{"class":38,"line":73},[36,22690,20890],{"class":79},[36,22692,13232],{"class":42},[36,22694,22695,22697,22699,22701,22703],{"class":38,"line":86},[36,22696,12048],{"class":42},[36,22698,3594],{"class":46},[36,22700,22180],{"class":50},[36,22702,3861],{"class":46},[36,22704,11220],{"class":42},[36,22706,22707],{"class":38,"line":126},[36,22708,4580],{"class":42},[36,22710,22711],{"class":38,"line":131},[36,22712,22713],{"class":2621},"    \u002F\u002F有参构造函数\n",[36,22715,22716,22718,22720,22722,22724],{"class":38,"line":225},[36,22717,20890],{"class":79},[36,22719,92],{"class":42},[36,22721,2570],{"class":46},[36,22723,3815],{"class":7598},[36,22725,14819],{"class":42},[36,22727,22728,22731,22733],{"class":38,"line":235},[36,22729,22730],{"class":42},"        age ",[36,22732,47],{"class":46},[36,22734,3849],{"class":42},[36,22736,22737,22739,22741,22743,22745],{"class":38,"line":377},[36,22738,12048],{"class":42},[36,22740,3594],{"class":46},[36,22742,22220],{"class":50},[36,22744,3861],{"class":46},[36,22746,11220],{"class":42},[36,22748,22749],{"class":38,"line":617},[36,22750,4580],{"class":42},[36,22752,22753],{"class":38,"line":643},[36,22754,21245],{"class":2621},[36,22756,22757,22759,22761,22763,22765,22767,22769],{"class":38,"line":921},[36,22758,20890],{"class":79},[36,22760,92],{"class":42},[36,22762,9173],{"class":46},[36,22764,1376],{"class":79},[36,22766,2909],{"class":46},[36,22768,9206],{"class":7598},[36,22770,14819],{"class":42},[36,22772,22773,22775,22777],{"class":38,"line":934},[36,22774,22730],{"class":42},[36,22776,47],{"class":46},[36,22778,22779],{"class":42}," p.age;\n",[36,22781,22782,22784,22786,22788,22790],{"class":38,"line":939},[36,22783,12048],{"class":42},[36,22785,3594],{"class":46},[36,22787,22261],{"class":50},[36,22789,3861],{"class":46},[36,22791,11220],{"class":42},[36,22793,22794],{"class":38,"line":949},[36,22795,4580],{"class":42},[36,22797,22798],{"class":38,"line":962},[36,22799,20918],{"class":2621},[36,22801,22802,22804],{"class":38,"line":974},[36,22803,20923],{"class":79},[36,22805,13232],{"class":42},[36,22807,22808,22810,22812,22814,22816],{"class":38,"line":979},[36,22809,12048],{"class":42},[36,22811,3594],{"class":46},[36,22813,22298],{"class":50},[36,22815,3861],{"class":46},[36,22817,11220],{"class":42},[36,22819,22820],{"class":38,"line":994},[36,22821,4580],{"class":42},[36,22823,22824],{"class":38,"line":1006},[36,22825,17092],{"class":46},[36,22827,22828,22830],{"class":38,"line":1011},[36,22829,4378],{"class":46},[36,22831,10178],{"class":42},[36,22833,22834],{"class":38,"line":1023},[36,22835,6379],{"class":42},[36,22837,22838],{"class":38,"line":1028},[36,22839,70],{"emptyLinePlaceholder":69},[36,22841,22842,22844,22846],{"class":38,"line":1033},[36,22843,7746],{"class":46},[36,22845,7970],{"class":79},[36,22847,4369],{"class":42},[36,22849,22850],{"class":38,"line":1053},[36,22851,3963],{"class":42},[36,22853,22854,22856,22858,22860,22862],{"class":38,"line":1064},[36,22855,21801],{"class":42},[36,22857,9511],{"class":79},[36,22859,92],{"class":42},[36,22861,633],{"class":62},[36,22863,5104],{"class":42},[36,22865,22866],{"class":38,"line":1075},[36,22867,22868],{"class":2621},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,22870,22871,22873,22875],{"class":38,"line":2291},[36,22872,21801],{"class":42},[36,22874,9414],{"class":79},[36,22876,19886],{"class":42},[36,22878,22879],{"class":38,"line":2329},[36,22880,70],{"emptyLinePlaceholder":69},[36,22882,22883,22885,22887,22890,22892,22895,22897],{"class":38,"line":2334},[36,22884,8910],{"class":42},[36,22886,3594],{"class":46},[36,22888,22889],{"class":50}," \"p2的年龄为： \"",[36,22891,3861],{"class":46},[36,22893,22894],{"class":42}," p2.age ",[36,22896,3594],{"class":46},[36,22898,11220],{"class":42},[36,22900,22901],{"class":38,"line":2339},[36,22902,3982],{"class":42},[36,22904,22905],{"class":38,"line":2365},[36,22906,70],{"emptyLinePlaceholder":69},[36,22908,22909,22911,22913],{"class":38,"line":2373},[36,22910,7746],{"class":46},[36,22912,8039],{"class":79},[36,22914,4369],{"class":42},[36,22916,22917],{"class":38,"line":5001},[36,22918,3963],{"class":42},[36,22920,22921],{"class":38,"line":5006},[36,22922,22923],{"class":2621},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,22925,22926,22929],{"class":38,"line":10328},[36,22927,22928],{"class":42},"    Person p1;",[36,22930,22931],{"class":2621}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,22933,22934,22936,22938,22940,22942,22944],{"class":38,"line":10352},[36,22935,21801],{"class":42},[36,22937,9414],{"class":79},[36,22939,92],{"class":42},[36,22941,3002],{"class":62},[36,22943,8348],{"class":42},[36,22945,22946],{"class":2621}," \u002F\u002F用户提供的有参\n",[36,22948,22949,22951,22954,22957],{"class":38,"line":10357},[36,22950,21801],{"class":42},[36,22952,22953],{"class":79},"p3",[36,22955,22956],{"class":42},"(p2);",[36,22958,22959],{"class":2621}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,22961,22962],{"class":38,"line":10363},[36,22963,70],{"emptyLinePlaceholder":69},[36,22965,22966],{"class":38,"line":10390},[36,22967,22968],{"class":2621},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,22970,22971,22974],{"class":38,"line":10395},[36,22972,22973],{"class":42},"    Person p4;",[36,22975,22931],{"class":2621},[36,22977,22978,22980,22983,22985,22987,22989],{"class":38,"line":10401},[36,22979,21801],{"class":42},[36,22981,22982],{"class":79},"p5",[36,22984,92],{"class":42},[36,22986,3002],{"class":62},[36,22988,8348],{"class":42},[36,22990,22991],{"class":2621}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,22993,22994,22996,22999,23002],{"class":38,"line":10413},[36,22995,21801],{"class":42},[36,22997,22998],{"class":79},"p6",[36,23000,23001],{"class":42},"(p5);",[36,23003,23004],{"class":2621}," \u002F\u002F用户自己提供拷贝构造\n",[36,23006,23007],{"class":38,"line":10425},[36,23008,3982],{"class":42},[36,23010,23011],{"class":38,"line":10437},[36,23012,70],{"emptyLinePlaceholder":69},[36,23014,23015,23017,23019],{"class":38,"line":12095},[36,23016,2570],{"class":46},[36,23018,4366],{"class":79},[36,23020,13232],{"class":42},[36,23022,23023],{"class":38,"line":12120},[36,23024,70],{"emptyLinePlaceholder":69},[36,23026,23027,23029],{"class":38,"line":12143},[36,23028,8015],{"class":79},[36,23030,8018],{"class":42},[36,23032,23033],{"class":38,"line":12167},[36,23034,70],{"emptyLinePlaceholder":69},[36,23036,23037,23039,23041,23043],{"class":38,"line":12172},[36,23038,4696],{"class":79},[36,23040,92],{"class":42},[36,23042,4701],{"class":50},[36,23044,5104],{"class":42},[36,23046,23047],{"class":38,"line":12177},[36,23048,70],{"emptyLinePlaceholder":69},[36,23050,23051,23053,23055],{"class":38,"line":12182},[36,23052,6474],{"class":46},[36,23054,899],{"class":62},[36,23056,3711],{"class":42},[36,23058,23059],{"class":38,"line":12191},[36,23060,3982],{"class":42},[1752,23062,23064],{"id":23063},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,23066,23067],{},"浅拷贝：简单的赋值拷贝操作",[19,23069,23070],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,23072,23074],{"className":2556,"code":23073,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[33,23075,23076,23082,23092,23098,23102,23106,23111,23117,23121,23134,23138,23142,23149,23153,23163,23178,23191,23195,23200,23205,23221,23225,23238,23243,23248,23253,23262,23267,23282,23286,23290,23294,23300,23304,23309,23324,23328,23339,23353,23357,23366,23370,23376,23388,23392,23400,23404,23421,23452,23460,23488,23492,23496,23504,23508,23514],{"__ignoreMap":31},[36,23077,23078,23080],{"class":38,"line":39},[36,23079,4343],{"class":46},[36,23081,4346],{"class":50},[36,23083,23084,23086,23088,23090],{"class":38,"line":54},[36,23085,4351],{"class":46},[36,23087,4354],{"class":46},[36,23089,4357],{"class":79},[36,23091,3711],{"class":42},[36,23093,23094,23096],{"class":38,"line":66},[36,23095,147],{"class":46},[36,23097,17546],{"class":79},[36,23099,23100],{"class":38,"line":73},[36,23101,3963],{"class":42},[36,23103,23104],{"class":38,"line":86},[36,23105,17092],{"class":46},[36,23107,23108],{"class":38,"line":126},[36,23109,23110],{"class":2621},"    \u002F\u002F默认构造函数\n",[36,23112,23113,23115],{"class":38,"line":131},[36,23114,20890],{"class":79},[36,23116,4369],{"class":42},[36,23118,23119],{"class":38,"line":225},[36,23120,4423],{"class":42},[36,23122,23123,23125,23127,23130,23132],{"class":38,"line":235},[36,23124,5836],{"class":42},[36,23126,3594],{"class":46},[36,23128,23129],{"class":50},"\"默认构造函数\"",[36,23131,3594],{"class":46},[36,23133,3616],{"class":42},[36,23135,23136],{"class":38,"line":377},[36,23137,4580],{"class":42},[36,23139,23140],{"class":38,"line":617},[36,23141,22713],{"class":2621},[36,23143,23144,23146],{"class":38,"line":643},[36,23145,20923],{"class":79},[36,23147,23148],{"class":42},"(int age,int height)\n",[36,23150,23151],{"class":38,"line":921},[36,23152,4423],{"class":42},[36,23154,23155,23158,23160],{"class":38,"line":934},[36,23156,23157],{"class":42},"        m_Age",[36,23159,47],{"class":46},[36,23161,23162],{"class":42},"age;\n",[36,23164,23165,23168,23170,23172,23175],{"class":38,"line":939},[36,23166,23167],{"class":42},"        m_Height",[36,23169,14095],{"class":46},[36,23171,4775],{"class":46},[36,23173,23174],{"class":42},"(height);",[36,23176,23177],{"class":2621},"\u002F\u002F放到堆区\n",[36,23179,23180,23182,23184,23187,23189],{"class":38,"line":949},[36,23181,5836],{"class":42},[36,23183,3594],{"class":46},[36,23185,23186],{"class":50},"\"有参构造函数\"",[36,23188,3594],{"class":46},[36,23190,3616],{"class":42},[36,23192,23193],{"class":38,"line":962},[36,23194,4580],{"class":42},[36,23196,23197],{"class":38,"line":974},[36,23198,23199],{"class":2621},"    \u002F\u002F深拷贝解决上述问题\n",[36,23201,23202],{"class":38,"line":979},[36,23203,23204],{"class":2621},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,23206,23207,23209,23211,23213,23215,23217,23219],{"class":38,"line":994},[36,23208,20890],{"class":79},[36,23210,92],{"class":42},[36,23212,9173],{"class":46},[36,23214,1376],{"class":79},[36,23216,12963],{"class":46},[36,23218,19],{"class":7598},[36,23220,123],{"class":42},[36,23222,23223],{"class":38,"line":1006},[36,23224,4423],{"class":42},[36,23226,23227,23229,23231,23234,23236],{"class":38,"line":1011},[36,23228,5836],{"class":42},[36,23230,3594],{"class":46},[36,23232,23233],{"class":50},"\"拷贝构造函数\"",[36,23235,3594],{"class":46},[36,23237,3616],{"class":42},[36,23239,23240],{"class":38,"line":1023},[36,23241,23242],{"class":2621},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,23244,23245],{"class":38,"line":1028},[36,23246,23247],{"class":2621},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,23249,23250],{"class":38,"line":1033},[36,23251,23252],{"class":2621},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,23254,23255,23257,23259],{"class":38,"line":1053},[36,23256,23157],{"class":42},[36,23258,47],{"class":46},[36,23260,23261],{"class":42},"p.m_Age;\n",[36,23263,23264],{"class":38,"line":1064},[36,23265,23266],{"class":2621},"        \u002F\u002F深拷贝操作\n",[36,23268,23269,23271,23273,23275,23277,23279],{"class":38,"line":1075},[36,23270,23167],{"class":42},[36,23272,14095],{"class":46},[36,23274,4775],{"class":46},[36,23276,92],{"class":42},[36,23278,3011],{"class":46},[36,23280,23281],{"class":42},"p.m_Height);\n",[36,23283,23284],{"class":38,"line":2291},[36,23285,4580],{"class":42},[36,23287,23288],{"class":38,"line":2329},[36,23289,70],{"emptyLinePlaceholder":69},[36,23291,23292],{"class":38,"line":2334},[36,23293,20918],{"class":2621},[36,23295,23296,23298],{"class":38,"line":2339},[36,23297,20923],{"class":79},[36,23299,4369],{"class":42},[36,23301,23302],{"class":38,"line":2365},[36,23303,4423],{"class":42},[36,23305,23306],{"class":38,"line":2373},[36,23307,23308],{"class":2621},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,23310,23311,23313,23316,23319,23322],{"class":38,"line":5001},[36,23312,890],{"class":46},[36,23314,23315],{"class":42},"(m_Height ",[36,23317,23318],{"class":46},"!=",[36,23320,23321],{"class":62}," NULL",[36,23323,123],{"class":42},[36,23325,23326],{"class":38,"line":5006},[36,23327,4901],{"class":42},[36,23329,23330,23333,23336],{"class":38,"line":10328},[36,23331,23332],{"class":46},"            delete",[36,23334,23335],{"class":42}," m_Height;",[36,23337,23338],{"class":2621}," \u002F\u002F释放堆区内存\n",[36,23340,23341,23344,23346,23348,23350],{"class":38,"line":10352},[36,23342,23343],{"class":42},"            m_Height",[36,23345,47],{"class":46},[36,23347,4785],{"class":62},[36,23349,2618],{"class":42},[36,23351,23352],{"class":2621}," \u002F\u002F防止野指针\n",[36,23354,23355],{"class":38,"line":10357},[36,23356,2204],{"class":42},[36,23358,23359,23361,23363],{"class":38,"line":10363},[36,23360,5836],{"class":42},[36,23362,3594],{"class":46},[36,23364,23365],{"class":50},"\"Person的析构函数调用\"\n",[36,23367,23368],{"class":38,"line":10390},[36,23369,4580],{"class":42},[36,23371,23372,23374],{"class":38,"line":10395},[36,23373,4378],{"class":46},[36,23375,18039],{"class":42},[36,23377,23378,23380,23382,23385],{"class":38,"line":10401},[36,23379,4378],{"class":46},[36,23381,8899],{"class":46},[36,23383,23384],{"class":42},"m_Height;",[36,23386,23387],{"class":2621}," \u002F\u002F定义一个指针，指向身高\n",[36,23389,23390],{"class":38,"line":10413},[36,23391,6379],{"class":42},[36,23393,23394,23396,23398],{"class":38,"line":10425},[36,23395,7746],{"class":46},[36,23397,7970],{"class":79},[36,23399,4369],{"class":42},[36,23401,23402],{"class":38,"line":10437},[36,23403,3963],{"class":42},[36,23405,23406,23408,23410,23412,23414,23416,23419],{"class":38,"line":12095},[36,23407,21801],{"class":42},[36,23409,9511],{"class":79},[36,23411,92],{"class":42},[36,23413,633],{"class":62},[36,23415,2934],{"class":42},[36,23417,23418],{"class":62},"160",[36,23420,5104],{"class":42},[36,23422,23423,23425,23427,23430,23432,23435,23437,23440,23442,23445,23447,23449],{"class":38,"line":12120},[36,23424,3968],{"class":42},[36,23426,3594],{"class":46},[36,23428,23429],{"class":50},"\"p1的年龄为:\"",[36,23431,3594],{"class":46},[36,23433,23434],{"class":42},"p1.m_Age",[36,23436,3594],{"class":46},[36,23438,23439],{"class":50},"\"身高为：\"",[36,23441,8800],{"class":46},[36,23443,23444],{"class":42},"p1.m_Height",[36,23446,3594],{"class":46},[36,23448,3659],{"class":42},[36,23450,23451],{"class":2621},"  \u002F\u002F18\n",[36,23453,23454,23456,23458],{"class":38,"line":12143},[36,23455,21801],{"class":42},[36,23457,9414],{"class":79},[36,23459,19886],{"class":42},[36,23461,23462,23464,23466,23469,23471,23473,23475,23477,23479,23482,23484,23486],{"class":38,"line":12167},[36,23463,3968],{"class":42},[36,23465,3594],{"class":46},[36,23467,23468],{"class":50},"\"p2的年龄为：\"",[36,23470,3594],{"class":46},[36,23472,21831],{"class":42},[36,23474,3594],{"class":46},[36,23476,23439],{"class":50},[36,23478,8800],{"class":46},[36,23480,23481],{"class":42},"p2.m_Height",[36,23483,3594],{"class":46},[36,23485,3659],{"class":42},[36,23487,23451],{"class":2621},[36,23489,23490],{"class":38,"line":12172},[36,23491,15587],{"class":42},[36,23493,23494],{"class":38,"line":12177},[36,23495,3982],{"class":42},[36,23497,23498,23500,23502],{"class":38,"line":12182},[36,23499,2570],{"class":46},[36,23501,4366],{"class":79},[36,23503,4369],{"class":42},[36,23505,23506],{"class":38,"line":12191},[36,23507,3963],{"class":42},[36,23509,23510,23512],{"class":38,"line":12196},[36,23511,8015],{"class":79},[36,23513,8018],{"class":42},[36,23515,23516],{"class":38,"line":12202},[36,23517,3982],{"class":42},[19,23519,23520],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23522,23523],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23525,23526],{},[3879,23527],{"alt":31,"src":23528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23530,23531],{},"浅拷贝问题要使用深拷贝来解决",[19,23533,23534],{},[3879,23535],{"alt":31,"src":23536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23538,23539],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1752,23541,23543],{"id":23542},"_826初始化列表","8.2.6初始化列表",[19,23545,23546],{},"作用：初始化属性",[19,23548,7564],{},[26,23550,23553],{"className":23551,"code":23552,"language":7570},[7568],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,23554,23552],{"__ignoreMap":31},[19,23556,23557],{},"例子",[26,23559,23561],{"className":2556,"code":23560,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,23562,23563,23569,23579,23585,23589,23594,23598,23603,23608,23613,23618,23623,23628,23632,23637,23642,23685,23694,23712,23730,23748,23752,23756,23763,23770,23777,23781,23785,23793,23797,23801,23821,23830,23834,23838,23848,23852,23860],{"__ignoreMap":31},[36,23564,23565,23567],{"class":38,"line":39},[36,23566,4343],{"class":46},[36,23568,4346],{"class":50},[36,23570,23571,23573,23575,23577],{"class":38,"line":54},[36,23572,4351],{"class":46},[36,23574,4354],{"class":46},[36,23576,4357],{"class":79},[36,23578,3711],{"class":42},[36,23580,23581,23583],{"class":38,"line":66},[36,23582,147],{"class":46},[36,23584,17546],{"class":79},[36,23586,23587],{"class":38,"line":73},[36,23588,3963],{"class":42},[36,23590,23591],{"class":38,"line":86},[36,23592,23593],{"class":46},"    public:\n",[36,23595,23596],{"class":38,"line":126},[36,23597,70],{"emptyLinePlaceholder":69},[36,23599,23600],{"class":38,"line":131},[36,23601,23602],{"class":2621},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,23604,23605],{"class":38,"line":225},[36,23606,23607],{"class":2621},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,23609,23610],{"class":38,"line":235},[36,23611,23612],{"class":2621},"    \u002F\u002F  m_A = a;\n",[36,23614,23615],{"class":38,"line":377},[36,23616,23617],{"class":2621},"    \u002F\u002F  m_B = b;\n",[36,23619,23620],{"class":38,"line":617},[36,23621,23622],{"class":2621},"    \u002F\u002F  m_C = c;\n",[36,23624,23625],{"class":38,"line":643},[36,23626,23627],{"class":2621},"    \u002F\u002F}\n",[36,23629,23630],{"class":38,"line":921},[36,23631,70],{"emptyLinePlaceholder":69},[36,23633,23634],{"class":38,"line":934},[36,23635,23636],{"class":2621},"    \u002F\u002F初始化列表方式初始化\n",[36,23638,23639],{"class":38,"line":939},[36,23640,23641],{"class":2621},"    \u002F\u002F使用有参构造函数\n",[36,23643,23644,23646,23648,23650,23652,23654,23656,23658,23660,23662,23664,23667,23670,23673,23676,23679,23682],{"class":38,"line":949},[36,23645,20890],{"class":79},[36,23647,92],{"class":42},[36,23649,2570],{"class":46},[36,23651,3815],{"class":7598},[36,23653,630],{"class":42},[36,23655,2570],{"class":46},[36,23657,5218],{"class":7598},[36,23659,630],{"class":42},[36,23661,2570],{"class":46},[36,23663,5234],{"class":7598},[36,23665,23666],{"class":42},") :",[36,23668,23669],{"class":79},"m_A",[36,23671,23672],{"class":42},"(a), ",[36,23674,23675],{"class":79},"m_B",[36,23677,23678],{"class":42},"(b), ",[36,23680,23681],{"class":79},"m_C",[36,23683,23684],{"class":42},"(c) {}\n",[36,23686,23687,23689,23692],{"class":38,"line":962},[36,23688,17284],{"class":46},[36,23690,23691],{"class":79}," PrintPerson",[36,23693,13232],{"class":42},[36,23695,23696,23698,23700,23703,23705,23708,23710],{"class":38,"line":974},[36,23697,12048],{"class":42},[36,23699,3594],{"class":46},[36,23701,23702],{"class":50}," \"mA:\"",[36,23704,3861],{"class":46},[36,23706,23707],{"class":42}," m_A ",[36,23709,3594],{"class":46},[36,23711,11220],{"class":42},[36,23713,23714,23716,23718,23721,23723,23726,23728],{"class":38,"line":979},[36,23715,12048],{"class":42},[36,23717,3594],{"class":46},[36,23719,23720],{"class":50}," \"mB:\"",[36,23722,3861],{"class":46},[36,23724,23725],{"class":42}," m_B ",[36,23727,3594],{"class":46},[36,23729,11220],{"class":42},[36,23731,23732,23734,23736,23739,23741,23744,23746],{"class":38,"line":994},[36,23733,12048],{"class":42},[36,23735,3594],{"class":46},[36,23737,23738],{"class":50}," \"mC:\"",[36,23740,3861],{"class":46},[36,23742,23743],{"class":42}," m_C ",[36,23745,3594],{"class":46},[36,23747,11220],{"class":42},[36,23749,23750],{"class":38,"line":1006},[36,23751,4580],{"class":42},[36,23753,23754],{"class":38,"line":1011},[36,23755,17597],{"class":46},[36,23757,23758,23760],{"class":38,"line":1023},[36,23759,4378],{"class":46},[36,23761,23762],{"class":42}," m_A;\n",[36,23764,23765,23767],{"class":38,"line":1028},[36,23766,4378],{"class":46},[36,23768,23769],{"class":42}," m_B;\n",[36,23771,23772,23774],{"class":38,"line":1033},[36,23773,4378],{"class":46},[36,23775,23776],{"class":42}," m_C;\n",[36,23778,23779],{"class":38,"line":1053},[36,23780,6379],{"class":42},[36,23782,23783],{"class":38,"line":1064},[36,23784,70],{"emptyLinePlaceholder":69},[36,23786,23787,23789,23791],{"class":38,"line":1075},[36,23788,2570],{"class":46},[36,23790,4366],{"class":79},[36,23792,8360],{"class":42},[36,23794,23795],{"class":38,"line":2291},[36,23796,3963],{"class":42},[36,23798,23799],{"class":38,"line":2329},[36,23800,70],{"emptyLinePlaceholder":69},[36,23802,23803,23805,23807,23809,23811,23813,23815,23817,23819],{"class":38,"line":2334},[36,23804,21801],{"class":42},[36,23806,19],{"class":79},[36,23808,92],{"class":42},[36,23810,1906],{"class":62},[36,23812,630],{"class":42},[36,23814,1911],{"class":62},[36,23816,630],{"class":42},[36,23818,2634],{"class":62},[36,23820,5104],{"class":42},[36,23822,23823,23825,23828],{"class":38,"line":2339},[36,23824,18239],{"class":42},[36,23826,23827],{"class":79},"PrintPerson",[36,23829,8018],{"class":42},[36,23831,23832],{"class":38,"line":2365},[36,23833,70],{"emptyLinePlaceholder":69},[36,23835,23836],{"class":38,"line":2373},[36,23837,70],{"emptyLinePlaceholder":69},[36,23839,23840,23842,23844,23846],{"class":38,"line":5001},[36,23841,4696],{"class":79},[36,23843,92],{"class":42},[36,23845,4701],{"class":50},[36,23847,5104],{"class":42},[36,23849,23850],{"class":38,"line":5006},[36,23851,70],{"emptyLinePlaceholder":69},[36,23853,23854,23856,23858],{"class":38,"line":10328},[36,23855,6474],{"class":46},[36,23857,899],{"class":62},[36,23859,3711],{"class":42},[36,23861,23862],{"class":38,"line":10352},[36,23863,3982],{"class":42},[19,23865,23866,23867,23870,23871],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[667,23868,23869],{},"参数名就是定义的对象属性","，",[667,23872,23873],{},"属性后面的值为有参构造函数的形参",[26,23875,23877],{"className":2556,"code":23876,"language":2558,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,23878,23879],{"__ignoreMap":31},[36,23880,23881,23883,23885,23887,23890,23892,23895,23897,23900,23902,23905,23907,23910,23912],{"class":38,"line":39},[36,23882,1416],{"class":79},[36,23884,92],{"class":42},[36,23886,2570],{"class":46},[36,23888,23889],{"class":42}," a.",[36,23891,2570],{"class":46},[36,23893,23894],{"class":42}," b,",[36,23896,2570],{"class":46},[36,23898,23899],{"class":42}," b):",[36,23901,23669],{"class":79},[36,23903,23904],{"class":42},"(a),",[36,23906,23675],{"class":79},[36,23908,23909],{"class":42},"(c),",[36,23911,23681],{"class":79},[36,23913,23914],{"class":42},"(b) {}\n",[1752,23916,23918],{"id":23917},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23920,23921],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23923,17010],{},[26,23925,23927],{"className":2556,"code":23926,"language":2558,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,23928,23929,23934,23939,23943,23948,23952],{"__ignoreMap":31},[36,23930,23931],{"class":38,"line":39},[36,23932,23933],{"class":42},"A{};\n",[36,23935,23936],{"class":38,"line":54},[36,23937,23938],{"class":42},"B\n",[36,23940,23941],{"class":38,"line":66},[36,23942,3963],{"class":42},[36,23944,23945],{"class":38,"line":73},[36,23946,23947],{"class":42},"    A a;\n",[36,23949,23950],{"class":38,"line":86},[36,23951,3982],{"class":42},[36,23953,23954],{"class":38,"line":126},[36,23955,23956],{"class":2621},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23958,23959],{},"案例",[26,23961,23963],{"className":2556,"code":23962,"language":2558,"meta":31,"style":31},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[33,23964,23965,23970,23977,23981,23986,23991,24005,24009,24019,24030,24034,24041,24045,24058,24062,24067,24072,24076,24082,24086,24090,24094,24125,24129,24140,24144,24150,24154,24167,24171,24175,24179,24184,24189,24193,24201,24205,24222,24241,24245,24253,24257,24263],{"__ignoreMap":31},[36,23966,23967],{"class":38,"line":39},[36,23968,23969],{"class":2621},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,23971,23972,23974],{"class":38,"line":54},[36,23973,147],{"class":46},[36,23975,23976],{"class":79}," Phone\n",[36,23978,23979],{"class":38,"line":66},[36,23980,3963],{"class":42},[36,23982,23983],{"class":38,"line":73},[36,23984,23985],{"class":42},"public：\n",[36,23987,23988],{"class":38,"line":86},[36,23989,23990],{"class":2621},"    \u002F\u002F 赋值(构造函数)\n",[36,23992,23993,23996,23998,24000,24003],{"class":38,"line":126},[36,23994,23995],{"class":79},"    Phone",[36,23997,92],{"class":42},[36,23999,17292],{"class":79},[36,24001,24002],{"class":7598}," pName",[36,24004,123],{"class":42},[36,24006,24007],{"class":38,"line":131},[36,24008,4423],{"class":42},[36,24010,24011,24014,24016],{"class":38,"line":225},[36,24012,24013],{"class":42},"        m_pName",[36,24015,47],{"class":46},[36,24017,24018],{"class":42},"pName;\n",[36,24020,24021,24023,24025,24028],{"class":38,"line":235},[36,24022,5836],{"class":42},[36,24024,3594],{"class":46},[36,24026,24027],{"class":50},"\"Phone的构造函数调用\"",[36,24029,3711],{"class":42},[36,24031,24032],{"class":38,"line":377},[36,24033,4580],{"class":42},[36,24035,24036,24039],{"class":38,"line":617},[36,24037,24038],{"class":79},"    ~Phone",[36,24040,4369],{"class":42},[36,24042,24043],{"class":38,"line":643},[36,24044,4423],{"class":42},[36,24046,24047,24049,24051,24054,24056],{"class":38,"line":921},[36,24048,5836],{"class":42},[36,24050,3594],{"class":46},[36,24052,24053],{"class":50},"\"Phone析构函数调用\"",[36,24055,3594],{"class":46},[36,24057,3616],{"class":42},[36,24059,24060],{"class":38,"line":934},[36,24061,4580],{"class":42},[36,24063,24064],{"class":38,"line":939},[36,24065,24066],{"class":2621},"    \u002F\u002F\n",[36,24068,24069],{"class":38,"line":949},[36,24070,24071],{"class":42},"    string m_PName;\n",[36,24073,24074],{"class":38,"line":962},[36,24075,6379],{"class":42},[36,24077,24078,24080],{"class":38,"line":974},[36,24079,147],{"class":46},[36,24081,17546],{"class":79},[36,24083,24084],{"class":38,"line":979},[36,24085,3963],{"class":42},[36,24087,24088],{"class":38,"line":994},[36,24089,17092],{"class":46},[36,24091,24092],{"class":38,"line":1006},[36,24093,19367],{"class":2621},[36,24095,24096,24098,24100,24102,24104,24106,24108,24111,24114,24116,24119,24122],{"class":38,"line":1011},[36,24097,20890],{"class":79},[36,24099,92],{"class":42},[36,24101,17292],{"class":79},[36,24103,17295],{"class":7598},[36,24105,2934],{"class":42},[36,24107,17292],{"class":79},[36,24109,24110],{"class":7598}," pname",[36,24112,24113],{"class":42},"):",[36,24115,17385],{"class":79},[36,24117,24118],{"class":42},"(name),m_phone.",[36,24120,24121],{"class":79},"m_PName",[36,24123,24124],{"class":42},"(pname) \n",[36,24126,24127],{"class":38,"line":1023},[36,24128,4423],{"class":42},[36,24130,24131,24133,24135,24138],{"class":38,"line":1028},[36,24132,5836],{"class":42},[36,24134,3594],{"class":46},[36,24136,24137],{"class":50},"\"Person的构造函数调用\"",[36,24139,3711],{"class":42},[36,24141,24142],{"class":38,"line":1033},[36,24143,4580],{"class":42},[36,24145,24146,24148],{"class":38,"line":1053},[36,24147,20923],{"class":79},[36,24149,4369],{"class":42},[36,24151,24152],{"class":38,"line":1064},[36,24153,4423],{"class":42},[36,24155,24156,24158,24160,24163,24165],{"class":38,"line":1075},[36,24157,5836],{"class":42},[36,24159,3594],{"class":46},[36,24161,24162],{"class":50},"\"Person析构函数调用\"",[36,24164,3594],{"class":46},[36,24166,3616],{"class":42},[36,24168,24169],{"class":38,"line":2291},[36,24170,4580],{"class":42},[36,24172,24173],{"class":38,"line":2329},[36,24174,10161],{"class":2621},[36,24176,24177],{"class":38,"line":2334},[36,24178,17267],{"class":42},[36,24180,24181],{"class":38,"line":2339},[36,24182,24183],{"class":2621},"    \u002F\u002F手机\n",[36,24185,24186],{"class":38,"line":2365},[36,24187,24188],{"class":42},"    Phone m_Phone;\n",[36,24190,24191],{"class":38,"line":2373},[36,24192,6379],{"class":42},[36,24194,24195,24197,24199],{"class":38,"line":5001},[36,24196,7746],{"class":46},[36,24198,7970],{"class":79},[36,24200,4369],{"class":42},[36,24202,24203],{"class":38,"line":5006},[36,24204,3963],{"class":42},[36,24206,24207,24209,24211,24213,24215,24217,24220],{"class":38,"line":10328},[36,24208,21801],{"class":42},[36,24210,19],{"class":79},[36,24212,92],{"class":42},[36,24214,10296],{"class":50},[36,24216,2934],{"class":42},[36,24218,24219],{"class":50},"\"安卓\"",[36,24221,5104],{"class":42},[36,24223,24224,24226,24228,24231,24233,24236,24238],{"class":38,"line":10352},[36,24225,3968],{"class":42},[36,24227,3594],{"class":46},[36,24229,24230],{"class":42},"p.Name",[36,24232,3594],{"class":46},[36,24234,24235],{"class":50},"\"拿着：\"",[36,24237,3594],{"class":46},[36,24239,24240],{"class":42},"p.m_phone.m_PName;\n",[36,24242,24243],{"class":38,"line":10357},[36,24244,3982],{"class":42},[36,24246,24247,24249,24251],{"class":38,"line":10363},[36,24248,2570],{"class":46},[36,24250,4366],{"class":79},[36,24252,4369],{"class":42},[36,24254,24255],{"class":38,"line":10390},[36,24256,3963],{"class":42},[36,24258,24259,24261],{"class":38,"line":10395},[36,24260,8015],{"class":79},[36,24262,8018],{"class":42},[36,24264,24265],{"class":38,"line":10401},[36,24266,3982],{"class":42},[19,24268,11405],{},[26,24270,24272],{"className":2556,"code":24271,"language":2558,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,24273,24274,24279],{"__ignoreMap":31},[36,24275,24276],{"class":38,"line":39},[36,24277,24278],{"class":2621},"    \u002F\u002F不需要写这个：\n",[36,24280,24281],{"class":38,"line":54},[36,24282,24283],{"class":2621},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24285,24286],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,24288,24290],{"className":2556,"code":24289,"language":2558,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,24291,24292],{"__ignoreMap":31},[36,24293,24294,24296,24299,24301,24304,24307],{"class":38,"line":39},[36,24295,1416],{"class":79},[36,24297,24298],{"class":42},"(string name.string pname):",[36,24300,17385],{"class":79},[36,24302,24303],{"class":42},"(name),",[36,24305,24306],{"class":79},"m_phone",[36,24308,24309],{"class":42},"(pname) {}\n",[19,24311,24312,24313,47,24316],{},"采用的是隐式转换法，实际为如下：\n",[33,24314,24315],{},"m_phone(pname)",[33,24317,24318],{},"Phone m_phone=pname",[19,24320,24321,24324],{},[667,24322,24323],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24326,24327],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1752,24329,24331],{"id":24330},"_828静态对象","8.2.8静态对象",[19,24333,24334],{},"静态对象在成员对象前static，称为静态对象",[19,24336,24337],{},"静态对象分为两类：",[650,24339,24340],{},[653,24341,24342],{},"静态成员变量",[3557,24344,24345,24348,24351],{},[653,24346,24347],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[653,24349,24350],{},"②在编译阶段分配内存",[653,24352,24353],{},"③类内声明，类外初始化",[650,24355,24356],{"start":54},[653,24357,24358],{},"静态成员函数",[3557,24360,24361,24364],{},[653,24362,24363],{},"①所有对象共享同一个函数",[653,24365,24366],{},"②静态成员函数只能访问静态成员变量",[24368,24369,24371],"h4",{"id":24370},"_8281静态成员变量","8.2.8.1静态成员变量",[26,24373,24375],{"className":2556,"code":24374,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[33,24376,24377,24383,24393,24399,24403,24407,24412,24417,24422,24430,24434,24438,24442,24450,24454,24458,24463,24476,24480,24488,24492,24498],{"__ignoreMap":31},[36,24378,24379,24381],{"class":38,"line":39},[36,24380,4343],{"class":46},[36,24382,4346],{"class":50},[36,24384,24385,24387,24389,24391],{"class":38,"line":54},[36,24386,4351],{"class":46},[36,24388,4354],{"class":46},[36,24390,4357],{"class":79},[36,24392,3711],{"class":42},[36,24394,24395,24397],{"class":38,"line":66},[36,24396,147],{"class":46},[36,24398,17546],{"class":79},[36,24400,24401],{"class":38,"line":73},[36,24402,3963],{"class":42},[36,24404,24405],{"class":38,"line":86},[36,24406,17092],{"class":46},[36,24408,24409],{"class":38,"line":126},[36,24410,24411],{"class":2621},"    \u002F\u002F非静态成员变量\n",[36,24413,24414],{"class":38,"line":131},[36,24415,24416],{"class":2621},"    \u002F\u002F int m_A;\n",[36,24418,24419],{"class":38,"line":225},[36,24420,24421],{"class":2621},"    \u002F\u002F定义静态成员变量\n",[36,24423,24424,24426,24428],{"class":38,"line":235},[36,24425,13398],{"class":46},[36,24427,4775],{"class":46},[36,24429,23762],{"class":42},[36,24431,24432],{"class":38,"line":377},[36,24433,70],{"emptyLinePlaceholder":69},[36,24435,24436],{"class":38,"line":617},[36,24437,70],{"emptyLinePlaceholder":69},[36,24439,24440],{"class":38,"line":643},[36,24441,6379],{"class":42},[36,24443,24444,24446,24448],{"class":38,"line":921},[36,24445,7746],{"class":46},[36,24447,7970],{"class":79},[36,24449,4369],{"class":42},[36,24451,24452],{"class":38,"line":934},[36,24453,3963],{"class":42},[36,24455,24456],{"class":38,"line":939},[36,24457,17688],{"class":42},[36,24459,24460],{"class":38,"line":949},[36,24461,24462],{"class":2621},"    \u002F\u002F输出类成员变量这块内存\n",[36,24464,24465,24467,24469,24472,24474],{"class":38,"line":962},[36,24466,3968],{"class":42},[36,24468,3594],{"class":46},[36,24470,24471],{"class":42},"p.m_A",[36,24473,3594],{"class":46},[36,24475,3616],{"class":42},[36,24477,24478],{"class":38,"line":974},[36,24479,3982],{"class":42},[36,24481,24482,24484,24486],{"class":38,"line":979},[36,24483,2570],{"class":46},[36,24485,4366],{"class":79},[36,24487,4369],{"class":42},[36,24489,24490],{"class":38,"line":994},[36,24491,3963],{"class":42},[36,24493,24494,24496],{"class":38,"line":1006},[36,24495,8015],{"class":79},[36,24497,4369],{"class":42},[36,24499,24500],{"class":38,"line":1011},[36,24501,3982],{"class":42},[19,24503,24504],{},"此时输出是报错的：无法解析外部命令",[19,24506,24507],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,24509,24511],{"className":2556,"code":24510,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[33,24512,24513,24519,24529,24535,24539,24543,24548,24556,24560,24565,24580,24588,24592,24596,24601,24606,24618,24623,24634,24639,24644,24657,24661,24669,24673,24679],{"__ignoreMap":31},[36,24514,24515,24517],{"class":38,"line":39},[36,24516,4343],{"class":46},[36,24518,4346],{"class":50},[36,24520,24521,24523,24525,24527],{"class":38,"line":54},[36,24522,4351],{"class":46},[36,24524,4354],{"class":46},[36,24526,4357],{"class":79},[36,24528,3711],{"class":42},[36,24530,24531,24533],{"class":38,"line":66},[36,24532,147],{"class":46},[36,24534,17546],{"class":79},[36,24536,24537],{"class":38,"line":73},[36,24538,3963],{"class":42},[36,24540,24541],{"class":38,"line":86},[36,24542,17092],{"class":46},[36,24544,24545],{"class":38,"line":126},[36,24546,24547],{"class":2621},"    \u002F\u002F类内声明\n",[36,24549,24550,24552,24554],{"class":38,"line":131},[36,24551,13398],{"class":46},[36,24553,4775],{"class":46},[36,24555,23762],{"class":42},[36,24557,24558],{"class":38,"line":225},[36,24559,6379],{"class":42},[36,24561,24562],{"class":38,"line":235},[36,24563,24564],{"class":2621},"\u002F\u002F类外初始化\n",[36,24566,24567,24569,24571,24574,24576,24578],{"class":38,"line":377},[36,24568,2570],{"class":46},[36,24570,1376],{"class":79},[36,24572,24573],{"class":42},"::m_A",[36,24575,47],{"class":46},[36,24577,3002],{"class":62},[36,24579,3711],{"class":42},[36,24581,24582,24584,24586],{"class":38,"line":617},[36,24583,7746],{"class":46},[36,24585,7970],{"class":79},[36,24587,4369],{"class":42},[36,24589,24590],{"class":38,"line":643},[36,24591,3963],{"class":42},[36,24593,24594],{"class":38,"line":921},[36,24595,17688],{"class":42},[36,24597,24598],{"class":38,"line":934},[36,24599,24600],{"class":2621},"    \u002F\u002F访问变量的原内存空间\n",[36,24602,24603],{"class":38,"line":939},[36,24604,24605],{"class":2621},"    \u002F\u002F100\n",[36,24607,24608,24610,24612,24614,24616],{"class":38,"line":949},[36,24609,3968],{"class":42},[36,24611,3594],{"class":46},[36,24613,24471],{"class":42},[36,24615,3594],{"class":46},[36,24617,3616],{"class":42},[36,24619,24620],{"class":38,"line":962},[36,24621,24622],{"class":42},"    Person p2;\n",[36,24624,24625,24628,24630,24632],{"class":38,"line":974},[36,24626,24627],{"class":42},"    p2.m_A",[36,24629,47],{"class":46},[36,24631,1059],{"class":62},[36,24633,3711],{"class":42},[36,24635,24636],{"class":38,"line":979},[36,24637,24638],{"class":2621},"    \u002F\u002F继续访问这片空间\n",[36,24640,24641],{"class":38,"line":994},[36,24642,24643],{"class":2621},"    \u002F\u002F200\n",[36,24645,24646,24648,24650,24653,24655],{"class":38,"line":1006},[36,24647,3968],{"class":42},[36,24649,3594],{"class":46},[36,24651,24652],{"class":42},"p2.m_A",[36,24654,3594],{"class":46},[36,24656,3616],{"class":42},[36,24658,24659],{"class":38,"line":1011},[36,24660,3982],{"class":42},[36,24662,24663,24665,24667],{"class":38,"line":1023},[36,24664,2570],{"class":46},[36,24666,4366],{"class":79},[36,24668,4369],{"class":42},[36,24670,24671],{"class":38,"line":1028},[36,24672,3963],{"class":42},[36,24674,24675,24677],{"class":38,"line":1033},[36,24676,8015],{"class":79},[36,24678,8018],{"class":42},[36,24680,24681],{"class":38,"line":1053},[36,24682,3982],{"class":42},[19,24684,24685],{},[667,24686,24687],{},"静态变量的访问",[26,24689,24691],{"className":2556,"code":24690,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[33,24692,24693,24699,24709,24715,24719,24723,24727,24735,24739,24744,24752,24756,24760,24774,24789,24797,24801,24806,24811,24816,24821,24833,24838,24843,24857,24874,24878,24886,24890,24896],{"__ignoreMap":31},[36,24694,24695,24697],{"class":38,"line":39},[36,24696,4343],{"class":46},[36,24698,4346],{"class":50},[36,24700,24701,24703,24705,24707],{"class":38,"line":54},[36,24702,4351],{"class":46},[36,24704,4354],{"class":46},[36,24706,4357],{"class":79},[36,24708,3711],{"class":42},[36,24710,24711,24713],{"class":38,"line":66},[36,24712,147],{"class":46},[36,24714,17546],{"class":79},[36,24716,24717],{"class":38,"line":73},[36,24718,3963],{"class":42},[36,24720,24721],{"class":38,"line":86},[36,24722,17092],{"class":46},[36,24724,24725],{"class":38,"line":126},[36,24726,24547],{"class":2621},[36,24728,24729,24731,24733],{"class":38,"line":131},[36,24730,13398],{"class":46},[36,24732,4775],{"class":46},[36,24734,23762],{"class":42},[36,24736,24737],{"class":38,"line":225},[36,24738,17597],{"class":46},[36,24740,24741],{"class":38,"line":235},[36,24742,24743],{"class":2621},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,24745,24746,24748,24750],{"class":38,"line":377},[36,24747,13398],{"class":46},[36,24749,4775],{"class":46},[36,24751,23769],{"class":42},[36,24753,24754],{"class":38,"line":617},[36,24755,6379],{"class":42},[36,24757,24758],{"class":38,"line":643},[36,24759,24564],{"class":2621},[36,24761,24762,24764,24766,24768,24770,24772],{"class":38,"line":921},[36,24763,2570],{"class":46},[36,24765,1376],{"class":79},[36,24767,24573],{"class":42},[36,24769,47],{"class":46},[36,24771,3002],{"class":62},[36,24773,3711],{"class":42},[36,24775,24776,24778,24780,24783,24785,24787],{"class":38,"line":934},[36,24777,2570],{"class":46},[36,24779,1376],{"class":79},[36,24781,24782],{"class":42},"::m_B",[36,24784,47],{"class":46},[36,24786,3254],{"class":62},[36,24788,3711],{"class":42},[36,24790,24791,24793,24795],{"class":38,"line":939},[36,24792,7746],{"class":46},[36,24794,8039],{"class":79},[36,24796,4369],{"class":42},[36,24798,24799],{"class":38,"line":949},[36,24800,3963],{"class":42},[36,24802,24803],{"class":38,"line":962},[36,24804,24805],{"class":2621},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,24807,24808],{"class":38,"line":974},[36,24809,24810],{"class":2621},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,24812,24813],{"class":38,"line":979},[36,24814,24815],{"class":2621},"    \u002F\u002F1.通过对象进行访问\n",[36,24817,24818],{"class":38,"line":994},[36,24819,24820],{"class":42},"    Person p;  \n",[36,24822,24823,24825,24827,24829,24831],{"class":38,"line":1006},[36,24824,3968],{"class":42},[36,24826,3594],{"class":46},[36,24828,24471],{"class":42},[36,24830,3594],{"class":46},[36,24832,3616],{"class":42},[36,24834,24835],{"class":38,"line":1011},[36,24836,24837],{"class":2621},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,24839,24840],{"class":38,"line":1023},[36,24841,24842],{"class":2621},"    \u002F\u002F2.通过类名进行访问\n",[36,24844,24845,24847,24849,24851,24853,24855],{"class":38,"line":1028},[36,24846,3968],{"class":42},[36,24848,3594],{"class":46},[36,24850,1416],{"class":79},[36,24852,24573],{"class":42},[36,24854,3594],{"class":46},[36,24856,3616],{"class":42},[36,24858,24859,24861,24863,24865,24867,24869,24871],{"class":38,"line":1033},[36,24860,3968],{"class":42},[36,24862,3594],{"class":46},[36,24864,1416],{"class":79},[36,24866,24782],{"class":42},[36,24868,3594],{"class":46},[36,24870,3659],{"class":42},[36,24872,24873],{"class":2621}," \u002F\u002F没有访问权限，报错\n",[36,24875,24876],{"class":38,"line":1053},[36,24877,3982],{"class":42},[36,24879,24880,24882,24884],{"class":38,"line":1064},[36,24881,2570],{"class":46},[36,24883,4366],{"class":79},[36,24885,4369],{"class":42},[36,24887,24888],{"class":38,"line":1075},[36,24889,3963],{"class":42},[36,24891,24892,24894],{"class":38,"line":2291},[36,24893,8084],{"class":79},[36,24895,8018],{"class":42},[36,24897,24898],{"class":38,"line":2329},[36,24899,3982],{"class":42},[24368,24901,24903],{"id":24902},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24905,24906],{},"1.静态成员函数定义与访问",[26,24908,24910],{"className":2556,"code":24909,"language":2558,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[33,24911,24912,24918,24922,24926,24931,24942,24946,24960,24964,24968,24976,24980,24985,24990,24994,25002,25007,25017],{"__ignoreMap":31},[36,24913,24914,24916],{"class":38,"line":39},[36,24915,147],{"class":46},[36,24917,17546],{"class":79},[36,24919,24920],{"class":38,"line":54},[36,24921,3963],{"class":42},[36,24923,24924],{"class":38,"line":66},[36,24925,17092],{"class":46},[36,24927,24928],{"class":38,"line":73},[36,24929,24930],{"class":2621},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,24932,24933,24935,24938,24940],{"class":38,"line":86},[36,24934,13398],{"class":46},[36,24936,24937],{"class":46}," void",[36,24939,13763],{"class":79},[36,24941,4369],{"class":42},[36,24943,24944],{"class":38,"line":126},[36,24945,4423],{"class":42},[36,24947,24948,24951,24953,24956,24958],{"class":38,"line":131},[36,24949,24950],{"class":42},"        coout",[36,24952,3594],{"class":46},[36,24954,24955],{"class":50},"\"静态成员函数的调用\"",[36,24957,3594],{"class":46},[36,24959,3616],{"class":42},[36,24961,24962],{"class":38,"line":225},[36,24963,4580],{"class":42},[36,24965,24966],{"class":38,"line":235},[36,24967,6379],{"class":42},[36,24969,24970,24972,24974],{"class":38,"line":377},[36,24971,7746],{"class":46},[36,24973,7970],{"class":79},[36,24975,4369],{"class":42},[36,24977,24978],{"class":38,"line":617},[36,24979,3963],{"class":42},[36,24981,24982],{"class":38,"line":643},[36,24983,24984],{"class":2621},"    \u002F\u002F静态成员函数的调用方式:\n",[36,24986,24987],{"class":38,"line":921},[36,24988,24989],{"class":2621},"    \u002F\u002F1.通过对象访问\n",[36,24991,24992],{"class":38,"line":934},[36,24993,17688],{"class":42},[36,24995,24996,24998,25000],{"class":38,"line":939},[36,24997,18239],{"class":42},[36,24999,13929],{"class":79},[36,25001,8018],{"class":42},[36,25003,25004],{"class":38,"line":949},[36,25005,25006],{"class":2621},"    \u002F\u002F2.通过类名访问\n",[36,25008,25009,25011,25013,25015],{"class":38,"line":962},[36,25010,20890],{"class":79},[36,25012,20103],{"class":42},[36,25014,13929],{"class":79},[36,25016,8018],{"class":42},[36,25018,25019],{"class":38,"line":974},[36,25020,3982],{"class":42},[650,25022,25023],{"start":54},[653,25024,25025],{},"静态成员函数只能访问静态成员变量",[26,25027,25029],{"className":2556,"code":25028,"language":2558,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[33,25030,25031,25037,25041,25045,25049,25059,25063,25077,25082,25094,25098,25109,25119,25123,25127,25131,25141,25145,25158,25162,25166,25170,25174,25188,25196,25200,25204,25208,25212,25220,25224,25234,25239,25243,25251,25255,25261],{"__ignoreMap":31},[36,25032,25033,25035],{"class":38,"line":39},[36,25034,147],{"class":46},[36,25036,17546],{"class":79},[36,25038,25039],{"class":38,"line":54},[36,25040,3963],{"class":42},[36,25042,25043],{"class":38,"line":66},[36,25044,17092],{"class":46},[36,25046,25047],{"class":38,"line":73},[36,25048,24930],{"class":2621},[36,25050,25051,25053,25055,25057],{"class":38,"line":86},[36,25052,13398],{"class":46},[36,25054,24937],{"class":46},[36,25056,13763],{"class":79},[36,25058,4369],{"class":42},[36,25060,25061],{"class":38,"line":126},[36,25062,4423],{"class":42},[36,25064,25065,25068,25070,25072,25074],{"class":38,"line":131},[36,25066,25067],{"class":42},"        m_A",[36,25069,47],{"class":46},[36,25071,1070],{"class":62},[36,25073,2618],{"class":42},[36,25075,25076],{"class":2621}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,25078,25079],{"class":38,"line":225},[36,25080,25081],{"class":2621},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,25083,25084,25086,25088,25090,25092],{"class":38,"line":235},[36,25085,24950],{"class":42},[36,25087,3594],{"class":46},[36,25089,24955],{"class":50},[36,25091,3594],{"class":46},[36,25093,3616],{"class":42},[36,25095,25096],{"class":38,"line":377},[36,25097,4580],{"class":42},[36,25099,25100,25102,25104,25106],{"class":38,"line":617},[36,25101,13398],{"class":46},[36,25103,4775],{"class":46},[36,25105,17823],{"class":42},[36,25107,25108],{"class":2621}," \u002F\u002F静态成员变量\n",[36,25110,25111,25113,25116],{"class":38,"line":643},[36,25112,4378],{"class":46},[36,25114,25115],{"class":42}," m_B;",[36,25117,25118],{"class":2621}," \u002F\u002F非静态成员变量\n",[36,25120,25121],{"class":38,"line":921},[36,25122,70],{"emptyLinePlaceholder":69},[36,25124,25125],{"class":38,"line":934},[36,25126,17597],{"class":46},[36,25128,25129],{"class":38,"line":939},[36,25130,24743],{"class":2621},[36,25132,25133,25135,25137,25139],{"class":38,"line":949},[36,25134,13398],{"class":46},[36,25136,24937],{"class":46},[36,25138,15995],{"class":79},[36,25140,4369],{"class":42},[36,25142,25143],{"class":38,"line":962},[36,25144,4423],{"class":42},[36,25146,25147,25149,25151,25154,25156],{"class":38,"line":974},[36,25148,5836],{"class":42},[36,25150,3594],{"class":46},[36,25152,25153],{"class":50},"\"这是私有权限下的静态函数调用\"",[36,25155,3594],{"class":46},[36,25157,3616],{"class":42},[36,25159,25160],{"class":38,"line":979},[36,25161,4580],{"class":42},[36,25163,25164],{"class":38,"line":994},[36,25165,70],{"emptyLinePlaceholder":69},[36,25167,25168],{"class":38,"line":1006},[36,25169,70],{"emptyLinePlaceholder":69},[36,25171,25172],{"class":38,"line":1011},[36,25173,6379],{"class":42},[36,25175,25176,25178,25180,25182,25184,25186],{"class":38,"line":1023},[36,25177,2570],{"class":46},[36,25179,1376],{"class":79},[36,25181,24573],{"class":42},[36,25183,47],{"class":46},[36,25185,2751],{"class":62},[36,25187,3711],{"class":42},[36,25189,25190,25192,25194],{"class":38,"line":1028},[36,25191,7746],{"class":46},[36,25193,7970],{"class":79},[36,25195,4369],{"class":42},[36,25197,25198],{"class":38,"line":1033},[36,25199,3963],{"class":42},[36,25201,25202],{"class":38,"line":1053},[36,25203,24984],{"class":2621},[36,25205,25206],{"class":38,"line":1064},[36,25207,24989],{"class":2621},[36,25209,25210],{"class":38,"line":1075},[36,25211,17688],{"class":42},[36,25213,25214,25216,25218],{"class":38,"line":2291},[36,25215,18239],{"class":42},[36,25217,13929],{"class":79},[36,25219,8018],{"class":42},[36,25221,25222],{"class":38,"line":2329},[36,25223,25006],{"class":2621},[36,25225,25226,25228,25230,25232],{"class":38,"line":2334},[36,25227,20890],{"class":79},[36,25229,20103],{"class":42},[36,25231,13929],{"class":79},[36,25233,8018],{"class":42},[36,25235,25236],{"class":38,"line":2339},[36,25237,25238],{"class":2621},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,25240,25241],{"class":38,"line":2365},[36,25242,3982],{"class":42},[36,25244,25245,25247,25249],{"class":38,"line":2373},[36,25246,2570],{"class":46},[36,25248,4366],{"class":79},[36,25250,4369],{"class":42},[36,25252,25253],{"class":38,"line":5001},[36,25254,3963],{"class":42},[36,25256,25257,25259],{"class":38,"line":5006},[36,25258,8015],{"class":79},[36,25260,8018],{"class":42},[36,25262,25263],{"class":38,"line":10328},[36,25264,3982],{"class":42},[1752,25266,25268],{"id":25267},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24368,25270,25272],{"id":25271},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25274,25275],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25277,25278],{},"只有非静态成员变量才属于类的对象上",[25280,25281,25283],"h5",{"id":25282},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,25285,25287],{"className":2556,"code":25286,"language":2558,"meta":31,"style":31},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[33,25288,25289,25296,25306,25312,25316,25320,25324,25332,25336,25340,25363,25367,25375,25379,25385],{"__ignoreMap":31},[36,25290,25291,25293],{"class":38,"line":39},[36,25292,4343],{"class":46},[36,25294,25295],{"class":50},"\u003Ciostraem>\n",[36,25297,25298,25300,25302,25304],{"class":38,"line":54},[36,25299,4351],{"class":46},[36,25301,4354],{"class":46},[36,25303,4357],{"class":79},[36,25305,3711],{"class":42},[36,25307,25308,25310],{"class":38,"line":66},[36,25309,147],{"class":46},[36,25311,17546],{"class":79},[36,25313,25314],{"class":38,"line":73},[36,25315,3963],{"class":42},[36,25317,25318],{"class":38,"line":86},[36,25319,70],{"emptyLinePlaceholder":69},[36,25321,25322],{"class":38,"line":126},[36,25323,6379],{"class":42},[36,25325,25326,25328,25330],{"class":38,"line":131},[36,25327,7746],{"class":46},[36,25329,7970],{"class":79},[36,25331,4369],{"class":42},[36,25333,25334],{"class":38,"line":225},[36,25335,3963],{"class":42},[36,25337,25338],{"class":38,"line":235},[36,25339,17688],{"class":42},[36,25341,25342,25344,25346,25349,25351,25354,25356,25358,25360],{"class":38,"line":377},[36,25343,3968],{"class":42},[36,25345,3594],{"class":46},[36,25347,25348],{"class":50},"\"size of p=\"",[36,25350,3594],{"class":46},[36,25352,25353],{"class":79},"sizeoif",[36,25355,8920],{"class":42},[36,25357,3594],{"class":46},[36,25359,3659],{"class":42},[36,25361,25362],{"class":2621}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,25364,25365],{"class":38,"line":617},[36,25366,3982],{"class":42},[36,25368,25369,25371,25373],{"class":38,"line":643},[36,25370,2570],{"class":46},[36,25372,4366],{"class":79},[36,25374,4369],{"class":42},[36,25376,25377],{"class":38,"line":921},[36,25378,3963],{"class":42},[36,25380,25381,25383],{"class":38,"line":934},[36,25382,8015],{"class":79},[36,25384,8018],{"class":42},[36,25386,25387],{"class":38,"line":939},[36,25388,3982],{"class":42},[19,25390,25391],{},"输出结果为：size of p=1",[19,25393,25394],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25396,25397],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25280,25399,25401],{"id":25400},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,25403,25405],{"className":2556,"code":25404,"language":2558,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[33,25406,25407,25413,25423,25431,25435,25444,25448,25456,25460,25464,25483,25487,25491,25499,25503,25509],{"__ignoreMap":31},[36,25408,25409,25411],{"class":38,"line":39},[36,25410,4343],{"class":46},[36,25412,4346],{"class":50},[36,25414,25415,25417,25419,25421],{"class":38,"line":54},[36,25416,4351],{"class":46},[36,25418,4354],{"class":46},[36,25420,4357],{"class":79},[36,25422,3711],{"class":42},[36,25424,25425,25427,25429],{"class":38,"line":66},[36,25426,147],{"class":46},[36,25428,1376],{"class":79},[36,25430,5059],{"class":42},[36,25432,25433],{"class":38,"line":73},[36,25434,3963],{"class":42},[36,25436,25437,25439,25441],{"class":38,"line":86},[36,25438,4378],{"class":46},[36,25440,17823],{"class":42},[36,25442,25443],{"class":2621},"\u002F\u002F非静态成员变量\n",[36,25445,25446],{"class":38,"line":126},[36,25447,6379],{"class":42},[36,25449,25450,25452,25454],{"class":38,"line":131},[36,25451,7746],{"class":46},[36,25453,7970],{"class":79},[36,25455,4369],{"class":42},[36,25457,25458],{"class":38,"line":225},[36,25459,3963],{"class":42},[36,25461,25462],{"class":38,"line":235},[36,25463,17688],{"class":42},[36,25465,25466,25468,25470,25472,25474,25476,25478,25480],{"class":38,"line":377},[36,25467,3968],{"class":42},[36,25469,3594],{"class":46},[36,25471,25348],{"class":50},[36,25473,3789],{"class":46},[36,25475,8920],{"class":42},[36,25477,3594],{"class":46},[36,25479,3659],{"class":42},[36,25481,25482],{"class":2621}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,25484,25485],{"class":38,"line":617},[36,25486,70],{"emptyLinePlaceholder":69},[36,25488,25489],{"class":38,"line":643},[36,25490,3982],{"class":42},[36,25492,25493,25495,25497],{"class":38,"line":921},[36,25494,2570],{"class":46},[36,25496,4366],{"class":79},[36,25498,4369],{"class":42},[36,25500,25501],{"class":38,"line":934},[36,25502,3963],{"class":42},[36,25504,25505,25507],{"class":38,"line":939},[36,25506,8015],{"class":79},[36,25508,8018],{"class":42},[36,25510,25511],{"class":38,"line":949},[36,25512,3982],{"class":42},[19,25514,25515],{},"输出结果：size of p=4",[19,25517,25518],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[650,25520,25521],{},[653,25522,25523],{},"如果加上非静态成员变量，Person类修改如下",[26,25525,25527],{"className":2556,"code":25526,"language":2558,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,25528,25529,25535,25539,25545,25553,25557,25562],{"__ignoreMap":31},[36,25530,25531,25533],{"class":38,"line":39},[36,25532,147],{"class":46},[36,25534,17546],{"class":79},[36,25536,25537],{"class":38,"line":54},[36,25538,3963],{"class":42},[36,25540,25541,25543],{"class":38,"line":66},[36,25542,4378],{"class":46},[36,25544,23762],{"class":42},[36,25546,25547,25549,25551],{"class":38,"line":73},[36,25548,13398],{"class":46},[36,25550,4775],{"class":46},[36,25552,23769],{"class":42},[36,25554,25555],{"class":38,"line":86},[36,25556,6379],{"class":42},[36,25558,25559],{"class":38,"line":126},[36,25560,25561],{"class":2621},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,25563,25564,25566,25568,25570,25572,25574],{"class":38,"line":131},[36,25565,2570],{"class":46},[36,25567,1376],{"class":79},[36,25569,24782],{"class":42},[36,25571,47],{"class":46},[36,25573,2751],{"class":62},[36,25575,3711],{"class":42},[19,25577,25578],{},"输出结果：4",[19,25580,25581],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[650,25583,25584],{"start":54},[653,25585,25586],{},"加上非静态成员函数",[26,25588,25590],{"className":2556,"code":25589,"language":2558,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,25591,25592,25599,25603,25609,25617,25621,25625,25629],{"__ignoreMap":31},[36,25593,25594,25596],{"class":38,"line":39},[36,25595,147],{"class":46},[36,25597,25598],{"class":79},"  Person\n",[36,25600,25601],{"class":38,"line":54},[36,25602,3963],{"class":42},[36,25604,25605,25607],{"class":38,"line":66},[36,25606,4378],{"class":46},[36,25608,23762],{"class":42},[36,25610,25611,25613,25615],{"class":38,"line":73},[36,25612,17284],{"class":46},[36,25614,13763],{"class":79},[36,25616,4369],{"class":42},[36,25618,25619],{"class":38,"line":86},[36,25620,4423],{"class":42},[36,25622,25623],{"class":38,"line":126},[36,25624,70],{"emptyLinePlaceholder":69},[36,25626,25627],{"class":38,"line":131},[36,25628,4580],{"class":42},[36,25630,25631],{"class":38,"line":225},[36,25632,6379],{"class":42},[19,25634,25635],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[650,25637,25638],{"start":66},[653,25639,25640],{},"加上静态成员函数",[26,25642,25644],{"className":2556,"code":25643,"language":2558,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,25645,25646,25652,25656,25662,25670,25674,25678,25682,25693,25697,25701,25705],{"__ignoreMap":31},[36,25647,25648,25650],{"class":38,"line":39},[36,25649,147],{"class":46},[36,25651,25598],{"class":79},[36,25653,25654],{"class":38,"line":54},[36,25655,3963],{"class":42},[36,25657,25658,25660],{"class":38,"line":66},[36,25659,4378],{"class":46},[36,25661,23762],{"class":42},[36,25663,25664,25666,25668],{"class":38,"line":73},[36,25665,17284],{"class":46},[36,25667,13763],{"class":79},[36,25669,4369],{"class":42},[36,25671,25672],{"class":38,"line":86},[36,25673,4423],{"class":42},[36,25675,25676],{"class":38,"line":126},[36,25677,70],{"emptyLinePlaceholder":69},[36,25679,25680],{"class":38,"line":131},[36,25681,4580],{"class":42},[36,25683,25684,25686,25688,25691],{"class":38,"line":225},[36,25685,13398],{"class":46},[36,25687,24937],{"class":46},[36,25689,25690],{"class":79}," func1",[36,25692,4369],{"class":42},[36,25694,25695],{"class":38,"line":235},[36,25696,4423],{"class":42},[36,25698,25699],{"class":38,"line":377},[36,25700,70],{"emptyLinePlaceholder":69},[36,25702,25703],{"class":38,"line":617},[36,25704,4580],{"class":42},[36,25706,25707],{"class":38,"line":643},[36,25708,6379],{"class":42},[19,25710,25578],{},[19,25712,25713],{},"解释：静态成员函数也不属于类上",[2467,25715,10055],{},{"title":31,"searchDepth":54,"depth":54,"links":25717},[25718,25724],{"id":17022,"depth":54,"text":17023,"children":25719},[25720,25721,25722,25723],{"id":17026,"depth":66,"text":17027},{"id":17749,"depth":66,"text":17750},{"id":17921,"depth":66,"text":17922},{"id":18378,"depth":66,"text":18379},{"id":20748,"depth":54,"text":20749,"children":25725},[25726,25727,25728,25729,25730,25731,25732,25733,25734],{"id":20760,"depth":66,"text":20761},{"id":21053,"depth":66,"text":21054},{"id":21543,"depth":66,"text":21544},{"id":22640,"depth":66,"text":22641},{"id":23063,"depth":66,"text":23064},{"id":23542,"depth":66,"text":23543},{"id":23917,"depth":66,"text":23918},{"id":24330,"depth":66,"text":24331},{"id":25267,"depth":66,"text":25268},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16987,"description":25735},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25742,"title":2558,"body":25743,"description":2493,"extension":2494,"meta":25747,"navigation":69,"path":25749,"seo":25750,"stem":25751,"__hash__":25752},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25744,"toc":25745},[],{"title":31,"searchDepth":54,"depth":54,"links":25746},[],{"category":25748},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2558,"description":2493},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25754,"title":25755,"body":25756,"description":31,"extension":2494,"meta":26347,"navigation":69,"path":26348,"seo":26349,"stem":26350,"__hash__":26351},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25757,"toc":26329},[25758,25761,25765,25768,25771,25774,25792,25797,25800,25803,25806,25809,25814,25817,25822,25825,25828,25832,25835,25838,25844,25847,25865,25869,25873,25876,25881,25884,25888,25891,25904,25907,25911,25914,25917,25920,25945,25948,25957,25968,25983,26015,26019,26026,26034,26038,26041,26044,26049,26053,26056,26059,26064,26067,26071,26074,26077,26082,26085,26089,26094,26098,26165,26169,26172,26175,26178,26181,26184,26190,26211,26214,26228,26237,26241,26244,26247,26252,26255,26260,26265,26268,26271,26276,26281,26284,26289,26294,26297,26302,26307,26310,26313,26318,26321,26326],[10,25759,25755],{"id":25760},"_1强化学习基本认识",[14,25762,25764],{"id":25763},"_11什么是强化学习","1.1.什么是强化学习",[19,25766,25767],{},"强化学习有两部分组成：智能体和环境；",[19,25769,25770],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25772,25773],{},"强化学习与监督学习的区别:",[650,25775,25776,25779,25782,25785],{},[653,25777,25778],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[653,25780,25781],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[653,25783,25784],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[653,25786,25787,25788,25791],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[667,25789,25790],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25793,25794],{},[3879,25795],{"alt":31,"src":25796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25798,25799],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25801,25802],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25804,25805],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25807,25808],{},"获取奖励",[19,25810,25811],{},[3879,25812],{"alt":31,"src":25813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25815,25816],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25818,25819],{},[3879,25820],{"alt":31,"src":25821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25823,25824],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25826,25827],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25829,25831],{"id":25830},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25833,25834],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25836,25837],{},"具身智能中的应用",[19,25839,25840,25843],{},[667,25841,25842],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25845,25846],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25848,25849,25850,25853,25854,25857,25858,25861,25862],{},"机器人是",[667,25851,25852],{},"躯体","，深度学习是",[667,25855,25856],{},"神经元****网络","，VLA是",[667,25859,25860],{},"通用的行为逻辑","，而强化学习是",[667,25863,25864],{},"教练",[14,25866,25868],{"id":25867},"_13序列决策","1.3.序列决策",[1752,25870,25872],{"id":25871},"_131智能体与环境","1.3.1.智能体与环境",[19,25874,25875],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25877,25878],{},[3879,25879],{"alt":31,"src":25880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25882,25883],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1752,25885,25887],{"id":25886},"_132奖励","1.3.2.奖励",[19,25889,25890],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25892,25893,25894,25903],{},"取某个策略的表现如何。强化学习的目的就是",[667,25895,25896,25897,25902],{},"最大化",[667,25898,25899],{},[667,25900,25901],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25905,25906],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1752,25908,25910],{"id":25909},"_133序列决策","1.3.3.序列决策",[19,25912,25913],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25915,25916],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25918,25919],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25921,25922,25926,25927,25929,25930,25932,25933,25935,25936,16172,25939,16172,25942],{},[25923,25924,25925],"em",{},"Ht"," = ",[25923,25928,3151],{},"1*, a",[25923,25931,1906],{},", r",[25923,25934,1906],{},", . . . ,* ",[25923,25937,25938],{},"ot",[25923,25940,25941],{},", at ,",[25923,25943,25944],{},"rt",[19,25946,25947],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25949,25950,25926,25953,4066,25955,2985],{},[25923,25951,25952],{},"st",[25923,25954,95],{},[25923,25956,25925],{},[19,25958,25959,25960,25963,25964,25967],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[667,25961,25962],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[667,25965,25966],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25969,25970,25971,25974,25975,25978,25979,25982],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[667,25972,25973],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[667,25976,25977],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25923,25980,25981],{},"S, A, T, R, Ω, O, γ",")。",[19,25984,25985,25986,25988,25989,25991,25992,92,25994,25997,25998,26000,26001,92,26004,26007,26008,26010,26011,26014],{},"其中 ",[25923,25987,3243],{}," 表示状态空间，为隐变量，",[25923,25990,2790],{}," 为动作空间，",[25923,25993,3268],{},[25923,25995,25996],{},"s ′ |s, a",") 为状态转移概率，",[25923,25999,3218],{}," 为奖励函数，",[25923,26002,26003],{},"Ω",[25923,26005,26006],{},"o|s, a",") 为观测概率，",[25923,26009,3145],{}," 为观测空间，",[25923,26012,26013],{},"γ"," 为折扣因子。",[14,26016,26018],{"id":26017},"_14动作空间","1.4.动作空间",[19,26020,26021,26022,26025],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[667,26023,26024],{},"动作空间"," ，动作空间分为:",[650,26027,26028,26031],{},[653,26029,26030],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[653,26032,26033],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26035,26037],{"id":26036},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26039,26040],{},"由策略、价值函数、模型三部分组成",[19,26042,26043],{},"这三者组成马尔可夫决策过程",[19,26045,26046],{},[3879,26047],{"alt":31,"src":26048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1752,26050,26052],{"id":26051},"_151策略","1.5.1.策略",[19,26054,26055],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,26057,26058],{},"策略可分为两种：",[19,26060,26061],{},[3879,26062],{"alt":31,"src":26063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,26065,26066],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1752,26068,26070],{"id":26069},"_152价值函数","1.5.2.价值函数",[19,26072,26073],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,26075,26076],{},"价值函数中有一个折扣因子，类似于存款利息",[19,26078,26079],{},[3879,26080],{"alt":31,"src":26081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,26083,26084],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1752,26086,26088],{"id":26087},"_153模型","1.5.3.模型",[19,26090,26091],{},[3879,26092],{"alt":31,"src":26093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26095,26097],{"id":26096},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2698,26099,26100,26111],{},[2701,26101,26102],{},[2704,26103,26104,26108],{},[2707,26105,26107],{"align":26106},"left","类型",[2707,26109,26110],{"align":26106},"特点",[2744,26112,26113,26123,26133,26143,26155],{},[2704,26114,26115,26120],{},[2749,26116,26117],{"align":26106},[667,26118,26119],{},"基于价值的智能体",[2749,26121,26122],{"align":26106},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2704,26124,26125,26130],{},[2749,26126,26127],{"align":26106},[667,26128,26129],{},"基于策略的智能体",[2749,26131,26132],{"align":26106},"直接学习策略，没有学习价值函数",[2704,26134,26135,26140],{},[2749,26136,26137],{"align":26106},[667,26138,26139],{},"演员-评论员智能体",[2749,26141,26142],{"align":26106},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2704,26144,26145,26150],{},[2749,26146,26147],{"align":26106},[667,26148,26149],{},"有模型强化学习智能体",[2749,26151,26152],{"align":26106},[3879,26153],{"alt":31,"src":26154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2704,26156,26157,26162],{},[2749,26158,26159],{"align":26106},[667,26160,26161],{},"免模型强化学习智能体",[2749,26163,26164],{"align":26106},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26166,26168],{"id":26167},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26170,26171],{},"学习和规划是序列决策的两个基本问题",[19,26173,26174],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26176,26177],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26179,26180],{},"强化学习用到的库：Gym",[19,26182,26183],{},"Gym可以检验强化学习算法的优劣",[19,26185,26186,26189],{},[667,26187,26188],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,26191,26195],{"className":26192,"code":26193,"language":26194,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,26196,26197],{"__ignoreMap":31},[36,26198,26199,26202,26205,26208],{"class":38,"line":39},[36,26200,26201],{"class":79},"pip",[36,26203,26204],{"class":50}," install",[36,26206,26207],{"class":50}," gym==",[36,26209,26210],{"class":62},"0.25.2\n",[19,26212,26213],{},"显示图形界面需要",[26,26215,26217],{"className":26192,"code":26216,"language":26194,"meta":31,"style":31},"pip install pygame\n",[33,26218,26219],{"__ignoreMap":31},[36,26220,26221,26223,26225],{"class":38,"line":39},[36,26222,26201],{"class":79},[36,26224,26204],{"class":50},[36,26226,26227],{"class":50}," pygame\n",[19,26229,26230,26231],{},"有关Gym库的相关文档介绍：",[2796,26232,26236],{"href":26233,"rel":26234},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26235],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26238,26240],{"id":26239},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26242,26243],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26245,26246],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26248,26249],{},[3879,26250],{"alt":31,"src":26251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26253,26254],{},"折扣率需要自己来设定",[19,26256,26257],{},[3879,26258],{"alt":31,"src":26259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[650,26261,26262],{},[653,26263,26264],{},"状态转移函数：",[19,26266,26267],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26269,26270],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26272,26273],{},[3879,26274],{"alt":31,"src":26275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[650,26277,26278],{"start":54},[653,26279,26280],{},"动作价值函数：",[19,26282,26283],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26285,26286],{},[3879,26287],{"alt":31,"src":26288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[650,26290,26291],{"start":66},[653,26292,26293],{},"最优动作价值函数：",[19,26295,26296],{},"这个函数是对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,26298,26299],{},[3879,26300],{"alt":31,"src":26301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[650,26303,26304],{"start":73},[653,26305,26306],{},"状态价值函数:",[19,26308,26309],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26311,26312],{},"它衡量的是“一个具体动作”的长期价值",[19,26314,26315],{},[3879,26316],{"alt":31,"src":26317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26319,26320],{},"几个价值函数之间的比较：",[19,26322,26323],{},[3879,26324],{"alt":31,"src":26325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2467,26327,26328],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":26330},[26331,26332,26333,26338,26339,26344,26345,26346],{"id":25763,"depth":54,"text":25764},{"id":25830,"depth":54,"text":25831},{"id":25867,"depth":54,"text":25868,"children":26334},[26335,26336,26337],{"id":25871,"depth":66,"text":25872},{"id":25886,"depth":66,"text":25887},{"id":25909,"depth":66,"text":25910},{"id":26017,"depth":54,"text":26018},{"id":26036,"depth":54,"text":26037,"children":26340},[26341,26342,26343],{"id":26051,"depth":66,"text":26052},{"id":26069,"depth":66,"text":26070},{"id":26087,"depth":66,"text":26088},{"id":26096,"depth":54,"text":26097},{"id":26167,"depth":54,"text":26168},{"id":26239,"depth":54,"text":26240},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25755,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26353,"title":26354,"body":26355,"description":26362,"extension":2494,"meta":26373,"navigation":69,"path":26374,"seo":26375,"stem":26376,"__hash__":26377},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26356,"toc":26371},[26357,26360,26363,26368],[10,26358,26354],{"id":26359},"_2马尔可夫决策过程",[19,26361,26362],{},"这是强化学习的基本框架",[19,26364,26365],{},[3879,26366],{"alt":31,"src":26367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26369,26370],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":54,"depth":54,"links":26372},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26354,"description":26362},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26379,"title":26380,"body":26381,"description":31,"extension":2494,"meta":26497,"navigation":69,"path":26498,"seo":26499,"stem":26500,"__hash__":26501},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26382,"toc":26492},[26383,26386,26390,26393,26398,26403,26406,26411,26414,26419,26422,26426,26431,26434,26439,26444,26449,26452,26456,26461,26464,26469,26474,26479,26484,26487],[10,26384,26380],{"id":26385},"_3动作价值函数",[14,26387,26389],{"id":26388},"_31dqn","3.1.DQN",[19,26391,26392],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26394,26395],{},[3879,26396],{"alt":31,"src":26397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26399,26400],{},[3879,26401],{"alt":31,"src":26402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26404,26405],{},"DQN算法的描述：",[19,26407,26408],{},[3879,26409],{"alt":31,"src":26410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26412,26413],{},"这里的Dense指的是全连接层",[19,26415,26416],{},[3879,26417],{"alt":31,"src":26418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26420,26421],{},"当前观测的状态为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,26423,26425],{"id":26424},"_32dqn的举例","3.2.DQN的举例",[19,26427,26428],{},[3879,26429],{"alt":31,"src":26430},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26432,26433],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26435,26436],{},[3879,26437],{"alt":31,"src":26438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26440,26441],{},[3879,26442],{"alt":31,"src":26443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26445,26446],{},[3879,26447],{"alt":31,"src":26448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26450,26451],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26453,26455],{"id":26454},"_33td算法","3.3.TD算法",[19,26457,26458],{},[3879,26459],{"alt":31,"src":26460},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26462,26463],{},"强化学习TD算法公式的粗略解释：",[19,26465,26466],{},[3879,26467],{"alt":31,"src":26468},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26470,26471],{},[3879,26472],{"alt":31,"src":26473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26475,26476],{},[3879,26477],{"alt":31,"src":26478},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26480,26481],{},[3879,26482],{"alt":31,"src":26483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26485,26486],{},"TD算法总结：",[19,26488,26489],{},[3879,26490],{"alt":31,"src":26491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":54,"depth":54,"links":26493},[26494,26495,26496],{"id":26388,"depth":54,"text":26389},{"id":26424,"depth":54,"text":26425},{"id":26454,"depth":54,"text":26455},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26380,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26503,"title":26504,"body":26505,"description":31,"extension":2494,"meta":26738,"navigation":69,"path":26739,"seo":26740,"stem":26741,"__hash__":26742},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26506,"toc":26734},[26507,26510,26514,26517,26520,26525,26530,26533,26538,26543,26546,26551,26554,26559,26562,26567,26570,26575,26578,26583,26588,26591,26596,26599,26602,26607,26610,26615,26620,26624,26627,26630,26635,26640,26643,26648,26653,26656,26661,26664,26667,26672,26675,26680,26683,26688,26693,26696,26701,26706,26709,26714,26717,26722,26725],[10,26508,26504],{"id":26509},"_4策略学习",[14,26511,26513],{"id":26512},"_41概念描述","4.1.概念描述",[19,26515,26516],{},"用神经网络（策略网络）近似策略函数",[19,26518,26519],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26521,26522],{},[3879,26523],{"alt":31,"src":26524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26526,26527],{},[3879,26528],{"alt":31,"src":26529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26531,26532],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26534,26535],{},[3879,26536],{"alt":31,"src":26537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26539,26540],{},[3879,26541],{"alt":31,"src":26542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26544,26545],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26547,26548],{},[3879,26549],{"alt":31,"src":26550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26552,26553],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26555,26556],{},[3879,26557],{"alt":31,"src":26558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26560,26561],{},"改进theta要用到策略梯度算法",[19,26563,26564],{},[3879,26565],{"alt":31,"src":26566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26568,26569],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26571,26572],{},[3879,26573],{"alt":31,"src":26574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26576,26577],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26579,26580],{},[3879,26581],{"alt":31,"src":26582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26584,26585],{},[3879,26586],{"alt":31,"src":26587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26589,26590],{},"梯度公式总结：",[19,26592,26593],{},[3879,26594],{"alt":31,"src":26595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26597,26598],{},"两个公式的分别应用场景：",[19,26600,26601],{},"对于离散的动作：",[19,26603,26604],{},[3879,26605],{"alt":31,"src":26606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26608,26609],{},"对于连续的动作：",[19,26611,26612],{},[3879,26613],{"alt":31,"src":26614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26616,26617],{},[3879,26618],{"alt":31,"src":26619},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26621,26623],{"id":26622},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26625,26626],{},"使用蒙特卡洛来近似计算策略梯度",[19,26628,26629],{},"蒙特卡洛法的解释如下：",[19,26631,26632],{},[3879,26633],{"alt":31,"src":26634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26636,26637],{},[3879,26638],{"alt":31,"src":26639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26641,26642],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[650,26644,26645],{},[653,26646,26647],{},"方法一：reinforce算法",[19,26649,26650],{},[3879,26651],{"alt":31,"src":26652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26654,26655],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[650,26657,26658],{"start":54},[653,26659,26660],{},"方法二：actor-critic算法",[19,26662,26663],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26665,26666],{},"两个网络的构建：",[19,26668,26669],{},[3879,26670],{"alt":31,"src":26671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26673,26674],{},"actor网路：",[19,26676,26677],{},[3879,26678],{"alt":31,"src":26679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26681,26682],{},"critic网络",[19,26684,26685],{},[3879,26686],{"alt":31,"src":26687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[650,26689,26690],{"start":66},[653,26691,26692],{},"网络的训练",[19,26694,26695],{},"网络描述",[19,26697,26698],{},[3879,26699],{"alt":31,"src":26700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26702,26703],{},[3879,26704],{"alt":31,"src":26705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26707,26708],{},"TD算法更新梯度：",[19,26710,26711],{},[3879,26712],{"alt":31,"src":26713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26715,26716],{},"策略网络更新梯度：",[19,26718,26719],{},[3879,26720],{"alt":31,"src":26721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26723,26724],{},"训练整个流程的具体描述：",[19,26726,26727,26730,26731],{},[3879,26728],{"alt":31,"src":26729},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3879,26732],{"alt":31,"src":26733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":54,"depth":54,"links":26735},[26736,26737],{"id":26512,"depth":54,"text":26513},{"id":26622,"depth":54,"text":26623},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26504,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26744,"title":26745,"body":26746,"description":26753,"extension":2494,"meta":26803,"navigation":69,"path":26804,"seo":26805,"stem":26806,"__hash__":26807},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26747,"toc":26799},[26748,26751,26754,26758,26761,26766,26770,26773,26778,26781,26786,26791,26794],[10,26749,26745],{"id":26750},"_5alphago算法",[19,26752,26753],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26755,26757],{"id":26756},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26759,26760],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26762,26763],{},[3879,26764],{"alt":31,"src":26765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26767,26769],{"id":26768},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26771,26772],{},"采用强化学习的方式训练策略网络",[19,26774,26775],{},[3879,26776],{"alt":31,"src":26777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26779,26780],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26782,26783],{},[3879,26784],{"alt":31,"src":26785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26787,26788],{},[3879,26789],{"alt":31,"src":26790},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26792,26793],{},"强化学习训练策略网络的总结：",[19,26795,26796],{},[3879,26797],{"alt":31,"src":26798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":54,"depth":54,"links":26800},[26801,26802],{"id":26756,"depth":54,"text":26757},{"id":26768,"depth":54,"text":26769},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26745,"description":26753},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26809,"title":26810,"body":26811,"description":26818,"extension":2494,"meta":26821,"navigation":69,"path":26822,"seo":26823,"stem":26824,"__hash__":26825},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26812,"toc":26819},[26813,26816],[10,26814,26810],{"id":26815},"_6价值网络",[19,26817,26818],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":54,"depth":54,"links":26820},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26810,"description":26818},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26827,"title":26828,"body":26829,"description":26833,"extension":2494,"meta":26834,"navigation":69,"path":26835,"seo":26836,"stem":26837,"__hash__":26838},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26830,"toc":26831},[],{"title":31,"searchDepth":54,"depth":54,"links":26832},[],"记录自己的强化学习笔记。",{"category":25748},"\u002Fwiki\u002F2025-12-04",{"title":26828,"description":26833},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26840,"title":26841,"body":26842,"description":2493,"extension":2494,"meta":26881,"navigation":69,"path":26882,"seo":26883,"stem":26884,"__hash__":26885},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26843,"toc":26879},[26844,26847,26850,26856,26859,26865,26868,26873,26876],[10,26845,26841],{"id":26846},"_1-项目概览与官方资源",[19,26848,26849],{},"官方文档：",[19,26851,26852],{},[2796,26853,26854],{"href":26854,"rel":26855},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26235],[19,26857,26858],{},"官方代码仓库：",[19,26860,26861],{},[2796,26862,26863],{"href":26863,"rel":26864},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26235],[19,26866,26867],{},"复现大体流程：",[19,26869,26870],{},[3879,26871],{"alt":31,"src":26872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26874,26875],{},"本教程的目标是打通这条链路：",[19,26877,26878],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":54,"depth":54,"links":26880},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26841,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26887,"title":26888,"body":26889,"description":2493,"extension":2494,"meta":27005,"navigation":69,"path":27006,"seo":27007,"stem":27008,"__hash__":27009},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26890,"toc":27000},[26891,26894,26898,26901,26908,26912,26915,26924,26934,26938,26968,26971,26997],[10,26892,26888],{"id":26893},"_2-环境准备与设备连接",[14,26895,26897],{"id":26896},"_21-系统与环境","2.1 系统与环境",[19,26899,26900],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26902,26903,26904,26907],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,26905,26906],{},"lerobot"," 依赖。",[14,26909,26911],{"id":26910},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26913,26914],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,26916,26918],{"className":26192,"code":26917,"language":26194,"meta":31,"style":31},"lerobot-find-out\n",[33,26919,26920],{"__ignoreMap":31},[36,26921,26922],{"class":38,"line":39},[36,26923,26917],{"class":79},[19,26925,26926,26927,2031,26930,26933],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,26928,26929],{},"\u002Fdev\u002FttyACM0",[33,26931,26932],{},"\u002Fdev\u002FttyACM1","）。",[14,26935,26937],{"id":26936},"_23-串口授权","2.3 串口授权",[26,26939,26941],{"className":26192,"code":26940,"language":26194,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,26942,26943,26957],{"__ignoreMap":31},[36,26944,26945,26948,26951,26954],{"class":38,"line":39},[36,26946,26947],{"class":79},"sudo",[36,26949,26950],{"class":50}," chmod",[36,26952,26953],{"class":62}," 666",[36,26955,26956],{"class":50}," \u002Fdev\u002FttyACM0\n",[36,26958,26959,26961,26963,26965],{"class":38,"line":54},[36,26960,26947],{"class":79},[36,26962,26950],{"class":50},[36,26964,26953],{"class":62},[36,26966,26967],{"class":50}," \u002Fdev\u002FttyACM1\n",[19,26969,26970],{},"说明：",[3557,26972,26973,26978,26984,26994],{},[653,26974,26975,26977],{},[33,26976,26947],{},"：以 root 权限执行命令。",[653,26979,26980,26983],{},[33,26981,26982],{},"chmod","：修改设备节点权限。",[653,26985,26986,26989,26990,26993],{},[33,26987,26988],{},"666","：",[33,26991,26992],{},"rw-rw-rw-","，所有用户可读写。",[653,26995,26996],{},"串口号必须替换为你机器上的真实端口。",[2467,26998,26999],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":27001},[27002,27003,27004],{"id":26896,"depth":54,"text":26897},{"id":26910,"depth":54,"text":26911},{"id":26936,"depth":54,"text":26937},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26888,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27011,"title":27012,"body":27013,"description":2493,"extension":2494,"meta":27174,"navigation":69,"path":27175,"seo":27176,"stem":27177,"__hash__":27178},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27014,"toc":27170},[27015,27019,27023,27029,27032,27089,27092,27096,27099,27167],[10,27016,27018],{"id":27017},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27020,27022],{"id":27021},"_31-配置电机-id","3.1 配置电机 ID",[19,27024,27025,27026,27028],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,27027,1906],{},"，需要改成机械臂链路里不冲突的编号。",[19,27030,27031],{},"方式一：用 LeRobot 命令逐步写入。",[26,27033,27035],{"className":26192,"code":27034,"language":26194,"meta":31,"style":31},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[33,27036,27037,27042,27050,27057,27062,27066,27071,27077,27084],{"__ignoreMap":31},[36,27038,27039],{"class":38,"line":39},[36,27040,27041],{"class":2621},"# 主臂舵机配置 ID\n",[36,27043,27044,27047],{"class":38,"line":54},[36,27045,27046],{"class":79},"lerobot-setup-motors",[36,27048,27049],{"class":62}," \\\n",[36,27051,27052,27055],{"class":38,"line":66},[36,27053,27054],{"class":62},"  --teleop.type=so101_leader",[36,27056,27049],{"class":62},[36,27058,27059],{"class":38,"line":73},[36,27060,27061],{"class":62},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,27063,27064],{"class":38,"line":86},[36,27065,70],{"emptyLinePlaceholder":69},[36,27067,27068],{"class":38,"line":126},[36,27069,27070],{"class":2621},"# 从臂舵机配置 ID\n",[36,27072,27073,27075],{"class":38,"line":131},[36,27074,27046],{"class":79},[36,27076,27049],{"class":62},[36,27078,27079,27082],{"class":38,"line":225},[36,27080,27081],{"class":62},"  --robot.type=so101_follower",[36,27083,27049],{"class":62},[36,27085,27086],{"class":38,"line":235},[36,27087,27088],{"class":62},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,27090,27091],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27093,27095],{"id":27094},"_32-机械臂校准","3.2 机械臂校准",[19,27097,27098],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,27100,27102],{"className":26192,"code":27101,"language":26194,"meta":31,"style":31},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[33,27103,27104,27109,27116,27122,27129,27134,27138,27143,27149,27155,27162],{"__ignoreMap":31},[36,27105,27106],{"class":38,"line":39},[36,27107,27108],{"class":2621},"# 主臂校准\n",[36,27110,27111,27114],{"class":38,"line":54},[36,27112,27113],{"class":79},"lerobot-calibrate",[36,27115,27049],{"class":62},[36,27117,27118,27120],{"class":38,"line":66},[36,27119,27054],{"class":62},[36,27121,27049],{"class":62},[36,27123,27124,27127],{"class":38,"line":73},[36,27125,27126],{"class":62},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,27128,27049],{"class":62},[36,27130,27131],{"class":38,"line":86},[36,27132,27133],{"class":62},"  --teleop.id=my_awesome_leader_arm\n",[36,27135,27136],{"class":38,"line":126},[36,27137,70],{"emptyLinePlaceholder":69},[36,27139,27140],{"class":38,"line":131},[36,27141,27142],{"class":2621},"# 从臂校准\n",[36,27144,27145,27147],{"class":38,"line":225},[36,27146,27113],{"class":79},[36,27148,27049],{"class":62},[36,27150,27151,27153],{"class":38,"line":235},[36,27152,27081],{"class":62},[36,27154,27049],{"class":62},[36,27156,27157,27160],{"class":38,"line":377},[36,27158,27159],{"class":62},"  --robot.port=\u002Fdev\u002FttyACM1",[36,27161,27049],{"class":62},[36,27163,27164],{"class":38,"line":617},[36,27165,27166],{"class":62},"  --robot.id=my_awesome_follower_arm\n",[2467,27168,27169],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":27171},[27172,27173],{"id":27021,"depth":54,"text":27022},{"id":27094,"depth":54,"text":27095},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27012,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27180,"title":27181,"body":27182,"description":2493,"extension":2494,"meta":27373,"navigation":69,"path":27374,"seo":27375,"stem":27376,"__hash__":27377},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27183,"toc":27369},[27184,27187,27191,27238,27242,27255,27318,27321,27366],[10,27185,27181],{"id":27186},"_4-遥操与相机接入",[14,27188,27190],{"id":27189},"_41-不带相机遥操","4.1 不带相机遥操",[26,27192,27194],{"className":26192,"code":27193,"language":26194,"meta":31,"style":31},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[33,27195,27196,27203,27209,27215,27222,27228,27234],{"__ignoreMap":31},[36,27197,27198,27201],{"class":38,"line":39},[36,27199,27200],{"class":79},"lerobot-teleoperate",[36,27202,27049],{"class":62},[36,27204,27205,27207],{"class":38,"line":54},[36,27206,27081],{"class":62},[36,27208,27049],{"class":62},[36,27210,27211,27213],{"class":38,"line":66},[36,27212,27159],{"class":62},[36,27214,27049],{"class":62},[36,27216,27217,27220],{"class":38,"line":73},[36,27218,27219],{"class":62},"  --robot.id=my_awesome_follower_arm",[36,27221,27049],{"class":62},[36,27223,27224,27226],{"class":38,"line":86},[36,27225,27054],{"class":62},[36,27227,27049],{"class":62},[36,27229,27230,27232],{"class":38,"line":126},[36,27231,27126],{"class":62},[36,27233,27049],{"class":62},[36,27235,27236],{"class":38,"line":131},[36,27237,27133],{"class":62},[14,27239,27241],{"id":27240},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,27243,27245],{"className":26192,"code":27244,"language":26194,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,27246,27247],{"__ignoreMap":31},[36,27248,27249,27252],{"class":38,"line":39},[36,27250,27251],{"class":79},"lerobot-find-cameras",[36,27253,27254],{"class":50}," opencv\n",[26,27256,27258],{"className":26192,"code":27257,"language":26194,"meta":31,"style":31},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[33,27259,27260,27266,27272,27278,27284,27294,27300,27306,27313],{"__ignoreMap":31},[36,27261,27262,27264],{"class":38,"line":39},[36,27263,27200],{"class":79},[36,27265,27049],{"class":62},[36,27267,27268,27270],{"class":38,"line":54},[36,27269,27081],{"class":62},[36,27271,27049],{"class":62},[36,27273,27274,27276],{"class":38,"line":66},[36,27275,27159],{"class":62},[36,27277,27049],{"class":62},[36,27279,27280,27282],{"class":38,"line":73},[36,27281,27219],{"class":62},[36,27283,27049],{"class":62},[36,27285,27286,27289,27292],{"class":38,"line":86},[36,27287,27288],{"class":62},"  --robot.cameras=",[36,27290,27291],{"class":50},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,27293,27049],{"class":62},[36,27295,27296,27298],{"class":38,"line":126},[36,27297,27054],{"class":62},[36,27299,27049],{"class":62},[36,27301,27302,27304],{"class":38,"line":131},[36,27303,27126],{"class":62},[36,27305,27049],{"class":62},[36,27307,27308,27311],{"class":38,"line":225},[36,27309,27310],{"class":62},"  --teleop.id=my_awesome_leader_arm",[36,27312,27049],{"class":62},[36,27314,27315],{"class":38,"line":235},[36,27316,27317],{"class":62},"  --display_data=true\n",[19,27319,27320],{},"相机参数说明：",[3557,27322,27323,27329,27335,27344,27354,27360],{},[653,27324,27325,27328],{},[33,27326,27327],{},"front","：相机名称。",[653,27330,27331,27334],{},[33,27332,27333],{},"type: opencv","：相机驱动类型。",[653,27336,27337,27340,27341,26933],{},[33,27338,27339],{},"index_or_path","：设备编号或设备路径（如 ",[33,27342,27343],{},"\u002Fdev\u002Fvideo4",[653,27345,27346,27349,27350,27353],{},[33,27347,27348],{},"width"," \u002F ",[33,27351,27352],{},"height","：图像分辨率。",[653,27355,27356,27359],{},[33,27357,27358],{},"fps","：采样帧率。",[653,27361,27362,27365],{},[33,27363,27364],{},"--display_data=true","：启用实时可视化。",[2467,27367,27368],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":27370},[27371,27372],{"id":27189,"depth":54,"text":27190},{"id":27240,"depth":54,"text":27241},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27181,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27379,"title":27380,"body":27381,"description":2493,"extension":2494,"meta":27552,"navigation":69,"path":27553,"seo":27554,"stem":27555,"__hash__":27556},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27382,"toc":27547},[27383,27387,27391,27396,27401,27404,27446,27452,27456,27504,27509,27513,27516,27524,27529,27534,27539,27544],[10,27384,27386],{"id":27385},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27388,27390],{"id":27389},"_51-生成访问令牌","5.1 生成访问令牌",[19,27392,27393],{},[3879,27394],{"alt":31,"src":27395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27397,27398],{},[3879,27399],{"alt":31,"src":27400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27402,27403],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,27405,27407],{"className":26192,"code":27406,"language":26194,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,27408,27409,27422],{"__ignoreMap":31},[36,27410,27411,27414,27417,27419],{"class":38,"line":39},[36,27412,27413],{"class":46},"export",[36,27415,27416],{"class":42}," HF_TOKEN",[36,27418,47],{"class":46},[36,27420,27421],{"class":50},"\"your_huggingface_token\"\n",[36,27423,27424,27427,27430,27433,27436,27438,27441,27443],{"class":38,"line":54},[36,27425,27426],{"class":79},"hf",[36,27428,27429],{"class":50}," auth",[36,27431,27432],{"class":50}," login",[36,27434,27435],{"class":62}," --token",[36,27437,12103],{"class":50},[36,27439,27440],{"class":42},"$HF_TOKEN",[36,27442,604],{"class":50},[36,27444,27445],{"class":62}," --add-to-git-credential\n",[19,27447,27448,27451],{},[33,27449,27450],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27453,27455],{"id":27454},"_52-验证登录","5.2 验证登录",[26,27457,27459],{"className":26192,"code":27458,"language":26194,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,27460,27461,27492],{"__ignoreMap":31},[36,27462,27463,27466,27468,27471,27473,27475,27478,27481,27484,27487,27490],{"class":38,"line":39},[36,27464,27465],{"class":42},"HF_USER",[36,27467,47],{"class":46},[36,27469,27470],{"class":42},"$(",[36,27472,27426],{"class":79},[36,27474,27429],{"class":50},[36,27476,27477],{"class":50}," whoami",[36,27479,27480],{"class":46}," |",[36,27482,27483],{"class":79}," head",[36,27485,27486],{"class":62}," -n",[36,27488,27489],{"class":62}," 1",[36,27491,123],{"class":42},[36,27493,27494,27497,27499,27502],{"class":38,"line":54},[36,27495,27496],{"class":62},"echo",[36,27498,12103],{"class":50},[36,27500,27501],{"class":42},"$HF_USER",[36,27503,2326],{"class":50},[19,27505,27506],{},[3879,27507],{"alt":31,"src":27508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27510,27512],{"id":27511},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27514,27515],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3557,27517,27518,27521],{},[653,27519,27520],{},"Dataset Repo（用于上传演示数据）",[653,27522,27523],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27525,27526],{},[3879,27527],{"alt":31,"src":27528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27530,27531],{},[3879,27532],{"alt":31,"src":27533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27535,27536],{},[3879,27537],{"alt":31,"src":27538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27540,27541],{},[3879,27542],{"alt":31,"src":27543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2467,27545,27546],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":27548},[27549,27550,27551],{"id":27389,"depth":54,"text":27390},{"id":27454,"depth":54,"text":27455},{"id":27511,"depth":54,"text":27512},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27380,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27558,"title":27559,"body":27560,"description":2493,"extension":2494,"meta":27757,"navigation":69,"path":27758,"seo":27759,"stem":27760,"__hash__":27761},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27561,"toc":27752},[27562,27566,27570,27666,27674,27679,27683,27699,27702,27706,27749],[10,27563,27565],{"id":27564},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27567,27569],{"id":27568},"_61-录制示教数据","6.1 录制示教数据",[26,27571,27573],{"className":26192,"code":27572,"language":26194,"meta":31,"style":31},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[33,27574,27575,27582,27588,27594,27600,27609,27615,27621,27627,27634,27644,27651,27661],{"__ignoreMap":31},[36,27576,27577,27580],{"class":38,"line":39},[36,27578,27579],{"class":79},"lerobot-record",[36,27581,27049],{"class":62},[36,27583,27584,27586],{"class":38,"line":54},[36,27585,27081],{"class":62},[36,27587,27049],{"class":62},[36,27589,27590,27592],{"class":38,"line":66},[36,27591,27159],{"class":62},[36,27593,27049],{"class":62},[36,27595,27596,27598],{"class":38,"line":73},[36,27597,27219],{"class":62},[36,27599,27049],{"class":62},[36,27601,27602,27604,27607],{"class":38,"line":86},[36,27603,27288],{"class":62},[36,27605,27606],{"class":50},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,27608,27049],{"class":62},[36,27610,27611,27613],{"class":38,"line":126},[36,27612,27054],{"class":62},[36,27614,27049],{"class":62},[36,27616,27617,27619],{"class":38,"line":131},[36,27618,27126],{"class":62},[36,27620,27049],{"class":62},[36,27622,27623,27625],{"class":38,"line":225},[36,27624,27310],{"class":62},[36,27626,27049],{"class":62},[36,27628,27629,27632],{"class":38,"line":235},[36,27630,27631],{"class":62},"  --display_data=true",[36,27633,27049],{"class":62},[36,27635,27636,27639,27642],{"class":38,"line":377},[36,27637,27638],{"class":62},"  --dataset.repo_id=",[36,27640,27641],{"class":50},"\"Embodied-AI-6\u002Fso101_test\"",[36,27643,27049],{"class":62},[36,27645,27646,27649],{"class":38,"line":617},[36,27647,27648],{"class":62},"  --dataset.num_episodes=10",[36,27650,27049],{"class":62},[36,27652,27653,27656,27659],{"class":38,"line":643},[36,27654,27655],{"class":62},"  --dataset.single_task=",[36,27657,27658],{"class":50},"\"Grab the green cube\"",[36,27660,27049],{"class":62},[36,27662,27663],{"class":38,"line":921},[36,27664,27665],{"class":62},"  --resume=true\n",[3557,27667,27668],{},[653,27669,27670,27673],{},[33,27671,27672],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27675,27676],{},[3879,27677],{"alt":31,"src":27678},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27680,27682],{"id":27681},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,27684,27686],{"className":26192,"code":27685,"language":26194,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,27687,27688],{"__ignoreMap":31},[36,27689,27690,27693,27696],{"class":38,"line":39},[36,27691,27692],{"class":79},"rm",[36,27694,27695],{"class":62}," -rf",[36,27697,27698],{"class":50}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27700,27701],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27703,27705],{"id":27704},"_63-回放指定-episode","6.3 回放指定 episode",[26,27707,27709],{"className":26192,"code":27708,"language":26194,"meta":31,"style":31},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[33,27710,27711,27718,27724,27730,27736,27744],{"__ignoreMap":31},[36,27712,27713,27716],{"class":38,"line":39},[36,27714,27715],{"class":79},"lerobot-replay",[36,27717,27049],{"class":62},[36,27719,27720,27722],{"class":38,"line":54},[36,27721,27081],{"class":62},[36,27723,27049],{"class":62},[36,27725,27726,27728],{"class":38,"line":66},[36,27727,27159],{"class":62},[36,27729,27049],{"class":62},[36,27731,27732,27734],{"class":38,"line":73},[36,27733,27219],{"class":62},[36,27735,27049],{"class":62},[36,27737,27738,27740,27742],{"class":38,"line":86},[36,27739,27638],{"class":62},[36,27741,27641],{"class":50},[36,27743,27049],{"class":62},[36,27745,27746],{"class":38,"line":126},[36,27747,27748],{"class":62},"  --dataset.episode=0\n",[2467,27750,27751],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":27753},[27754,27755,27756],{"id":27568,"depth":54,"text":27569},{"id":27681,"depth":54,"text":27682},{"id":27704,"depth":54,"text":27705},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27559,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27763,"title":27764,"body":27765,"description":2493,"extension":2494,"meta":27893,"navigation":69,"path":27894,"seo":27895,"stem":27896,"__hash__":27897},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27766,"toc":27891},[27767,27771,27834,27837,27884,27889],[10,27768,27770],{"id":27769},"_7-act-模型训练","7. ACT 模型训练",[26,27772,27774],{"className":26192,"code":27773,"language":26194,"meta":31,"style":31},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[33,27775,27776,27783,27791,27798,27805,27812,27819,27826],{"__ignoreMap":31},[36,27777,27778,27781],{"class":38,"line":39},[36,27779,27780],{"class":79},"lerobot-train",[36,27782,27049],{"class":62},[36,27784,27785,27787,27789],{"class":38,"line":54},[36,27786,27638],{"class":62},[36,27788,27641],{"class":50},[36,27790,27049],{"class":62},[36,27792,27793,27796],{"class":38,"line":66},[36,27794,27795],{"class":62},"  --policy.type=act",[36,27797,27049],{"class":62},[36,27799,27800,27803],{"class":38,"line":73},[36,27801,27802],{"class":62},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,27804,27049],{"class":62},[36,27806,27807,27810],{"class":38,"line":86},[36,27808,27809],{"class":62},"  --job_name=act_so101_test",[36,27811,27049],{"class":62},[36,27813,27814,27817],{"class":38,"line":126},[36,27815,27816],{"class":62},"  --policy.device=cuda",[36,27818,27049],{"class":62},[36,27820,27821,27824],{"class":38,"line":131},[36,27822,27823],{"class":62},"  --wandb.enable=false",[36,27825,27049],{"class":62},[36,27827,27828,27831],{"class":38,"line":225},[36,27829,27830],{"class":62},"  --policy.repo_id=",[36,27832,27833],{"class":50},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27835,27836],{},"参数说明：",[3557,27838,27839,27845,27851,27857,27863,27872,27878],{},[653,27840,27841,27844],{},[33,27842,27843],{},"--dataset.repo_id","：训练数据集仓库。",[653,27846,27847,27850],{},[33,27848,27849],{},"--policy.type=act","：策略模型类型为 ACT。",[653,27852,27853,27856],{},[33,27854,27855],{},"--output_dir","：本地训练输出目录。",[653,27858,27859,27862],{},[33,27860,27861],{},"--job_name","：训练任务名称。",[653,27864,27865,27868,27869,26933],{},[33,27866,27867],{},"--policy.device","：训练设备（如 ",[33,27870,27871],{},"cuda",[653,27873,27874,27877],{},[33,27875,27876],{},"--wandb.enable","：是否启用 WandB 可视化。",[653,27879,27880,27883],{},[33,27881,27882],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27885,27886],{},[3879,27887],{"alt":31,"src":27888},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2467,27890,27751],{},{"title":31,"searchDepth":54,"depth":54,"links":27892},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27764,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27899,"title":27900,"body":27901,"description":2493,"extension":2494,"meta":27988,"navigation":69,"path":27989,"seo":27990,"stem":27991,"__hash__":27992},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27902,"toc":27986},[27903,27906,27909,27976,27984],[10,27904,27900],{"id":27905},"_8-策略部署与自动采集",[19,27907,27908],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,27910,27912],{"className":26192,"code":27911,"language":26194,"meta":31,"style":31},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[33,27913,27914,27920,27926,27932,27940,27946,27953,27961,27969],{"__ignoreMap":31},[36,27915,27916,27918],{"class":38,"line":39},[36,27917,27579],{"class":79},[36,27919,27049],{"class":62},[36,27921,27922,27924],{"class":38,"line":54},[36,27923,27081],{"class":62},[36,27925,27049],{"class":62},[36,27927,27928,27930],{"class":38,"line":66},[36,27929,27159],{"class":62},[36,27931,27049],{"class":62},[36,27933,27934,27936,27938],{"class":38,"line":73},[36,27935,27288],{"class":62},[36,27937,27606],{"class":50},[36,27939,27049],{"class":62},[36,27941,27942,27944],{"class":38,"line":86},[36,27943,27219],{"class":62},[36,27945,27049],{"class":62},[36,27947,27948,27951],{"class":38,"line":126},[36,27949,27950],{"class":62},"  --display_data=false",[36,27952,27049],{"class":62},[36,27954,27955,27957,27959],{"class":38,"line":131},[36,27956,27638],{"class":62},[36,27958,27641],{"class":50},[36,27960,27049],{"class":62},[36,27962,27963,27965,27967],{"class":38,"line":225},[36,27964,27655],{"class":62},[36,27966,27658],{"class":50},[36,27968,27049],{"class":62},[36,27970,27971,27974],{"class":38,"line":235},[36,27972,27973],{"class":62},"  --policy.path=",[36,27975,27833],{"class":50},[3557,27977,27978],{},[653,27979,27980,27983],{},[33,27981,27982],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2467,27985,27751],{},{"title":31,"searchDepth":54,"depth":54,"links":27987},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27900,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27994,"title":27995,"body":27996,"description":2493,"extension":2494,"meta":28025,"navigation":69,"path":28026,"seo":28027,"stem":28028,"__hash__":28029},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27997,"toc":28023},[27998,28002,28005,28011,28014,28020],[10,27999,28001],{"id":28000},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28003,28004],{},"项目地址：",[19,28006,28007],{},[2796,28008,28009],{"href":28009,"rel":28010},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26235],[19,28012,28013],{},"参考教程：",[19,28015,28016],{},[2796,28017,28018],{"href":28018,"rel":28019},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26235],[19,28021,28022],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":54,"depth":54,"links":28024},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27995,"description":2493},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28031,"title":28032,"body":28033,"description":28037,"extension":2494,"meta":28038,"navigation":69,"path":28039,"seo":28040,"stem":28041,"__hash__":28042},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28034,"toc":28035},[],{"title":31,"searchDepth":54,"depth":54,"links":28036},[],"act复现",{"category":25748},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28032,"description":28037},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28044,"title":28045,"body":28046,"description":31,"extension":2494,"meta":28348,"navigation":69,"path":28349,"seo":28350,"stem":28351,"__hash__":28352},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28047,"toc":28340},[28048,28051,28055,28065,28072,28079,28082,28089,28092,28095,28099,28111,28115,28161,28164,28167,28170,28173,28176,28180,28218,28224,28228,28282,28287,28290,28293,28298,28301,28306,28309,28312,28316,28319,28322,28326],[10,28049,28045],{"id":28050},"_1简介",[1752,28052,28054],{"id":28053},"_11什么是-docker","1.1什么是 Docker？",[19,28056,28057,28058,28061,28062],{},"Docker 是一个开源的 ",[667,28059,28060],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[667,28063,28064],{},"一次构建，到处运行。",[19,28066,28067,28068,28071],{},"“ ",[667,28069,28070],{},"一次构建，到处运行"," ”也就是说：",[650,28073,28074],{},[653,28075,28076],{},[667,28077,28078],{},"之前：",[19,28080,28081],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[650,28083,28084],{},[653,28085,28086],{},[667,28087,28088],{},"使用docker后：",[19,28090,28091],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,28093,28094],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1752,28096,28098],{"id":28097},"_12它是怎么工作的","1.2.它是怎么工作的？",[3557,28100,28101,28104],{},[653,28102,28103],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[653,28105,28106,28107,28110],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[667,28108,28109],{},"无论在哪运行都一样稳定"," 。",[1752,28112,28114],{"id":28113},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2698,28116,28117,28127],{},[2701,28118,28119],{},[2704,28120,28121,28124],{},[2707,28122,28123],{"align":26106},"概念",[2707,28125,28126],{"align":26106},"解释",[2744,28128,28129,28137,28145,28153],{},[2704,28130,28131,28134],{},[2749,28132,28133],{"align":26106},"镜像",[2749,28135,28136],{"align":26106},"Image，运行容器的模板，像是一个应用快照",[2704,28138,28139,28142],{},[2749,28140,28141],{"align":26106},"容器",[2749,28143,28144],{"align":26106},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2704,28146,28147,28150],{},[2749,28148,28149],{"align":26106},"Dockerfile",[2749,28151,28152],{"align":26106},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2704,28154,28155,28158],{},[2749,28156,28157],{"align":26106},"仓库",[2749,28159,28160],{"align":26106},"Registry，存放镜像的地方，比如 Docker Hub",[19,28162,28163],{},"抽象化理解:",[19,28165,28166],{},"Docker镜像≈C++类",[19,28168,28169],{},"Docker容器≈C++类实例(即对象)",[19,28171,28172],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28174,28175],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1752,28177,28179],{"id":28178},"_14类比理解","1.4.类比理解",[2698,28181,28182,28192],{},[2701,28183,28184],{},[2704,28185,28186,28189],{},[2707,28187,28188],{"align":26106},"传统部署",[2707,28190,28191],{"align":26106},"Docker部署",[2744,28193,28194,28202,28210],{},[2704,28195,28196,28199],{},[2749,28197,28198],{"align":26106},"手动安装依赖、调试版本不一致问题",[2749,28200,28201],{"align":26106},"一次打包环境和代码",[2704,28203,28204,28207],{},[2749,28205,28206],{"align":26106},"程序“裸奔”跑在系统上",[2749,28208,28209],{"align":26106},"程序“穿着容器”隔离运行",[2704,28211,28212,28215],{},[2749,28213,28214],{"align":26106},"容易“在我电脑上能跑”",[2749,28216,28217],{"align":26106},"保证“无论在哪都能跑”",[19,28219,28220,28221],{},"就像快递包裹： ",[667,28222,28223],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1752,28225,28227],{"id":28226},"_15docker-的核心优势","1.5.Docker 的核心优势",[2698,28229,28230,28240],{},[2701,28231,28232],{},[2704,28233,28234,28237],{},[2707,28235,28236],{"align":26106},"优势",[2707,28238,28239],{"align":26106},"说明",[2744,28241,28242,28250,28258,28266,28274],{},[2704,28243,28244,28247],{},[2749,28245,28246],{"align":26106},"轻量级",[2749,28248,28249],{"align":26106},"基于系统内核共享，启动速度快，占资源少",[2704,28251,28252,28255],{},[2749,28253,28254],{"align":26106},"跨平台",[2749,28256,28257],{"align":26106},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2704,28259,28260,28263],{},[2749,28261,28262],{"align":26106},"易于迁移部署",[2749,28264,28265],{"align":26106},"应用和环境一起封装，不怕依赖不一致",[2704,28267,28268,28271],{},[2749,28269,28270],{"align":26106},"易于版本控制",[2749,28272,28273],{"align":26106},"镜像版本可控，支持回滚",[2704,28275,28276,28279],{},[2749,28277,28278],{"align":26106},"生态丰富",[2749,28280,28281],{"align":26106},"Docker Hub 上有成千上万的现成镜像可用",[650,28283,28284],{},[653,28285,28286],{},"在Linux上可以几乎实现无性能损失。",[19,28288,28289],{},"docker里的发行版和本机共用Linux内核。",[19,28291,28292],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[650,28294,28295],{},[653,28296,28297],{},"可以快速部署在绝大多数Linux发行版",[19,28299,28300],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[650,28302,28303],{},[653,28304,28305],{},"配置环境简单",[19,28307,28308],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28310,28311],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[650,28313,28314],{},[653,28315,28278],{},[19,28317,28318],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28320,28321],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1752,28323,28325],{"id":28324},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3557,28327,28328,28331,28334,28337],{},[653,28329,28330],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[653,28332,28333],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[653,28335,28336],{},"微服务架构：每个服务一个容器，灵活组合",[653,28338,28339],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":54,"depth":54,"links":28341},[28342,28343,28344,28345,28346,28347],{"id":28053,"depth":66,"text":28054},{"id":28097,"depth":66,"text":28098},{"id":28113,"depth":66,"text":28114},{"id":28178,"depth":66,"text":28179},{"id":28226,"depth":66,"text":28227},{"id":28324,"depth":66,"text":28325},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28045,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28354,"title":28355,"body":28356,"description":31,"extension":2494,"meta":29089,"navigation":69,"path":29090,"seo":29091,"stem":29092,"__hash__":29093},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28357,"toc":29084},[28358,28361,28365,28368,28371,28377,28383,28387,28396,28399,28456,28459,28510,28513,28596,28599,28636,28640,28651,28664,28671,28674,28754,28757,28807,28810,28833,28837,28844,28847,28863,28869,28872,28888,28894,28897,28913,28927,28933,28953,28959,28962,28974,28980,28983,28997,29003,29006,29026,29031,29034,29037,29041,29044,29047,29050,29057,29060,29063,29066,29071,29076,29081],[10,28359,28355],{"id":28360},"_2安装docker",[1752,28362,28364],{"id":28363},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28366,28367],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28369,28370],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28372,28373],{},[2796,28374,28375],{"href":28375,"rel":28376},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26235],[19,28378,28379],{},[2796,28380,28381],{"href":28381,"rel":28382},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26235],[24368,28384,28386],{"id":28385},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28388,28389,28390,28395],{},"以下内容根据 ",[2796,28391,28394],{"href":28392,"rel":28393},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26235],"官方文档"," 修改而来。",[19,28397,28398],{},"如果你过去安装过 docker，先删掉：",[26,28400,28402],{"className":26192,"code":28401,"language":26194,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,28403,28404],{"__ignoreMap":31},[36,28405,28406,28408,28411,28414,28417,28420,28423,28426,28429,28432,28435,28438,28441,28444,28447,28450,28453],{"class":38,"line":39},[36,28407,5410],{"class":46},[36,28409,28410],{"class":42}," pkg ",[36,28412,28413],{"class":46},"in",[36,28415,28416],{"class":50}," docker.io",[36,28418,28419],{"class":50}," docker-doc",[36,28421,28422],{"class":50}," docker-compose",[36,28424,28425],{"class":50}," docker-compose-v2",[36,28427,28428],{"class":50}," podman-docker",[36,28430,28431],{"class":50}," containerd",[36,28433,28434],{"class":50}," runc",[36,28436,28437],{"class":42},"; ",[36,28439,28440],{"class":46},"do",[36,28442,28443],{"class":79}," sudo",[36,28445,28446],{"class":50}," apt-get",[36,28448,28449],{"class":50}," remove",[36,28451,28452],{"class":42}," $pkg; ",[36,28454,28455],{"class":46},"done\n",[19,28457,28458],{},"首先安装依赖和GPG：",[26,28460,28464],{"className":28461,"code":28462,"language":28463,"meta":31,"style":31},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[33,28465,28466,28471,28476,28481,28486,28491,28496,28500,28505],{"__ignoreMap":31},[36,28467,28468],{"class":38,"line":39},[36,28469,28470],{},"# Add Docker's official GPG key:\n",[36,28472,28473],{"class":38,"line":54},[36,28474,28475],{},"sudo apt-get update\n",[36,28477,28478],{"class":38,"line":66},[36,28479,28480],{},"sudo apt-get install ca-certificates curl\n",[36,28482,28483],{"class":38,"line":73},[36,28484,28485],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,28487,28488],{"class":38,"line":86},[36,28489,28490],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,28492,28493],{"class":38,"line":126},[36,28494,28495],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,28497,28498],{"class":38,"line":131},[36,28499,70],{"emptyLinePlaceholder":69},[36,28501,28502],{"class":38,"line":225},[36,28503,28504],{},"# 如果上面这行报错就弄下面这行\n",[36,28506,28507],{"class":38,"line":235},[36,28508,28509],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28511,28512],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,28514,28516],{"className":26192,"code":28515,"language":26194,"meta":31,"style":31},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[33,28517,28518,28523,28529,28546,28579],{"__ignoreMap":31},[36,28519,28520],{"class":38,"line":39},[36,28521,28522],{"class":2621},"# Add the repository to Apt sources:\n",[36,28524,28525,28527],{"class":38,"line":54},[36,28526,27496],{"class":62},[36,28528,27049],{"class":62},[36,28530,28531,28534,28537,28540,28543],{"class":38,"line":66},[36,28532,28533],{"class":50},"  \"deb [arch=$(",[36,28535,28536],{"class":79},"dpkg",[36,28538,28539],{"class":62}," --print-architecture",[36,28541,28542],{"class":50},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,28544,28545],{"class":62},"\\\n",[36,28547,28548,28551,28553,28555,28558,28561,28563,28565,28568,28570,28572,28575,28577],{"class":38,"line":73},[36,28549,28550],{"class":50},"  \"",[36,28552,27470],{"class":42},[36,28554,3113],{"class":62},[36,28556,28557],{"class":50}," \u002Fetc\u002Fos-release",[36,28559,28560],{"class":42}," && ",[36,28562,27496],{"class":62},[36,28564,12103],{"class":50},[36,28566,28567],{"class":42},"$VERSION_CODENAME",[36,28569,604],{"class":50},[36,28571,2985],{"class":42},[36,28573,28574],{"class":50},"\" stable\"",[36,28576,27480],{"class":46},[36,28578,27049],{"class":62},[36,28580,28581,28584,28587,28590,28593],{"class":38,"line":86},[36,28582,28583],{"class":79},"  sudo",[36,28585,28586],{"class":50}," tee",[36,28588,28589],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,28591,28592],{"class":46}," >",[36,28594,28595],{"class":50}," \u002Fdev\u002Fnull\n",[19,28597,28598],{},"最后安装",[26,28600,28602],{"className":26192,"code":28601,"language":26194,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,28603,28604,28613],{"__ignoreMap":31},[36,28605,28606,28608,28610],{"class":38,"line":39},[36,28607,26947],{"class":79},[36,28609,28446],{"class":50},[36,28611,28612],{"class":50}," update\n",[36,28614,28615,28617,28619,28621,28624,28627,28630,28633],{"class":38,"line":54},[36,28616,26947],{"class":79},[36,28618,28446],{"class":50},[36,28620,26204],{"class":50},[36,28622,28623],{"class":50}," docker-ce",[36,28625,28626],{"class":50}," docker-ce-cli",[36,28628,28629],{"class":50}," containerd.io",[36,28631,28632],{"class":50}," docker-buildx-plugin",[36,28634,28635],{"class":50}," docker-compose-plugin\n",[24368,28637,28639],{"id":28638},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28641,28642,28643,28646,28647,28650],{},"查看自己自己包管理工具版本（dnf是 ",[667,28644,28645],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[667,28648,28649],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,28652,28654],{"className":26192,"code":28653,"language":26194,"meta":31,"style":31},"dnf --version\n",[33,28655,28656],{"__ignoreMap":31},[36,28657,28658,28661],{"class":38,"line":39},[36,28659,28660],{"class":79},"dnf",[36,28662,28663],{"class":62}," --version\n",[19,28665,28389,28666,28670],{},[2796,28667,28394],{"href":28668,"rel":28669},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26235]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28672,28673],{},"如果你之前安装过 docker，请先删掉",[26,28675,28677],{"className":26192,"code":28676,"language":26194,"meta":31,"style":31},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[33,28678,28679,28693,28700,28707,28714,28721,28728,28735,28742,28749],{"__ignoreMap":31},[36,28680,28681,28683,28686,28688,28691],{"class":38,"line":39},[36,28682,26947],{"class":79},[36,28684,28685],{"class":50}," dnf",[36,28687,28449],{"class":50},[36,28689,28690],{"class":50}," docker",[36,28692,27049],{"class":62},[36,28694,28695,28698],{"class":38,"line":54},[36,28696,28697],{"class":50},"                  docker-client",[36,28699,27049],{"class":62},[36,28701,28702,28705],{"class":38,"line":66},[36,28703,28704],{"class":50},"                  docker-client-latest",[36,28706,27049],{"class":62},[36,28708,28709,28712],{"class":38,"line":73},[36,28710,28711],{"class":50},"                  docker-common",[36,28713,27049],{"class":62},[36,28715,28716,28719],{"class":38,"line":86},[36,28717,28718],{"class":50},"                  docker-latest",[36,28720,27049],{"class":62},[36,28722,28723,28726],{"class":38,"line":126},[36,28724,28725],{"class":50},"                  docker-latest-logrotate",[36,28727,27049],{"class":62},[36,28729,28730,28733],{"class":38,"line":131},[36,28731,28732],{"class":50},"                  docker-logrotate",[36,28734,27049],{"class":62},[36,28736,28737,28740],{"class":38,"line":225},[36,28738,28739],{"class":50},"                  docker-selinux",[36,28741,27049],{"class":62},[36,28743,28744,28747],{"class":38,"line":235},[36,28745,28746],{"class":50},"                  docker-engine-selinux",[36,28748,27049],{"class":62},[36,28750,28751],{"class":38,"line":377},[36,28752,28753],{"class":50},"                  docker-engine\n",[19,28755,28756],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,28758,28760],{"className":26192,"code":28759,"language":26194,"meta":31,"style":31},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[33,28761,28762,28776,28791],{"__ignoreMap":31},[36,28763,28764,28766,28768,28771,28773],{"class":38,"line":39},[36,28765,26947],{"class":79},[36,28767,28685],{"class":50},[36,28769,28770],{"class":62}," -y",[36,28772,26204],{"class":50},[36,28774,28775],{"class":50}," dnf-plugins-core\n",[36,28777,28778,28780,28782,28785,28788],{"class":38,"line":54},[36,28779,26947],{"class":79},[36,28781,28685],{"class":50},[36,28783,28784],{"class":50}," config-manager",[36,28786,28787],{"class":50}," addrepo",[36,28789,28790],{"class":62}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,28792,28793,28795,28798,28801,28804],{"class":38,"line":66},[36,28794,26947],{"class":79},[36,28796,28797],{"class":50}," sed",[36,28799,28800],{"class":62}," -i",[36,28802,28803],{"class":50}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,28805,28806],{"class":50}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28808,28809],{},"最后安装：",[26,28811,28813],{"className":26192,"code":28812,"language":26194,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,28814,28815],{"__ignoreMap":31},[36,28816,28817,28819,28821,28823,28825,28827,28829,28831],{"class":38,"line":39},[36,28818,26947],{"class":79},[36,28820,28685],{"class":50},[36,28822,26204],{"class":50},[36,28824,28623],{"class":50},[36,28826,28626],{"class":50},[36,28828,28629],{"class":50},[36,28830,28632],{"class":50},[36,28832,28635],{"class":50},[1752,28834,28836],{"id":28835},"_22配置环境","2.2.配置环境",[24368,28838,28840,28843],{"id":28839},"_221检查-docker-服务状态",[667,28841,28842],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28845,28846],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,28848,28850],{"className":26192,"code":28849,"language":26194,"meta":31,"style":31},"systemctl status docker\n",[33,28851,28852],{"__ignoreMap":31},[36,28853,28854,28857,28860],{"class":38,"line":39},[36,28855,28856],{"class":79},"systemctl",[36,28858,28859],{"class":50}," status",[36,28861,28862],{"class":50}," docker\n",[24368,28864,28866,28843],{"id":28865},"_222启动-docker-服务",[667,28867,28868],{},"2.2.2.启动 Docker 服务",[19,28870,28871],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,28873,28875],{"className":26192,"code":28874,"language":26194,"meta":31,"style":31},"sudo systemctl start docker\n",[33,28876,28877],{"__ignoreMap":31},[36,28878,28879,28881,28884,28886],{"class":38,"line":39},[36,28880,26947],{"class":79},[36,28882,28883],{"class":50}," systemctl",[36,28885,6567],{"class":50},[36,28887,28862],{"class":50},[24368,28889,28891,28843],{"id":28890},"_223设置-docker-开机自启",[667,28892,28893],{},"2.2.3.设置 Docker 开机自启",[19,28895,28896],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,28898,28900],{"className":26192,"code":28899,"language":26194,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,28901,28902],{"__ignoreMap":31},[36,28903,28904,28906,28908,28911],{"class":38,"line":39},[36,28905,26947],{"class":79},[36,28907,28883],{"class":50},[36,28909,28910],{"class":50}," enable",[36,28912,28862],{"class":50},[24368,28914,28916,16172,28919,16172,28924,28843],{"id":28915},"_224将用户添加到-docker-组",[667,28917,28918],{},"2.2.4.将用户添加到",[667,28920,28921],{},[33,28922,28923],{},"docker",[667,28925,28926],{},"组",[19,28928,28929,28930,28932],{},"使用以下命令将当前用户添加到 ",[33,28931,28923],{}," 组：",[26,28934,28936],{"className":26192,"code":28935,"language":26194,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,28937,28938],{"__ignoreMap":31},[36,28939,28940,28942,28945,28948,28950],{"class":38,"line":39},[36,28941,26947],{"class":79},[36,28943,28944],{"class":50}," usermod",[36,28946,28947],{"class":62}," -aG",[36,28949,28690],{"class":50},[36,28951,28952],{"class":42}," $USER\n",[24368,28954,28956,28843],{"id":28955},"_225退出并重新登录",[667,28957,28958],{},"2.2.5.退出并重新登录",[19,28960,28961],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,28963,28965],{"className":26192,"code":28964,"language":26194,"meta":31,"style":31},"newgrp docker\n",[33,28966,28967],{"__ignoreMap":31},[36,28968,28969,28972],{"class":38,"line":39},[36,28970,28971],{"class":79},"newgrp",[36,28973,28862],{"class":50},[24368,28975,28977,28843],{"id":28976},"_226重新启动-docker-服务如果需要",[667,28978,28979],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28981,28982],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,28984,28985],{"className":26192,"code":28874,"language":26194,"meta":31,"style":31},[33,28986,28987],{"__ignoreMap":31},[36,28988,28989,28991,28993,28995],{"class":38,"line":39},[36,28990,26947],{"class":79},[36,28992,28883],{"class":50},[36,28994,6567],{"class":50},[36,28996,28862],{"class":50},[24368,28998,29000,28843],{"id":28999},"_227重启电脑后检查-docker-服务状态",[667,29001,29002],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29004,29005],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,29007,29009],{"className":26192,"code":29008,"language":26194,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,29010,29011,29018],{"__ignoreMap":31},[36,29012,29013,29015],{"class":38,"line":39},[36,29014,26947],{"class":79},[36,29016,29017],{"class":50}," reboot\n",[36,29019,29020,29022,29024],{"class":38,"line":54},[36,29021,28856],{"class":79},[36,29023,28859],{"class":50},[36,29025,28862],{"class":50},[19,29027,29028],{},[3879,29029],{"alt":31,"src":29030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29032,29033],{},"第三行显示enabled说明开机自启动成功",[19,29035,29036],{},"按q退出",[1752,29038,29040],{"id":29039},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29042,29043],{},"优先使用linux来使用docker是比较好的",[19,29045,29046],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29048,29049],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29051,29052,29053],{},"官方下载安装:",[2796,29054,29055],{"href":29055,"rel":29056},"https:\u002F\u002Fwww.docker.com\u002F",[26235],[19,29058,29059],{},"Windows的Docker显卡直通与USB直通:",[19,29061,29062],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29064,29065],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,29067,29068],{},[3879,29069],{"alt":31,"src":29070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,29072,29073],{},[3879,29074],{"alt":31,"src":29075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,29077,29078],{},[3879,29079],{"alt":31,"src":29080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2467,29082,29083],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":29085},[29086,29087,29088],{"id":28363,"depth":66,"text":28364},{"id":28835,"depth":66,"text":28836},{"id":29039,"depth":66,"text":29040},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28355,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29095,"title":29096,"body":29097,"description":29104,"extension":2494,"meta":29797,"navigation":69,"path":29798,"seo":29799,"stem":29800,"__hash__":29801},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29098,"toc":29791},[29099,29102,29105,29109,29114,29119,29122,29150,29155,29164,29167,29172,29176,29183,29188,29194,29198,29201,29205,29210,29302,29307,29325,29330,29351,29356,29372,29376,29381,29410,29415,29461,29466,29510,29518,29535,29540,29556,29561,29575,29578,29581,29584,29587,29616,29619,29624,29628,29631,29634,29640,29643,29646,29649,29711,29718,29723,29726,29744,29748,29751,29768,29771,29774,29788],[10,29100,29096],{"id":29101},"_3docker直通",[19,29103,29104],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1752,29106,29108],{"id":29107},"_31usb直通","3.1.USB直通",[19,29110,29111],{},[3879,29112],{"alt":31,"src":29113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[650,29115,29116],{},[653,29117,29118],{},"方法一(不是很推荐新手)：",[19,29120,29121],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,29123,29125],{"className":26192,"code":29124,"language":26194,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,29126,29127,29135,29140],{"__ignoreMap":31},[36,29128,29129,29132],{"class":38,"line":39},[36,29130,29131],{"class":79},"ls",[36,29133,29134],{"class":50}," \u002Fdev\n",[36,29136,29137],{"class":38,"line":54},[36,29138,29139],{"class":2621},"#例如\n",[36,29141,29142,29145,29147],{"class":38,"line":66},[36,29143,29144],{"class":42},"--device",[36,29146,47],{"class":46},[36,29148,29149],{"class":50},"\u002Fdev\u002Ftty_USB0\n",[650,29151,29152],{"start":54},[653,29153,29154],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,29156,29158],{"className":26192,"code":29157,"language":26194,"meta":31,"style":31},"--privileged\n",[33,29159,29160],{"__ignoreMap":31},[36,29161,29162],{"class":38,"line":39},[36,29163,29157],{"class":79},[19,29165,29166],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29168,29169],{},[3879,29170],{"alt":31,"src":29171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1752,29173,29175],{"id":29174},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29177,29178,29179,29182],{},"NVIDIA Container Toolkit使用户 ",[667,29180,29181],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29184,29185],{},[3879,29186],{"alt":31,"src":29187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29189,29190],{},[2796,29191,29192],{"href":29192,"rel":29193},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26235],[24368,29195,29197],{"id":29196},"_321安装","3.2.1.安装",[19,29199,29200],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25280,29202,29204],{"id":29203},"_3211ubuntu","3.2.1.1.Ubuntu",[650,29206,29207],{},[653,29208,29209],{},"配置存储库 并更新",[26,29211,29213],{"className":26192,"code":29212,"language":26194,"meta":31,"style":31},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[33,29214,29215,29244,29264,29276,29288,29294],{"__ignoreMap":31},[36,29216,29217,29220,29223,29226,29228,29230,29233,29236,29239,29242],{"class":38,"line":39},[36,29218,29219],{"class":79},"curl",[36,29221,29222],{"class":62}," -fsSL",[36,29224,29225],{"class":50}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,29227,27480],{"class":46},[36,29229,28443],{"class":79},[36,29231,29232],{"class":50}," gpg",[36,29234,29235],{"class":62}," --dearmor",[36,29237,29238],{"class":62}," -o",[36,29240,29241],{"class":50}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,29243,27049],{"class":62},[36,29245,29246,29249,29251,29254,29257,29260,29262],{"class":38,"line":54},[36,29247,29248],{"class":42},"  && ",[36,29250,29219],{"class":79},[36,29252,29253],{"class":62}," -s",[36,29255,29256],{"class":62}," -L",[36,29258,29259],{"class":50}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,29261,27480],{"class":46},[36,29263,27049],{"class":62},[36,29265,29266,29269,29272,29274],{"class":38,"line":66},[36,29267,29268],{"class":79},"    sed",[36,29270,29271],{"class":50}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,29273,27480],{"class":46},[36,29275,27049],{"class":62},[36,29277,29278,29281,29283,29286],{"class":38,"line":73},[36,29279,29280],{"class":79},"    sudo",[36,29282,28586],{"class":50},[36,29284,29285],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,29287,27049],{"class":62},[36,29289,29290,29292],{"class":38,"line":86},[36,29291,29248],{"class":42},[36,29293,28545],{"class":62},[36,29295,29296,29298,29300],{"class":38,"line":126},[36,29297,29280],{"class":79},[36,29299,28446],{"class":50},[36,29301,28612],{"class":50},[650,29303,29304],{"start":54},[653,29305,29306],{},"安装nvidia-docker2",[26,29308,29310],{"className":26192,"code":29309,"language":26194,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,29311,29312],{"__ignoreMap":31},[36,29313,29314,29316,29318,29320,29322],{"class":38,"line":39},[36,29315,26947],{"class":79},[36,29317,28446],{"class":50},[36,29319,26204],{"class":50},[36,29321,28770],{"class":62},[36,29323,29324],{"class":50}," nvidia-docker2\n",[650,29326,29327],{"start":66},[653,29328,29329],{},"使用nvidia-ctk命令配置container runtime",[26,29331,29333],{"className":26192,"code":29332,"language":26194,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,29334,29335],{"__ignoreMap":31},[36,29336,29337,29339,29342,29345,29348],{"class":38,"line":39},[36,29338,26947],{"class":79},[36,29340,29341],{"class":50}," nvidia-ctk",[36,29343,29344],{"class":50}," runtime",[36,29346,29347],{"class":50}," configure",[36,29349,29350],{"class":62}," --runtime=docker\n",[650,29352,29353],{"start":73},[653,29354,29355],{},"重启docker服务:",[26,29357,29359],{"className":26192,"code":29358,"language":26194,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,29360,29361],{"__ignoreMap":31},[36,29362,29363,29365,29367,29370],{"class":38,"line":39},[36,29364,26947],{"class":79},[36,29366,28883],{"class":50},[36,29368,29369],{"class":50}," restart",[36,29371,28862],{"class":50},[25280,29373,29375],{"id":29374},"_3212fedora","3.2.1.2.Fedora",[650,29377,29378],{},[653,29379,29380],{},"配置存储库",[26,29382,29384],{"className":26192,"code":29383,"language":26194,"meta":31,"style":31},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[33,29385,29386,29401],{"__ignoreMap":31},[36,29387,29388,29390,29392,29394,29397,29399],{"class":38,"line":39},[36,29389,29219],{"class":79},[36,29391,29253],{"class":62},[36,29393,29256],{"class":62},[36,29395,29396],{"class":50}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,29398,27480],{"class":46},[36,29400,27049],{"class":62},[36,29402,29403,29405,29407],{"class":38,"line":54},[36,29404,26947],{"class":79},[36,29406,28586],{"class":50},[36,29408,29409],{"class":50}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[650,29411,29412],{"start":54},[653,29413,29414],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,29416,29418],{"className":26192,"code":29417,"language":26194,"meta":31,"style":31},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,29419,29420,29425,29439,29443,29448],{"__ignoreMap":31},[36,29421,29422],{"class":38,"line":39},[36,29423,29424],{"class":2621},"# 如果是RHEL或者Rocky（DNF4）\n",[36,29426,29427,29429,29431,29433,29436],{"class":38,"line":54},[36,29428,26947],{"class":79},[36,29430,28685],{"class":50},[36,29432,28784],{"class":50},[36,29434,29435],{"class":62}," --add-repo",[36,29437,29438],{"class":50}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,29440,29441],{"class":38,"line":66},[36,29442,70],{"emptyLinePlaceholder":69},[36,29444,29445],{"class":38,"line":73},[36,29446,29447],{"class":2621},"# 如果是Feodra41+（DNF5）\n",[36,29449,29450,29452,29454,29456,29458],{"class":38,"line":86},[36,29451,26947],{"class":79},[36,29453,28685],{"class":50},[36,29455,28784],{"class":50},[36,29457,28787],{"class":50},[36,29459,29460],{"class":62}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[650,29462,29463],{"start":66},[653,29464,29465],{},"安装NVIDIA Container Toolki包",[26,29467,29469],{"className":26192,"code":29468,"language":26194,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,29470,29471,29476,29489,29493,29498],{"__ignoreMap":31},[36,29472,29473],{"class":38,"line":39},[36,29474,29475],{"class":2621},"# 如果是RHEL或者Rocky\n",[36,29477,29478,29480,29482,29484,29486],{"class":38,"line":54},[36,29479,26947],{"class":79},[36,29481,28685],{"class":50},[36,29483,26204],{"class":50},[36,29485,28770],{"class":62},[36,29487,29488],{"class":50}," nvidia-container-toolkit\n",[36,29490,29491],{"class":38,"line":66},[36,29492,70],{"emptyLinePlaceholder":69},[36,29494,29495],{"class":38,"line":73},[36,29496,29497],{"class":2621},"# 如果是Fedora\n",[36,29499,29500,29502,29504,29506,29508],{"class":38,"line":86},[36,29501,26947],{"class":79},[36,29503,28685],{"class":50},[36,29505,26204],{"class":50},[36,29507,28770],{"class":62},[36,29509,29488],{"class":50},[650,29511,29512],{"start":73},[653,29513,29514,29515,29517],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,29516,28660],{},"进行安装",[26,29519,29521],{"className":26192,"code":29520,"language":26194,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,29522,29523],{"__ignoreMap":31},[36,29524,29525,29527,29529,29531,29533],{"class":38,"line":39},[36,29526,26947],{"class":79},[36,29528,28685],{"class":50},[36,29530,26204],{"class":50},[36,29532,28770],{"class":62},[36,29534,29324],{"class":50},[650,29536,29537],{"start":86},[653,29538,29539],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,29541,29542],{"className":26192,"code":29332,"language":26194,"meta":31,"style":31},[33,29543,29544],{"__ignoreMap":31},[36,29545,29546,29548,29550,29552,29554],{"class":38,"line":39},[36,29547,26947],{"class":79},[36,29549,29341],{"class":50},[36,29551,29344],{"class":50},[36,29553,29347],{"class":50},[36,29555,29350],{"class":62},[650,29557,29558],{"start":126},[653,29559,29560],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,29562,29563],{"className":26192,"code":29358,"language":26194,"meta":31,"style":31},[33,29564,29565],{"__ignoreMap":31},[36,29566,29567,29569,29571,29573],{"class":38,"line":39},[36,29568,26947],{"class":79},[36,29570,28883],{"class":50},[36,29572,29369],{"class":50},[36,29574,28862],{"class":50},[19,29576,29577],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29579,29580],{},"方法：",[19,29582,29583],{},"1️⃣nvidia-smi",[19,29585,29586],{},"2️⃣运行nvidia cuda 容器进行测试",[26,29588,29590],{"className":26192,"code":29589,"language":26194,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,29591,29592],{"__ignoreMap":31},[36,29593,29594,29596,29598,29601,29604,29607,29610,29613],{"class":38,"line":39},[36,29595,26947],{"class":79},[36,29597,28690],{"class":50},[36,29599,29600],{"class":50}," run",[36,29602,29603],{"class":62}," --rm",[36,29605,29606],{"class":62}," --gpus",[36,29608,29609],{"class":50}," all",[36,29611,29612],{"class":50}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,29614,29615],{"class":50}," nvidia-smi\n",[19,29617,29618],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29620,29621],{},[3879,29622],{"alt":31,"src":29623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1752,29625,29627],{"id":29626},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29629,29630],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29632,29633],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29635,29636],{},[2796,29637,29638],{"href":29638,"rel":29639},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26235],[19,29641,29642],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29644,29645],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29647,29648],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2698,29650,29651,29667],{},[2701,29652,29653],{},[2704,29654,29655,29658,29661,29664],{},[2707,29656,29657],{"align":26106},"镜像类型",[2707,29659,29660],{"align":26106},"适用场景",[2707,29662,29663],{"align":26106},"示例标签",[2707,29665,29666],{"align":26106},"大小",[2744,29668,29669,29683,29697],{},[2704,29670,29671,29674,29677,29680],{},[2749,29672,29673],{"align":26106},"base",[2749,29675,29676],{"align":26106},"仅需 CUDA 运行时库",[2749,29678,29679],{"align":26106},"12.4.0-base-ubuntu22.04",[2749,29681,29682],{"align":26106},"~240MB",[2704,29684,29685,29688,29691,29694],{},[2749,29686,29687],{"align":26106},"runtime",[2749,29689,29690],{"align":26106},"部署编译后的应用（含数学库）",[2749,29692,29693],{"align":26106},"12.4.0-runtime-ubuntu22.04",[2749,29695,29696],{"align":26106},"~2GB",[2704,29698,29699,29702,29705,29708],{},[2749,29700,29701],{"align":26106},"devel",[2749,29703,29704],{"align":26106},"开发环境（含编译工具）",[2749,29706,29707],{"align":26106},"12.4.0-devel-ubuntu22.04",[2749,29709,29710],{"align":26106},"~3GB",[19,29712,29713,29714,29717],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,29715,29716],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29719,29720],{},[3879,29721],{"alt":31,"src":29722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29724,29725],{},"在dockerfile里就可以开头这么写：",[26,29727,29729],{"className":26192,"code":29728,"language":26194,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,29730,29731,29736],{"__ignoreMap":31},[36,29732,29733],{"class":38,"line":39},[36,29734,29735],{"class":2621},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,29737,29738,29741],{"class":38,"line":54},[36,29739,29740],{"class":79},"FROM",[36,29742,29743],{"class":50}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1752,29745,29747],{"id":29746},"_34配置以太网","3.4.配置以太网",[19,29749,29750],{},"指定网络模式",[26,29752,29754],{"className":26192,"code":29753,"language":26194,"meta":31,"style":31},"--net=host \\\n",[33,29755,29756],{"__ignoreMap":31},[36,29757,29758,29761,29763,29766],{"class":38,"line":39},[36,29759,29760],{"class":42},"--net",[36,29762,47],{"class":46},[36,29764,29765],{"class":50},"host",[36,29767,27049],{"class":79},[19,29769,29770],{},"启动参数里加上这行即可。具体在下方",[19,29772,29773],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3557,29775,29776,29779,29782,29785],{},[653,29777,29778],{},"--net=bridge:默认选项，表示连接到默认的网桥",[653,29780,29781],{},"--net=host:容器使用宿主机的网络",[653,29783,29784],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[653,29786,29787],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2467,29789,29790],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":29792},[29793,29794,29795,29796],{"id":29107,"depth":66,"text":29108},{"id":29174,"depth":66,"text":29175},{"id":29626,"depth":66,"text":29627},{"id":29746,"depth":66,"text":29747},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29096,"description":29104},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29803,"title":29804,"body":29805,"description":29812,"extension":2494,"meta":29818,"navigation":69,"path":29819,"seo":29820,"stem":29821,"__hash__":29822},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29806,"toc":29816},[29807,29810,29813],[10,29808,29804],{"id":29809},"_4dockerhub换源",[19,29811,29812],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29814,29815],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":54,"depth":54,"links":29817},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29804,"description":29812},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29824,"title":29825,"body":29826,"description":31,"extension":2494,"meta":30837,"navigation":69,"path":30838,"seo":30839,"stem":30840,"__hash__":30841},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29827,"toc":30832},[29828,29831,29835,29841,29845,29848,30188,30191,30194,30197,30202,30207,30210,30213,30216,30219,30238,30241,30252,30258,30440,30450,30466,30729,30731,30755,30770,30779,30829],[10,29829,29825],{"id":29830},"_5docker命令学习",[1752,29832,29834],{"id":29833},"_51参考文档","5.1.参考文档",[19,29836,29837],{},[2796,29838,29839],{"href":29839,"rel":29840},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26235],[1752,29842,29844],{"id":29843},"_52常用命令","5.2.常用命令",[19,29846,29847],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2698,29849,29850,29863],{},[2701,29851,29852],{},[2704,29853,29854,29857,29860],{},[2707,29855,29856],{"align":26106},"命令",[2707,29858,29859],{"align":26106},"描述",[2707,29861,29862],{"align":26106},"示例",[2744,29864,29865,29876,29887,29898,29909,29920,29931,29942,29952,29963,29974,29985,29995,30006,30017,30028,30038,30048,30058,30068,30079,30090,30101,30112,30123,30134,30144,30155,30166,30177],{},[2704,29866,29867,29870,29873],{},[2749,29868,29869],{"align":26106},"docker run",[2749,29871,29872],{"align":26106},"创建并启动一个新的容器。",[2749,29874,29875],{"align":26106},"docker run -it ubuntu bash",[2704,29877,29878,29881,29884],{},[2749,29879,29880],{"align":26106},"docker build",[2749,29882,29883],{"align":26106},"通过指定的 Dockerfile 创建一个新的镜像。",[2749,29885,29886],{"align":26106},"docker build -t myimage .",[2704,29888,29889,29892,29895],{},[2749,29890,29891],{"align":26106},"docker pull",[2749,29893,29894],{"align":26106},"从 Docker 仓库拉取镜像。",[2749,29896,29897],{"align":26106},"docker pull ubuntu",[2704,29899,29900,29903,29906],{},[2749,29901,29902],{"align":26106},"docker push",[2749,29904,29905],{"align":26106},"将本地镜像推送到 Docker 仓库。",[2749,29907,29908],{"align":26106},"docker push myimage",[2704,29910,29911,29914,29917],{},[2749,29912,29913],{"align":26106},"docker stop",[2749,29915,29916],{"align":26106},"停止一个正在运行的容器。",[2749,29918,29919],{"align":26106},"docker stop container_id",[2704,29921,29922,29925,29928],{},[2749,29923,29924],{"align":26106},"docker start",[2749,29926,29927],{"align":26106},"启动一个已经存在的容器。",[2749,29929,29930],{"align":26106},"docker start container_id",[2704,29932,29933,29936,29939],{},[2749,29934,29935],{"align":26106},"docker restart",[2749,29937,29938],{"align":26106},"重新启动容器。",[2749,29940,29941],{"align":26106},"docker restart container_id",[2704,29943,29944,29947,29950],{},[2749,29945,29946],{"align":26106},"docker ps",[2749,29948,29949],{"align":26106},"列出当前正在运行的容器。",[2749,29951,29946],{"align":26106},[2704,29953,29954,29957,29960],{},[2749,29955,29956],{"align":26106},"docker rm",[2749,29958,29959],{"align":26106},"删除一个或多个停止的容器。",[2749,29961,29962],{"align":26106},"docker rm container_id",[2704,29964,29965,29968,29971],{},[2749,29966,29967],{"align":26106},"docker exec",[2749,29969,29970],{"align":26106},"在一个正在运行的容器中执行命令。",[2749,29972,29973],{"align":26106},"docker exec -it container_id bash",[2704,29975,29976,29979,29982],{},[2749,29977,29978],{"align":26106},"docker logs",[2749,29980,29981],{"align":26106},"查看容器的日志输出。",[2749,29983,29984],{"align":26106},"docker logs container_id",[2704,29986,29987,29990,29993],{},[2749,29988,29989],{"align":26106},"docker images",[2749,29991,29992],{"align":26106},"列出本地所有镜像。",[2749,29994,29989],{"align":26106},[2704,29996,29997,30000,30003],{},[2749,29998,29999],{"align":26106},"docker rmi",[2749,30001,30002],{"align":26106},"删除一个或多个镜像。",[2749,30004,30005],{"align":26106},"docker rmi myimage",[2704,30007,30008,30011,30014],{},[2749,30009,30010],{"align":26106},"docker network",[2749,30012,30013],{"align":26106},"管理 Docker 网络。",[2749,30015,30016],{"align":26106},"docker network ls",[2704,30018,30019,30022,30025],{},[2749,30020,30021],{"align":26106},"docker volume",[2749,30023,30024],{"align":26106},"管理 Docker 数据卷。",[2749,30026,30027],{"align":26106},"docker volume ls",[2704,30029,30030,30033,30036],{},[2749,30031,30032],{"align":26106},"docker-compose up",[2749,30034,30035],{"align":26106},"启动 docker-compose.yml 中定义的所有服务。",[2749,30037,30032],{"align":26106},[2704,30039,30040,30043,30046],{},[2749,30041,30042],{"align":26106},"docker-compose down",[2749,30044,30045],{"align":26106},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2749,30047,30042],{"align":26106},[2704,30049,30050,30053,30056],{},[2749,30051,30052],{"align":26106},"docker info",[2749,30054,30055],{"align":26106},"显示 Docker 系统的详细信息。",[2749,30057,30052],{"align":26106},[2704,30059,30060,30063,30066],{},[2749,30061,30062],{"align":26106},"docker stats",[2749,30064,30065],{"align":26106},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2749,30067,30062],{"align":26106},[2704,30069,30070,30073,30076],{},[2749,30071,30072],{"align":26106},"docker inspect",[2749,30074,30075],{"align":26106},"查看容器或镜像的详细信息（JSON 格式）。",[2749,30077,30078],{"align":26106},"docker inspect container_id",[2704,30080,30081,30084,30087],{},[2749,30082,30083],{"align":26106},"docker save",[2749,30085,30086],{"align":26106},"将一个镜像保存为 tar 文件。",[2749,30088,30089],{"align":26106},"docker save -o myimage.tar myimage",[2704,30091,30092,30095,30098],{},[2749,30093,30094],{"align":26106},"docker load",[2749,30096,30097],{"align":26106},"从 tar 文件中加载镜像。",[2749,30099,30100],{"align":26106},"docker load -i myimage.tar",[2704,30102,30103,30106,30109],{},[2749,30104,30105],{"align":26106},"docker tag",[2749,30107,30108],{"align":26106},"为镜像添加标签（tag）。",[2749,30110,30111],{"align":26106},"docker tag myimage myimage:v1",[2704,30113,30114,30117,30120],{},[2749,30115,30116],{"align":26106},"docker buildx build",[2749,30118,30119],{"align":26106},"使用 Buildx 构建多架构镜像。",[2749,30121,30122],{"align":26106},"docker buildx build -t myimage .",[2704,30124,30125,30128,30131],{},[2749,30126,30127],{"align":26106},"docker buildx create",[2749,30129,30130],{"align":26106},"创建一个新的 Buildx 构建实例。",[2749,30132,30133],{"align":26106},"docker buildx create –use",[2704,30135,30136,30139,30142],{},[2749,30137,30138],{"align":26106},"docker buildx ls",[2749,30140,30141],{"align":26106},"列出所有可用的 Buildx 构建实例。",[2749,30143,30138],{"align":26106},[2704,30145,30146,30149,30152],{},[2749,30147,30148],{"align":26106},"docker buildx use",[2749,30150,30151],{"align":26106},"设置当前的 Buildx 构建实例。",[2749,30153,30154],{"align":26106},"docker buildx use mybuilder",[2704,30156,30157,30160,30163],{},[2749,30158,30159],{"align":26106},"docker buildx bake",[2749,30161,30162],{"align":26106},"使用 Bake 文件批量构建镜像。",[2749,30164,30165],{"align":26106},"docker buildx bake -f bake.hcl",[2704,30167,30168,30171,30174],{},[2749,30169,30170],{"align":26106},"docker buildx build –push",[2749,30172,30173],{"align":26106},"构建镜像并推送到镜像仓库。",[2749,30175,30176],{"align":26106},"docker buildx build –push -t myimage .",[2704,30178,30179,30182,30185],{},[2749,30180,30181],{"align":26106},"docker buildx build –platform",[2749,30183,30184],{"align":26106},"构建镜像并为多个平台生成支持。",[2749,30186,30187],{"align":26106},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30189,30190],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30192,30193],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30195,30196],{},"docker images 可以查看已经下载的镜像",[19,30198,30199],{},[3879,30200],{"alt":31,"src":30201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30203,30204],{},[667,30205,30206],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30208,30209],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30211,30212],{},"docker container logs 查看容器日志",[19,30214,30215],{},"docker top 查看容器里的进程",[19,30217,30218],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,30220,30222],{"className":26192,"code":30221,"language":26194,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,30223,30224],{"__ignoreMap":31},[36,30225,30226,30229,30232,30235],{"class":38,"line":39},[36,30227,30228],{"class":79},"如：docker",[36,30230,30231],{"class":50}," cp",[36,30233,30234],{"class":50}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,30236,30237],{"class":50}," \u002Fmydata\u002Fnginx\n",[19,30239,30240],{},"docker run时在启动容器的时候会有几个常用的选项：",[3557,30242,30243,30246,30249],{},[653,30244,30245],{},"-d选项：表示后台运行",[653,30247,30248],{},"-P选项：随机端口映射",[653,30250,30251],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1752,30253,30255],{"id":30254},"_53run命令的参数非常重要",[667,30256,30257],{},"5.3.run命令的参数（非常重要）",[2698,30259,30260,30273],{},[2701,30261,30262],{},[2704,30263,30264,30267,30270],{},[2707,30265,30266],{"align":26106},"参数\u002F配置",[2707,30268,30269],{"align":26106},"功能说明",[2707,30271,30272],{"align":26106},"重要性与参考依据",[2744,30274,30275,30286,30297,30308,30319,30330,30341,30352,30363,30374,30385,30396,30407,30418,30429],{},[2704,30276,30277,30280,30283],{},[2749,30278,30279],{"align":26106},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2749,30281,30282],{"align":26106},"指定容器名称，便于后续管理",[2749,30284,30285],{"align":26106},"替代随机生成的容器名。",[2704,30287,30288,30291,30294],{},[2749,30289,30290],{"align":26106},"–gpus all",[2749,30292,30293],{"align":26106},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2749,30295,30296],{"align":26106},"用于CUDA加速等GPU依赖任务。",[2704,30298,30299,30302,30305],{},[2749,30300,30301],{"align":26106},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2749,30303,30304],{"align":26106},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2749,30306,30307],{"align":26106},"确保容器内GPU功能完整67。",[2704,30309,30310,30313,30316],{},[2749,30311,30312],{"align":26106},"-dit",[2749,30314,30315],{"align":26106},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2749,30317,30318],{"align":26106},"允许容器在后台运行并支持交互操作。",[2704,30320,30321,30324,30327],{},[2749,30322,30323],{"align":26106},"–privileged",[2749,30325,30326],{"align":26106},"赋予容器完全主机权限（可访问设备、内核模块等）",[2749,30328,30329],{"align":26106},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2704,30331,30332,30335,30338],{},[2749,30333,30334],{"align":26106},"–net=host",[2749,30336,30337],{"align":26106},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2749,30339,30340],{"align":26106},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2704,30342,30343,30346,30349],{},[2749,30344,30345],{"align":26106},"–group-add audio–group-add video–group-add dialout",[2749,30347,30348],{"align":26106},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2749,30350,30351],{"align":26106},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2704,30353,30354,30357,30360],{},[2749,30355,30356],{"align":26106},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2749,30358,30359],{"align":26106},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2749,30361,30362],{"align":26106},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2704,30364,30365,30368,30371],{},[2749,30366,30367],{"align":26106},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2749,30369,30370],{"align":26106},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2749,30372,30373],{"align":26106},"实现容器内图形显示。",[2704,30375,30376,30379,30382],{},[2749,30377,30378],{"align":26106},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2749,30380,30381],{"align":26106},"挂载X11认证文件（只读）",[2749,30383,30384],{"align":26106},"确保容器有权连接宿主机显示服务。",[2704,30386,30387,30390,30393],{},[2749,30388,30389],{"align":26106},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2749,30391,30392],{"align":26106},"挂载Wayland显示协议相关目录",[2749,30394,30395],{"align":26106},"支持Wayland协议的图形显示。",[2704,30397,30398,30401,30404],{},[2749,30399,30400],{"align":26106},"–ulimit nofile=1024:524288",[2749,30402,30403],{"align":26106},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2749,30405,30406],{"align":26106},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2704,30408,30409,30412,30415],{},[2749,30410,30411],{"align":26106},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2749,30413,30414],{"align":26106},"挂载宿主机用户目录到容器内同名路径",[2749,30416,30417],{"align":26106},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2704,30419,30420,30423,30426],{},[2749,30421,30422],{"align":26106},"-w \u002Fhome\u002Ftungchiahui",[2749,30424,30425],{"align":26106},"设置容器启动后的默认工作目录",[2749,30427,30428],{"align":26106},"直接进入项目路径，方便执行命令2324。",[2704,30430,30431,30434,30437],{},[2749,30432,30433],{"align":26106},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2749,30435,30436],{"align":26106},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2749,30438,30439],{"align":26106},"提供预配置的深度学习与机器人开发环境。",[19,30441,30442,30443,30445,30446,30449],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,30444,26947],{},"加不加",[33,30447,30448],{},"sudo -E","都无所谓。",[19,30451,30452,30453,30455,30456,30458,30459,30462,30463,30465],{},"用户已经被加到docker组了，不用",[33,30454,26947],{},"也行跑，其次，",[33,30457,26947],{},"运行的话，你的",[33,30460,30461],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,30464,30461],{},"更不可能变了。",[26,30467,30469],{"className":26192,"code":30468,"language":26194,"meta":31,"style":31},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[33,30470,30471,30484,30494,30504,30516,30523,30530,30537,30547,30556,30565,30579,30591,30603,30612,30622,30631,30646,30679,30706,30717,30724],{"__ignoreMap":31},[36,30472,30473,30475,30477,30479,30482],{"class":38,"line":39},[36,30474,26947],{"class":79},[36,30476,28690],{"class":50},[36,30478,29600],{"class":50},[36,30480,30481],{"class":62}," --name=ros_opencv_cuda",[36,30483,27049],{"class":62},[36,30485,30486,30489,30492],{"class":38,"line":54},[36,30487,30488],{"class":42},"--gpus ",[36,30490,30491],{"class":50},"all",[36,30493,27049],{"class":62},[36,30495,30496,30499,30502],{"class":38,"line":66},[36,30497,30498],{"class":42},"-e ",[36,30500,30501],{"class":50},"NVIDIA_DRIVER_CAPABILITIES=all",[36,30503,27049],{"class":62},[36,30505,30506,30508,30511,30514],{"class":38,"line":73},[36,30507,30498],{"class":42},[36,30509,30510],{"class":50},"DISPLAY=",[36,30512,30513],{"class":42},"$DISPLAY ",[36,30515,28545],{"class":62},[36,30517,30518,30521],{"class":38,"line":86},[36,30519,30520],{"class":42},"-dit ",[36,30522,28545],{"class":62},[36,30524,30525,30528],{"class":38,"line":126},[36,30526,30527],{"class":42},"--privileged ",[36,30529,28545],{"class":62},[36,30531,30532,30535],{"class":38,"line":131},[36,30533,30534],{"class":42},"--net=host ",[36,30536,28545],{"class":62},[36,30538,30539,30542,30545],{"class":38,"line":225},[36,30540,30541],{"class":42},"--group-add ",[36,30543,30544],{"class":50},"audio",[36,30546,27049],{"class":62},[36,30548,30549,30551,30554],{"class":38,"line":235},[36,30550,30541],{"class":42},[36,30552,30553],{"class":50},"video",[36,30555,27049],{"class":62},[36,30557,30558,30560,30563],{"class":38,"line":377},[36,30559,30541],{"class":42},[36,30561,30562],{"class":50},"dialout",[36,30564,27049],{"class":62},[36,30566,30567,30569,30572,30574,30577],{"class":38,"line":617},[36,30568,30498],{"class":42},[36,30570,30571],{"class":50},"XAUTHORITY=",[36,30573,30461],{"class":42},[36,30575,30576],{"class":50},"\u002F.Xauthority",[36,30578,27049],{"class":62},[36,30580,30581,30583,30586,30589],{"class":38,"line":643},[36,30582,30498],{"class":42},[36,30584,30585],{"class":50},"WAYLAND_DISPLAY=",[36,30587,30588],{"class":42},"$WAYLAND_DISPLAY ",[36,30590,28545],{"class":62},[36,30592,30593,30595,30598,30601],{"class":38,"line":921},[36,30594,30498],{"class":42},[36,30596,30597],{"class":50},"XDG_RUNTIME_DIR=",[36,30599,30600],{"class":42},"$XDG_RUNTIME_DIR ",[36,30602,28545],{"class":62},[36,30604,30605,30607,30610],{"class":38,"line":934},[36,30606,30498],{"class":42},[36,30608,30609],{"class":50},"QT_QPA_PLATFORM=xcb",[36,30611,27049],{"class":62},[36,30613,30614,30617,30620],{"class":38,"line":939},[36,30615,30616],{"class":42},"-v ",[36,30618,30619],{"class":50},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,30621,27049],{"class":62},[36,30623,30624,30626,30629],{"class":38,"line":949},[36,30625,30616],{"class":42},[36,30627,30628],{"class":50},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,30630,27049],{"class":62},[36,30632,30633,30636,30639,30641,30644],{"class":38,"line":962},[36,30634,30635],{"class":42},"-v $HOME",[36,30637,30638],{"class":50},"\u002F.Xauthority:",[36,30640,30461],{"class":42},[36,30642,30643],{"class":50},"\u002F.Xauthority:ro",[36,30645,27049],{"class":62},[36,30647,30648,30650,30653,30655,30658,30661,30663,30666,30668,30670,30672,30674,30677],{"class":38,"line":974},[36,30649,30616],{"class":42},[36,30651,30652],{"class":50},"\u002Frun\u002Fuser\u002F",[36,30654,27470],{"class":42},[36,30656,30657],{"class":79},"id",[36,30659,30660],{"class":62}," -u",[36,30662,2985],{"class":42},[36,30664,30665],{"class":50},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,30667,27470],{"class":42},[36,30669,30657],{"class":79},[36,30671,30660],{"class":62},[36,30673,2985],{"class":42},[36,30675,30676],{"class":50},"\u002Fwayland-0",[36,30678,27049],{"class":62},[36,30680,30681,30683,30685,30687,30689,30691,30693,30696,30698,30700,30702,30704],{"class":38,"line":979},[36,30682,30616],{"class":42},[36,30684,30652],{"class":50},[36,30686,27470],{"class":42},[36,30688,30657],{"class":79},[36,30690,30660],{"class":62},[36,30692,2985],{"class":42},[36,30694,30695],{"class":50},":\u002Frun\u002Fuser\u002F",[36,30697,27470],{"class":42},[36,30699,30657],{"class":79},[36,30701,30660],{"class":62},[36,30703,16091],{"class":42},[36,30705,28545],{"class":62},[36,30707,30708,30710,30712,30715],{"class":38,"line":994},[36,30709,30635],{"class":42},[36,30711,3413],{"class":50},[36,30713,30714],{"class":42},"$HOME ",[36,30716,28545],{"class":62},[36,30718,30719,30722],{"class":38,"line":1006},[36,30720,30721],{"class":42},"-w $HOME ",[36,30723,28545],{"class":62},[36,30725,30726],{"class":38,"line":1011},[36,30727,30728],{"class":42},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30730,11405],{},[650,30732,30733,30741,30744,30747],{},[653,30734,30735,16172,30737,30740],{},[33,30736,30501],{},[33,30738,30739],{},"--gpus all","没有英伟达显卡请注释。",[653,30742,30743],{},"--name后面请自己为容器起名。",[653,30745,30746],{},"最后一行仓库名称请你自己找对应的镜像填上。",[653,30748,30749,30750,676],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25923,30751,30752],{},[667,30753,30754],{},"请不要加",[26,30756,30758],{"className":26192,"code":30757,"language":26194,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,30759,30760],{"__ignoreMap":31},[36,30761,30762,30765,30768],{"class":38,"line":39},[36,30763,30764],{"class":79},"--ulimit",[36,30766,30767],{"class":50}," nofile=1024:524288",[36,30769,27049],{"class":62},[19,30771,30772,30773,30778],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25923,30774,30775],{},[667,30776,30777],{},"不建议","**.**",[26,30780,30782],{"className":26192,"code":30781,"language":26194,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,30783,30784,30811,30820],{"__ignoreMap":31},[36,30785,30786,30789,30792,30794,30796,30798,30800,30802,30804,30807,30809],{"class":38,"line":39},[36,30787,30788],{"class":79},"--user",[36,30790,30791],{"class":42}," $(",[36,30793,30657],{"class":79},[36,30795,30660],{"class":62},[36,30797,2985],{"class":42},[36,30799,3413],{"class":50},[36,30801,27470],{"class":42},[36,30803,30657],{"class":79},[36,30805,30806],{"class":62}," -g",[36,30808,16091],{"class":42},[36,30810,28545],{"class":62},[36,30812,30813,30815,30818],{"class":38,"line":54},[36,30814,30616],{"class":42},[36,30816,30817],{"class":50},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,30819,27049],{"class":62},[36,30821,30822,30824,30827],{"class":38,"line":66},[36,30823,30616],{"class":42},[36,30825,30826],{"class":50},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,30828,27049],{"class":62},[2467,30830,30831],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":30833},[30834,30835,30836],{"id":29833,"depth":66,"text":29834},{"id":29843,"depth":66,"text":29844},{"id":30254,"depth":66,"text":30257},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29825,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30843,"title":30844,"body":30845,"description":31,"extension":2494,"meta":32468,"navigation":69,"path":32469,"seo":32470,"stem":32471,"__hash__":32472},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30846,"toc":32463},[30847,30850,30854,30857,31079,31083,31087,31090,31196,31201,31204,31209,31212,31217,31220,31225,31228,31240,31243,31248,31255,31283,31290,31366,31371,31374,31397,31399,31474,31479,31482,31486,31494,31499,31504,31508,31519,31525,31528,31531,31555,31558,31561,31589,31592,31595,32060,32063,32068,32073,32077,32100,32105,32109,32113,32116,32119,32122,32149,32152,32155,32173,32176,32179,32201,32209,32214,32219,32223,32226,32229,32232,32235,32280,32283,32301,32304,32309,32312,32333,32336,32392,32395,32400,32404,32407,32414,32417,32420,32425,32428,32444,32447,32460],[10,30848,30844],{"id":30849},"_6手动创建docker镜像",[1752,30851,30853],{"id":30852},"_61dockerfile","6.1.DockerFile",[19,30855,30856],{},"常用命令：",[2698,30858,30859,30870],{},[2701,30860,30861],{},[2704,30862,30863,30866,30868],{},[2707,30864,30865],{"align":26106},"指令",[2707,30867,28239],{"align":26106},[2707,30869,29862],{"align":26106},[2744,30871,30872,30882,30898,30909,30920,30931,30942,30953,30964,30978,30992,31003,31017,31028,31039,31053,31068],{},[2704,30873,30874,30876,30879],{},[2749,30875,29740],{"align":26106},[2749,30877,30878],{"align":26106},"指定基础镜像，是 Dockerfile 的起点",[2749,30880,30881],{"align":26106},"FROM ubuntu:22.04",[2704,30883,30884,30887,30890],{},[2749,30885,30886],{"align":26106},"LABEL",[2749,30888,30889],{"align":26106},"添加元数据（如作者、版本等）",[2749,30891,30892,30893,30897],{"align":26106},"LABEL maintainer=”",[2796,30894,30896],{"href":30895},"mailto:you@example.com","you@example.com","”",[2704,30899,30900,30903,30906],{},[2749,30901,30902],{"align":26106},"ENV",[2749,30904,30905],{"align":26106},"设置环境变量",[2749,30907,30908],{"align":26106},"ENV PORT=8080",[2704,30910,30911,30914,30917],{},[2749,30912,30913],{"align":26106},"ARG",[2749,30915,30916],{"align":26106},"构建参数，只在构建期间可用",[2749,30918,30919],{"align":26106},"ARG VERSION=1.0",[2704,30921,30922,30925,30928],{},[2749,30923,30924],{"align":26106},"RUN",[2749,30926,30927],{"align":26106},"构建镜像时运行命令",[2749,30929,30930],{"align":26106},"RUN apt-get update && apt-get install -y curl",[2704,30932,30933,30936,30939],{},[2749,30934,30935],{"align":26106},"COPY",[2749,30937,30938],{"align":26106},"复制文件到镜像中",[2749,30940,30941],{"align":26106},"COPY . \u002Fapp",[2704,30943,30944,30947,30950],{},[2749,30945,30946],{"align":26106},"ADD",[2749,30948,30949],{"align":26106},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2749,30951,30952],{"align":26106},"ADD archive.tar.gz \u002Fdata\u002F",[2704,30954,30955,30958,30961],{},[2749,30956,30957],{"align":26106},"WORKDIR",[2749,30959,30960],{"align":26106},"设置工作目录",[2749,30962,30963],{"align":26106},"WORKDIR \u002Fopt",[2704,30965,30966,30969,30972],{},[2749,30967,30968],{"align":26106},"CMD",[2749,30970,30971],{"align":26106},"设置容器启动时默认命令（可被 docker run 覆盖）",[2749,30973,30974,30975],{"align":26106},"CMD ",[36,30976,30977],{},"“node”, “index.js”",[2704,30979,30980,30983,30986],{},[2749,30981,30982],{"align":26106},"ENTRYPOINT",[2749,30984,30985],{"align":26106},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2749,30987,30988,30989],{"align":26106},"ENTRYPOINT ",[36,30990,30991],{},"“python3”",[2704,30993,30994,30997,31000],{},[2749,30995,30996],{"align":26106},"EXPOSE",[2749,30998,30999],{"align":26106},"声明镜像内服务监听的端口（不会自动映射）",[2749,31001,31002],{"align":26106},"EXPOSE 80",[2704,31004,31005,31008,31011],{},[2749,31006,31007],{"align":26106},"VOLUME",[2749,31009,31010],{"align":26106},"声明数据卷挂载点",[2749,31012,31013,31014],{"align":26106},"VOLUME ",[36,31015,31016],{},"“\u002Fdata”",[2704,31018,31019,31022,31025],{},[2749,31020,31021],{"align":26106},"USER",[2749,31023,31024],{"align":26106},"设置后续命令执行的用户",[2749,31026,31027],{"align":26106},"USER appuser",[2704,31029,31030,31033,31036],{},[2749,31031,31032],{"align":26106},"ONBUILD",[2749,31034,31035],{"align":26106},"当镜像作为其他镜像基础镜像时触发的构建指令",[2749,31037,31038],{"align":26106},"ONBUILD COPY . \u002Fsrc",[2704,31040,31041,31044,31047],{},[2749,31042,31043],{"align":26106},"SHELL",[2749,31045,31046],{"align":26106},"更改默认 shell，比如将 sh -c 改为 bash -c",[2749,31048,31049,31050],{"align":26106},"SHELL ",[36,31051,31052],{},"“\u002Fbin\u002Fbash”, “-c”",[2704,31054,31055,31058,31061],{},[2749,31056,31057],{"align":26106},"HEALTHCHECK",[2749,31059,31060],{"align":26106},"定义容器运行时的健康检查命令",[2749,31062,31063,31064],{"align":26106},"`HEALTHCHECK CMD curl –fail ",[2796,31065,31066],{"href":31066,"rel":31067},"http:\u002F\u002Flocalhost:8080",[26235],[2704,31069,31070,31073,31076],{},[2749,31071,31072],{"align":26106},"STOPSIGNAL",[2749,31074,31075],{"align":26106},"容器停止时发送的信号",[2749,31077,31078],{"align":26106},"STOPSIGNAL SIGKILL",[1752,31080,31082],{"id":31081},"_62自己创建容器","6.2.自己创建容器",[24368,31084,31086],{"id":31085},"_621手动创建","6.2.1.手动创建",[19,31088,31089],{},"在x86电脑上编译x86的：",[26,31091,31093],{"className":26192,"code":31092,"language":26194,"meta":31,"style":31},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[33,31094,31095,31111,31115,31128,31132,31145,31149,31162,31166,31179,31183],{"__ignoreMap":31},[36,31096,31097,31099,31102,31105,31108],{"class":38,"line":39},[36,31098,28923],{"class":79},[36,31100,31101],{"class":50}," build",[36,31103,31104],{"class":62}," -t",[36,31106,31107],{"class":50}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,31109,31110],{"class":50}," .\n",[36,31112,31113],{"class":38,"line":54},[36,31114,70],{"emptyLinePlaceholder":69},[36,31116,31117,31119,31121,31123,31126],{"class":38,"line":66},[36,31118,28923],{"class":79},[36,31120,31101],{"class":50},[36,31122,31104],{"class":62},[36,31124,31125],{"class":50}," ros-noetic-focal:latest",[36,31127,31110],{"class":50},[36,31129,31130],{"class":38,"line":73},[36,31131,70],{"emptyLinePlaceholder":69},[36,31133,31134,31136,31138,31140,31143],{"class":38,"line":86},[36,31135,28923],{"class":79},[36,31137,31101],{"class":50},[36,31139,31104],{"class":62},[36,31141,31142],{"class":50}," ros-humble-jammy:latest",[36,31144,31110],{"class":50},[36,31146,31147],{"class":38,"line":126},[36,31148,70],{"emptyLinePlaceholder":69},[36,31150,31151,31153,31155,31157,31160],{"class":38,"line":131},[36,31152,28923],{"class":79},[36,31154,31101],{"class":50},[36,31156,31104],{"class":62},[36,31158,31159],{"class":50}," ros-jazzy-noble:latest",[36,31161,31110],{"class":50},[36,31163,31164],{"class":38,"line":225},[36,31165,70],{"emptyLinePlaceholder":69},[36,31167,31168,31170,31172,31174,31177],{"class":38,"line":235},[36,31169,28923],{"class":79},[36,31171,31101],{"class":50},[36,31173,31104],{"class":62},[36,31175,31176],{"class":50}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,31178,31110],{"class":50},[36,31180,31181],{"class":38,"line":377},[36,31182,70],{"emptyLinePlaceholder":69},[36,31184,31185,31187,31189,31191,31194],{"class":38,"line":617},[36,31186,28923],{"class":79},[36,31188,31101],{"class":50},[36,31190,31104],{"class":62},[36,31192,31193],{"class":50}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,31195,31110],{"class":50},[19,31197,31198],{},[3879,31199],{"alt":31,"src":31200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31202,31203],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31205,31206],{},[3879,31207],{"alt":31,"src":31208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31210,31211],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[650,31213,31214],{},[653,31215,31216],{},"创建 Docker Hub 账户",[19,31218,31219],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[650,31221,31222],{"start":54},[653,31223,31224],{},"登录 Docker Hub",[19,31226,31227],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,31229,31231],{"className":26192,"code":31230,"language":26194,"meta":31,"style":31},"docker login\n",[33,31232,31233],{"__ignoreMap":31},[36,31234,31235,31237],{"class":38,"line":39},[36,31236,28923],{"class":79},[36,31238,31239],{"class":50}," login\n",[19,31241,31242],{},"输入你的 Docker Hub 用户名和密码进行验证。",[650,31244,31245],{},[653,31246,31247],{},"为你的镜像打标签",[19,31249,31250,31251,31254],{},"Docker Hub 使用 ",[33,31252,31253],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,31256,31258],{"className":26192,"code":31257,"language":26194,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,31259,31260],{"__ignoreMap":31},[36,31261,31262,31264,31267,31269,31272,31275,31278,31280],{"class":38,"line":39},[36,31263,28923],{"class":79},[36,31265,31266],{"class":50}," tag",[36,31268,31159],{"class":50},[36,31270,31271],{"class":46}," \u003C",[36,31273,31274],{"class":50},"你的用户",[36,31276,31277],{"class":42},"名",[36,31279,986],{"class":46},[36,31281,31282],{"class":50},"\u002Fros-jazzy-noble:latest\n",[19,31284,31285,31286,31289],{},"例如，如果你的 Docker Hub 用户名是 ",[33,31287,31288],{},"tungchiahui","，你应该执行：",[26,31291,31293],{"className":26192,"code":31292,"language":26194,"meta":31,"style":31},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[33,31294,31295,31306,31310,31321,31325,31336,31340,31351,31355],{"__ignoreMap":31},[36,31296,31297,31299,31301,31303],{"class":38,"line":39},[36,31298,28923],{"class":79},[36,31300,31266],{"class":50},[36,31302,31125],{"class":50},[36,31304,31305],{"class":50}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,31307,31308],{"class":38,"line":54},[36,31309,70],{"emptyLinePlaceholder":69},[36,31311,31312,31314,31316,31318],{"class":38,"line":66},[36,31313,28923],{"class":79},[36,31315,31266],{"class":50},[36,31317,31142],{"class":50},[36,31319,31320],{"class":50}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,31322,31323],{"class":38,"line":73},[36,31324,70],{"emptyLinePlaceholder":69},[36,31326,31327,31329,31331,31333],{"class":38,"line":86},[36,31328,28923],{"class":79},[36,31330,31266],{"class":50},[36,31332,31159],{"class":50},[36,31334,31335],{"class":50}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,31337,31338],{"class":38,"line":126},[36,31339,70],{"emptyLinePlaceholder":69},[36,31341,31342,31344,31346,31348],{"class":38,"line":131},[36,31343,28923],{"class":79},[36,31345,31266],{"class":50},[36,31347,31176],{"class":50},[36,31349,31350],{"class":50}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,31352,31353],{"class":38,"line":225},[36,31354,70],{"emptyLinePlaceholder":69},[36,31356,31357,31359,31361,31363],{"class":38,"line":235},[36,31358,28923],{"class":79},[36,31360,31266],{"class":50},[36,31362,31193],{"class":50},[36,31364,31365],{"class":50}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[650,31367,31368],{"start":54},[653,31369,31370],{},"推送镜像到 Docker Hub",[19,31372,31373],{},"使用以下命令将镜像推送到 Docker Hub：",[26,31375,31377],{"className":26192,"code":31376,"language":26194,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,31378,31379],{"__ignoreMap":31},[36,31380,31381,31383,31386,31388,31390,31392,31394],{"class":38,"line":39},[36,31382,28923],{"class":79},[36,31384,31385],{"class":50}," push",[36,31387,31271],{"class":46},[36,31389,31274],{"class":50},[36,31391,31277],{"class":42},[36,31393,986],{"class":46},[36,31395,31396],{"class":50},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31398,17010],{},[26,31400,31402],{"className":26192,"code":31401,"language":26194,"meta":31,"style":31},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[33,31403,31404,31412,31416,31424,31428,31436,31440,31449,31453,31461,31465],{"__ignoreMap":31},[36,31405,31406,31408,31410],{"class":38,"line":39},[36,31407,28923],{"class":79},[36,31409,31385],{"class":50},[36,31411,31305],{"class":50},[36,31413,31414],{"class":38,"line":54},[36,31415,70],{"emptyLinePlaceholder":69},[36,31417,31418,31420,31422],{"class":38,"line":66},[36,31419,28923],{"class":79},[36,31421,31385],{"class":50},[36,31423,31320],{"class":50},[36,31425,31426],{"class":38,"line":73},[36,31427,70],{"emptyLinePlaceholder":69},[36,31429,31430,31432,31434],{"class":38,"line":86},[36,31431,28923],{"class":79},[36,31433,31385],{"class":50},[36,31435,31335],{"class":50},[36,31437,31438],{"class":38,"line":126},[36,31439,70],{"emptyLinePlaceholder":69},[36,31441,31442,31444,31446],{"class":38,"line":131},[36,31443,28923],{"class":79},[36,31445,31385],{"class":50},[36,31447,31448],{"class":50}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,31450,31451],{"class":38,"line":225},[36,31452,70],{"emptyLinePlaceholder":69},[36,31454,31455,31457,31459],{"class":38,"line":235},[36,31456,28923],{"class":79},[36,31458,31385],{"class":50},[36,31460,31365],{"class":50},[36,31462,31463],{"class":38,"line":377},[36,31464,70],{"emptyLinePlaceholder":69},[36,31466,31467,31469,31471],{"class":38,"line":617},[36,31468,28923],{"class":79},[36,31470,31385],{"class":50},[36,31472,31473],{"class":50}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[650,31475,31476],{"start":66},[653,31477,31478],{},"验证推送成功",[19,31480,31481],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31483,31484],{},[667,31485,6168],{},[3557,31487,31488,31491],{},[653,31489,31490],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[653,31492,31493],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31495,31496],{},[3879,31497],{"alt":31,"src":31498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31500,31501],{},[3879,31502],{"alt":31,"src":31503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24368,31505,31507],{"id":31506},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31509,31510,31511,31514,31515,31518],{},"如果您想在 ",[667,31512,31513],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[667,31516,31517],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31520,31521,31522],{},"1. ",[667,31523,31524],{},"启用 Docker 跨平台构建",[19,31526,31527],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31529,31530],{},"第一步：启用 buildx（只需执行一次）",[26,31532,31534],{"className":26192,"code":31533,"language":26194,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,31535,31536],{"__ignoreMap":31},[36,31537,31538,31540,31543,31546,31549,31552],{"class":38,"line":39},[36,31539,28923],{"class":79},[36,31541,31542],{"class":50}," buildx",[36,31544,31545],{"class":50}," create",[36,31547,31548],{"class":62}," --name",[36,31550,31551],{"class":50}," multiarch_builder",[36,31553,31554],{"class":62}," --use\n",[19,31556,31557],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31559,31560],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,31562,31564],{"className":26192,"code":31563,"language":26194,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,31565,31566],{"__ignoreMap":31},[36,31567,31568,31570,31572,31574,31577,31580,31583,31586],{"class":38,"line":39},[36,31569,28923],{"class":79},[36,31571,29600],{"class":50},[36,31573,29603],{"class":62},[36,31575,31576],{"class":62}," --privileged",[36,31578,31579],{"class":50}," multiarch\u002Fqemu-user-static",[36,31581,31582],{"class":62}," --reset",[36,31584,31585],{"class":62}," -p",[36,31587,31588],{"class":50}," yes\n",[19,31590,31591],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31593,31594],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,31596,31598],{"className":26192,"code":31597,"language":26194,"meta":31,"style":31},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[33,31599,31600,31642,31646,31651,31661,31671,31680,31686,31690,31694,31704,31712,31721,31727,31731,31735,31745,31753,31762,31768,31772,31776,31786,31794,31803,31809,31813,31817,31827,31835,31844,31850,31854,31858,31868,31876,31885,31891,31895,31899,31909,31917,31926,31932,31936,31940,31950,31958,31967,31973,31977,31981,31991,31999,32008,32014,32018,32022,32033,32041,32050,32056],{"__ignoreMap":31},[36,31601,31602,31604,31606,31608,31611,31614,31616,31618,31621,31623,31625,31627,31629,31632,31635,31637,31640],{"class":38,"line":39},[36,31603,28923],{"class":79},[36,31605,31542],{"class":50},[36,31607,31101],{"class":50},[36,31609,31610],{"class":62}," --platform",[36,31612,31613],{"class":50}," linux\u002Famd64,linux\u002Farm64",[36,31615,31104],{"class":62},[36,31617,31271],{"class":46},[36,31619,31620],{"class":50},"你的镜像",[36,31622,31277],{"class":42},[36,31624,986],{"class":46},[36,31626,3413],{"class":50},[36,31628,3463],{"class":46},[36,31630,31631],{"class":50},"标",[36,31633,31634],{"class":42},"签",[36,31636,986],{"class":46},[36,31638,31639],{"class":62}," --push",[36,31641,31110],{"class":50},[36,31643,31644],{"class":38,"line":54},[36,31645,70],{"emptyLinePlaceholder":69},[36,31647,31648],{"class":38,"line":66},[36,31649,31650],{"class":2621},"# 例子：\n",[36,31652,31653,31655,31657,31659],{"class":38,"line":73},[36,31654,28923],{"class":79},[36,31656,31542],{"class":50},[36,31658,31101],{"class":50},[36,31660,27049],{"class":62},[36,31662,31663,31666,31669],{"class":38,"line":86},[36,31664,31665],{"class":42},"--platform ",[36,31667,31668],{"class":50},"linux\u002Famd64,linux\u002Farm64",[36,31670,27049],{"class":62},[36,31672,31673,31675,31678],{"class":38,"line":126},[36,31674,31104],{"class":62},[36,31676,31677],{"class":50}," tungchiahui\u002Fros:noetic-focal",[36,31679,27049],{"class":62},[36,31681,31682,31684],{"class":38,"line":131},[36,31683,31639],{"class":62},[36,31685,27049],{"class":62},[36,31687,31688],{"class":38,"line":225},[36,31689,31110],{"class":50},[36,31691,31692],{"class":38,"line":235},[36,31693,70],{"emptyLinePlaceholder":69},[36,31695,31696,31698,31700,31702],{"class":38,"line":377},[36,31697,28923],{"class":79},[36,31699,31542],{"class":50},[36,31701,31101],{"class":50},[36,31703,27049],{"class":62},[36,31705,31706,31708,31710],{"class":38,"line":617},[36,31707,31665],{"class":42},[36,31709,31668],{"class":50},[36,31711,27049],{"class":62},[36,31713,31714,31716,31719],{"class":38,"line":643},[36,31715,31104],{"class":62},[36,31717,31718],{"class":50}," tungchiahui\u002Fros:humble-jammy",[36,31720,27049],{"class":62},[36,31722,31723,31725],{"class":38,"line":921},[36,31724,31639],{"class":62},[36,31726,27049],{"class":62},[36,31728,31729],{"class":38,"line":934},[36,31730,31110],{"class":50},[36,31732,31733],{"class":38,"line":939},[36,31734,70],{"emptyLinePlaceholder":69},[36,31736,31737,31739,31741,31743],{"class":38,"line":949},[36,31738,28923],{"class":79},[36,31740,31542],{"class":50},[36,31742,31101],{"class":50},[36,31744,27049],{"class":62},[36,31746,31747,31749,31751],{"class":38,"line":962},[36,31748,31665],{"class":42},[36,31750,31668],{"class":50},[36,31752,27049],{"class":62},[36,31754,31755,31757,31760],{"class":38,"line":974},[36,31756,31104],{"class":62},[36,31758,31759],{"class":50}," tungchiahui\u002Fros:jazzy-noble",[36,31761,27049],{"class":62},[36,31763,31764,31766],{"class":38,"line":979},[36,31765,31639],{"class":62},[36,31767,27049],{"class":62},[36,31769,31770],{"class":38,"line":994},[36,31771,31110],{"class":50},[36,31773,31774],{"class":38,"line":1006},[36,31775,70],{"emptyLinePlaceholder":69},[36,31777,31778,31780,31782,31784],{"class":38,"line":1011},[36,31779,28690],{"class":79},[36,31781,31542],{"class":50},[36,31783,31101],{"class":50},[36,31785,27049],{"class":62},[36,31787,31788,31790,31792],{"class":38,"line":1023},[36,31789,31665],{"class":42},[36,31791,31668],{"class":50},[36,31793,27049],{"class":62},[36,31795,31796,31798,31801],{"class":38,"line":1028},[36,31797,31104],{"class":62},[36,31799,31800],{"class":50}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,31802,27049],{"class":62},[36,31804,31805,31807],{"class":38,"line":1033},[36,31806,31639],{"class":62},[36,31808,27049],{"class":62},[36,31810,31811],{"class":38,"line":1053},[36,31812,31110],{"class":50},[36,31814,31815],{"class":38,"line":1064},[36,31816,70],{"emptyLinePlaceholder":69},[36,31818,31819,31821,31823,31825],{"class":38,"line":1075},[36,31820,28923],{"class":79},[36,31822,31542],{"class":50},[36,31824,31101],{"class":50},[36,31826,27049],{"class":62},[36,31828,31829,31831,31833],{"class":38,"line":2291},[36,31830,31665],{"class":42},[36,31832,31668],{"class":50},[36,31834,27049],{"class":62},[36,31836,31837,31839,31842],{"class":38,"line":2329},[36,31838,31104],{"class":62},[36,31840,31841],{"class":50}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,31843,27049],{"class":62},[36,31845,31846,31848],{"class":38,"line":2334},[36,31847,31639],{"class":62},[36,31849,27049],{"class":62},[36,31851,31852],{"class":38,"line":2339},[36,31853,31110],{"class":50},[36,31855,31856],{"class":38,"line":2365},[36,31857,70],{"emptyLinePlaceholder":69},[36,31859,31860,31862,31864,31866],{"class":38,"line":2373},[36,31861,28690],{"class":79},[36,31863,31542],{"class":50},[36,31865,31101],{"class":50},[36,31867,27049],{"class":62},[36,31869,31870,31872,31874],{"class":38,"line":5001},[36,31871,31665],{"class":42},[36,31873,31668],{"class":50},[36,31875,27049],{"class":62},[36,31877,31878,31880,31883],{"class":38,"line":5006},[36,31879,31104],{"class":62},[36,31881,31882],{"class":50}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,31884,27049],{"class":62},[36,31886,31887,31889],{"class":38,"line":10328},[36,31888,31639],{"class":62},[36,31890,27049],{"class":62},[36,31892,31893],{"class":38,"line":10352},[36,31894,31110],{"class":50},[36,31896,31897],{"class":38,"line":10357},[36,31898,70],{"emptyLinePlaceholder":69},[36,31900,31901,31903,31905,31907],{"class":38,"line":10363},[36,31902,28923],{"class":79},[36,31904,31542],{"class":50},[36,31906,31101],{"class":50},[36,31908,27049],{"class":62},[36,31910,31911,31913,31915],{"class":38,"line":10390},[36,31912,31665],{"class":42},[36,31914,31668],{"class":50},[36,31916,27049],{"class":62},[36,31918,31919,31921,31924],{"class":38,"line":10395},[36,31920,31104],{"class":62},[36,31922,31923],{"class":50}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,31925,27049],{"class":62},[36,31927,31928,31930],{"class":38,"line":10401},[36,31929,31639],{"class":62},[36,31931,27049],{"class":62},[36,31933,31934],{"class":38,"line":10413},[36,31935,31110],{"class":50},[36,31937,31938],{"class":38,"line":10425},[36,31939,70],{"emptyLinePlaceholder":69},[36,31941,31942,31944,31946,31948],{"class":38,"line":10437},[36,31943,28923],{"class":79},[36,31945,31542],{"class":50},[36,31947,31101],{"class":50},[36,31949,27049],{"class":62},[36,31951,31952,31954,31956],{"class":38,"line":12095},[36,31953,31665],{"class":42},[36,31955,31668],{"class":50},[36,31957,27049],{"class":62},[36,31959,31960,31962,31965],{"class":38,"line":12120},[36,31961,31104],{"class":62},[36,31963,31964],{"class":50}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,31966,27049],{"class":62},[36,31968,31969,31971],{"class":38,"line":12143},[36,31970,31639],{"class":62},[36,31972,27049],{"class":62},[36,31974,31975],{"class":38,"line":12167},[36,31976,31110],{"class":50},[36,31978,31979],{"class":38,"line":12172},[36,31980,70],{"emptyLinePlaceholder":69},[36,31982,31983,31985,31987,31989],{"class":38,"line":12177},[36,31984,28690],{"class":79},[36,31986,31542],{"class":50},[36,31988,31101],{"class":50},[36,31990,27049],{"class":62},[36,31992,31993,31995,31997],{"class":38,"line":12182},[36,31994,31665],{"class":42},[36,31996,31668],{"class":50},[36,31998,27049],{"class":62},[36,32000,32001,32003,32006],{"class":38,"line":12191},[36,32002,31104],{"class":62},[36,32004,32005],{"class":50}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,32007,27049],{"class":62},[36,32009,32010,32012],{"class":38,"line":12196},[36,32011,31639],{"class":62},[36,32013,27049],{"class":62},[36,32015,32016],{"class":38,"line":12202},[36,32017,31110],{"class":50},[36,32019,32020],{"class":38,"line":12223},[36,32021,70],{"emptyLinePlaceholder":69},[36,32023,32024,32027,32029,32031],{"class":38,"line":12229},[36,32025,32026],{"class":79},"  docker",[36,32028,31542],{"class":50},[36,32030,31101],{"class":50},[36,32032,27049],{"class":62},[36,32034,32035,32037,32039],{"class":38,"line":12243},[36,32036,31665],{"class":42},[36,32038,31668],{"class":50},[36,32040,27049],{"class":62},[36,32042,32043,32045,32048],{"class":38,"line":12249},[36,32044,31104],{"class":62},[36,32046,32047],{"class":50}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,32049,27049],{"class":62},[36,32051,32052,32054],{"class":38,"line":12276},[36,32053,31639],{"class":62},[36,32055,27049],{"class":62},[36,32057,32058],{"class":38,"line":12285},[36,32059,31110],{"class":50},[19,32061,32062],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32064,32065],{},[3879,32066],{"alt":31,"src":32067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,32069,32070],{},[3879,32071],{"alt":31,"src":32072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24368,32074,32076],{"id":32075},"_623清除构建缓存","6.2.3.清除构建缓存",[26,32078,32080],{"className":26192,"code":32079,"language":26194,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,32081,32082,32087],{"__ignoreMap":31},[36,32083,32084],{"class":38,"line":39},[36,32085,32086],{"class":2621},"# 清理BuildKit构建缓存\n",[36,32088,32089,32091,32094,32097],{"class":38,"line":54},[36,32090,28923],{"class":79},[36,32092,32093],{"class":50}," builder",[36,32095,32096],{"class":50}," prune",[36,32098,32099],{"class":62}," -f\n",[19,32101,32102],{},[3879,32103],{"alt":31,"src":32104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1752,32106,32108],{"id":32107},"_63补充","6.3.补充",[24368,32110,32112],{"id":32111},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32114,32115],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32117,32118],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32120,32121],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,32123,32125],{"className":26192,"code":32124,"language":26194,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,32126,32127,32134],{"__ignoreMap":31},[36,32128,32129,32131],{"class":38,"line":39},[36,32130,29740],{"class":79},[36,32132,32133],{"class":50}," nginx\n",[36,32135,32136,32138,32141,32144,32146],{"class":38,"line":54},[36,32137,30924],{"class":79},[36,32139,32140],{"class":50}," echo",[36,32142,32143],{"class":50}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,32145,28592],{"class":46},[36,32147,32148],{"class":50}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32150,32151],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32153,32154],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,32156,32158],{"className":26192,"code":32157,"language":26194,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,32159,32160],{"__ignoreMap":31},[36,32161,32162,32164,32166,32168,32171],{"class":38,"line":39},[36,32163,28923],{"class":79},[36,32165,31101],{"class":50},[36,32167,31104],{"class":62},[36,32169,32170],{"class":50}," nginx:tuling",[36,32172,31110],{"class":50},[19,32174,32175],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32177,32178],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,32180,32182],{"className":26192,"code":32181,"language":26194,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,32183,32184],{"__ignoreMap":31},[36,32185,32186,32188,32190,32193,32195,32198],{"class":38,"line":39},[36,32187,28923],{"class":79},[36,32189,29600],{"class":50},[36,32191,32192],{"class":62}," -d",[36,32194,31585],{"class":62},[36,32196,32197],{"class":50}," 92:80",[36,32199,32200],{"class":50}," nginx:tuling\n",[19,32202,32203,32204],{},"4、访问 ",[2796,32205,32208],{"href":32206,"rel":32207},"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",[26235],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32210,32211],{},[3879,32212],{"alt":31,"src":32213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32215,32216],{},[3879,32217],{"alt":31,"src":32218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24368,32220,32222],{"id":32221},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32224,32225],{},"只需要知道大体流程即可",[19,32227,32228],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32230,32231],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32233,32234],{},"2、在Dockerfile中添加以下内容",[26,32236,32238],{"className":28461,"code":32237,"language":28463,"meta":31,"style":31},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[33,32239,32240,32245,32250,32255,32260,32265,32270,32275],{"__ignoreMap":31},[36,32241,32242],{"class":38,"line":39},[36,32243,32244],{},"# 基于哪个镜像\n",[36,32246,32247],{"class":38,"line":54},[36,32248,32249],{},"From java:8\n",[36,32251,32252],{"class":38,"line":66},[36,32253,32254],{},"# 复制文件到容器\n",[36,32256,32257],{"class":38,"line":73},[36,32258,32259],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,32261,32262],{"class":38,"line":86},[36,32263,32264],{},"# 声明需要暴露的端口\n",[36,32266,32267],{"class":38,"line":126},[36,32268,32269],{},"EXPOSE 8877\n",[36,32271,32272],{"class":38,"line":131},[36,32273,32274],{},"# 配置容器启动后执行的命令\n",[36,32276,32277],{"class":38,"line":225},[36,32278,32279],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32281,32282],{},"3、使用docker build命令构建镜像",[26,32284,32286],{"className":26192,"code":32285,"language":26194,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,32287,32288],{"__ignoreMap":31},[36,32289,32290,32292,32294,32296,32299],{"class":38,"line":39},[36,32291,28923],{"class":79},[36,32293,31101],{"class":50},[36,32295,31104],{"class":62},[36,32297,32298],{"class":50}," tulingmall-member:0.0.5",[36,32300,31110],{"class":50},[19,32302,32303],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32305,32306],{},[3879,32307],{"alt":31,"src":32308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32310,32311],{},"4、启动镜像，加-d可在后台启动",[26,32313,32315],{"className":26192,"code":32314,"language":26194,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,32316,32317],{"__ignoreMap":31},[36,32318,32319,32321,32323,32325,32327,32330],{"class":38,"line":39},[36,32320,28923],{"class":79},[36,32322,29600],{"class":50},[36,32324,32192],{"class":62},[36,32326,31585],{"class":62},[36,32328,32329],{"class":50}," 8877:8877",[36,32331,32332],{"class":50}," tulingmall-member:0.0.5\n",[19,32334,32335],{},"加上JVM参数：",[26,32337,32339],{"className":26192,"code":32338,"language":26194,"meta":31,"style":31},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[33,32340,32341,32346,32361,32371,32380,32387],{"__ignoreMap":31},[36,32342,32343],{"class":38,"line":39},[36,32344,32345],{"class":2621},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,32347,32348,32350,32352,32355,32357,32359],{"class":38,"line":54},[36,32349,28923],{"class":79},[36,32351,29600],{"class":50},[36,32353,32354],{"class":62},"  -d",[36,32356,31585],{"class":62},[36,32358,32329],{"class":50},[36,32360,27049],{"class":62},[36,32362,32363,32365,32368],{"class":38,"line":66},[36,32364,30498],{"class":42},[36,32366,32367],{"class":50},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,32369,32370],{"class":62},"  \\\n",[36,32372,32373,32375,32378],{"class":38,"line":73},[36,32374,30498],{"class":42},[36,32376,32377],{"class":50},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,32379,32370],{"class":62},[36,32381,32382,32385],{"class":38,"line":86},[36,32383,32384],{"class":42},"--cap-add=SYS_PTRACE  ",[36,32386,28545],{"class":62},[36,32388,32389],{"class":38,"line":126},[36,32390,32391],{"class":42},"tulingmall-member:0.0.5\n",[19,32393,32394],{},"5、访问会员服务接口",[19,32396,32397],{},[3879,32398],{"alt":31,"src":32399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24368,32401,32403],{"id":32402},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32405,32406],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32408,32409,32410],{},"阿里云docker镜像仓库：",[2796,32411,32412],{"href":32412,"rel":32413},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26235],[19,32415,32416],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32418,32419],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32421,32422],{},[3879,32423],{"alt":31,"src":32424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32426,32427],{},"要把镜像推送到镜像仓库",[26,32429,32431],{"className":26192,"code":32430,"language":26194,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,32432,32433],{"__ignoreMap":31},[36,32434,32435,32437,32439,32441],{"class":38,"line":39},[36,32436,28923],{"class":79},[36,32438,31266],{"class":50},[36,32440,32298],{"class":50},[36,32442,32443],{"class":50}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32445,32446],{},"最后将镜像推送到远程仓库",[26,32448,32450],{"className":26192,"code":32449,"language":26194,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,32451,32452],{"__ignoreMap":31},[36,32453,32454,32456,32458],{"class":38,"line":39},[36,32455,28923],{"class":79},[36,32457,31385],{"class":50},[36,32459,32443],{"class":50},[2467,32461,32462],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":32464},[32465,32466,32467],{"id":30852,"depth":66,"text":30853},{"id":31081,"depth":66,"text":31082},{"id":32107,"depth":66,"text":32108},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30844,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32474,"title":32475,"body":32476,"description":31,"extension":2494,"meta":32619,"navigation":69,"path":32620,"seo":32621,"stem":32622,"__hash__":32623},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32477,"toc":32617},[32478,32481,32486,32491,32494,32499,32504,32507,32512,32517,32520,32525,32528,32531,32534,32537,32540,32543,32563,32585,32588,32591,32611,32614],[10,32479,32475],{"id":32480},"_7vscode远程开发",[650,32482,32483],{},[653,32484,32485],{},"插件1：微软Docker工具",[19,32487,32488],{},[3879,32489],{"alt":31,"src":32490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32492,32493],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32495,32496],{},[3879,32497],{"alt":31,"src":32498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[650,32500,32501],{"start":54},[653,32502,32503],{},"插件2：微软Docker远程开发工具",[19,32505,32506],{},"下面这是远程开发的插件。",[19,32508,32509],{},[3879,32510],{"alt":31,"src":32511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32513,32514],{},[3879,32515],{"alt":31,"src":32516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32518,32519],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32521,32522],{},[3879,32523],{"alt":31,"src":32524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32526,32527],{},"安装完拓展之后，vscode进行链接：",[19,32529,32530],{},"1.按ctrl+shift+p",[19,32532,32533],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32535,32536],{},"3.选择目前运行的容器",[19,32538,32539],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32541,32542],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,32544,32546],{"className":26192,"code":32545,"language":26194,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,32547,32548],{"__ignoreMap":31},[36,32549,32550,32552,32554,32557,32560],{"class":38,"line":39},[36,32551,28923],{"class":79},[36,32553,29600],{"class":50},[36,32555,32556],{"class":62}," -v",[36,32558,32559],{"class":50}," 主机目录:容器目录",[36,32561,32562],{"class":50}," image-name\n",[26,32564,32566],{"className":26192,"code":32565,"language":26194,"meta":31,"style":31},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,32567,32568],{"__ignoreMap":31},[36,32569,32570,32572,32574,32577,32579,32582],{"class":38,"line":39},[36,32571,28923],{"class":79},[36,32573,29600],{"class":50},[36,32575,32576],{"class":62}," -it",[36,32578,32556],{"class":62},[36,32580,32581],{"class":50}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,32583,32584],{"class":50}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32586,32587],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32589,32590],{},"查看挂载情况：",[26,32592,32594],{"className":26192,"code":32593,"language":26194,"meta":31,"style":31},"mount | grep -i project\n",[33,32595,32596],{"__ignoreMap":31},[36,32597,32598,32601,32603,32606,32608],{"class":38,"line":39},[36,32599,32600],{"class":79},"mount",[36,32602,27480],{"class":46},[36,32604,32605],{"class":79}," grep",[36,32607,28800],{"class":62},[36,32609,32610],{"class":50}," project\n",[19,32612,32613],{},"也可以通过ls来进行查看",[2467,32615,32616],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":32618},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32475,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32625,"title":32626,"body":32627,"description":2493,"extension":2494,"meta":32631,"navigation":69,"path":32633,"seo":32634,"stem":32635,"__hash__":32636},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32628,"toc":32629},[],{"title":31,"searchDepth":54,"depth":54,"links":32630},[],{"category":32632},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32626,"description":2493},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32638,"title":32639,"body":32640,"description":2493,"extension":2494,"meta":32644,"navigation":69,"path":32645,"seo":32646,"stem":32647,"__hash__":32648},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32641,"toc":32642},[],{"title":31,"searchDepth":54,"depth":54,"links":32643},[],{"category":32632},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32639,"description":2493},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32650,"title":32651,"body":32652,"description":2493,"extension":2494,"meta":32940,"navigation":69,"path":32941,"seo":32942,"stem":32943,"__hash__":32944},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32653,"toc":32938},[32654,32657,32665,32680,32685,32736,32739,32745,32927,32932,32935],[10,32655,32651],{"id":32656},"_1验证深度学习环境",[19,32658,32659,32660],{},"关于环境的安装，看",[2796,32661,32664],{"href":32662,"rel":32663},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26235],"Pytorch-->深度学习",[19,32666,32667,32668,32671,32672,32675,32676,32679],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,32669,32670],{},"pytorch-cuda=12.4"," 是一个“ ",[667,32673,32674],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[667,32677,32678],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32681,32682],{},[3879,32683],{"alt":31,"src":32684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[26,32686,32688],{"className":26192,"code":32687,"language":26194,"meta":31,"style":31},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[33,32689,32690,32695],{"__ignoreMap":31},[36,32691,32692],{"class":38,"line":39},[36,32693,32694],{"class":2621},"# CUDA 12.4\n",[36,32696,32697,32700,32702,32705,32708,32711,32714,32717,32719,32722,32725,32728,32731,32733],{"class":38,"line":54},[36,32698,32699],{"class":79},"conda",[36,32701,26204],{"class":50},[36,32703,32704],{"class":50}," pytorch==",[36,32706,32707],{"class":62},"2.5.1",[36,32709,32710],{"class":50}," torchvision==",[36,32712,32713],{"class":62},"0.20.1",[36,32715,32716],{"class":50}," torchaudio==",[36,32718,32707],{"class":62},[36,32720,32721],{"class":50}," pytorch-cuda=",[36,32723,32724],{"class":62},"12.4",[36,32726,32727],{"class":62}," -c",[36,32729,32730],{"class":50}," pytorch",[36,32732,32727],{"class":62},[36,32734,32735],{"class":50}," nvidia\n",[19,32737,32738],{},"）：",[19,32740,32741],{},[2796,32742,32743],{"href":32743,"rel":32744},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26235],[26,32746,32748],{"className":28,"code":32747,"language":30,"meta":31,"style":31},"# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n",[33,32749,32750,32755,32762,32767,32777,32792,32797,32807,32844,32851,32862,32878,32883,32893,32905,32915],{"__ignoreMap":31},[36,32751,32752],{"class":38,"line":39},[36,32753,32754],{"class":2621},"# 对深度学习环境进行测试\n",[36,32756,32757,32759],{"class":38,"line":54},[36,32758,1943],{"class":46},[36,32760,32761],{"class":42}," torch\n",[36,32763,32764],{"class":38,"line":66},[36,32765,32766],{"class":2621},"# 查看cuda是否被激活\n",[36,32768,32769,32772,32774],{"class":38,"line":73},[36,32770,32771],{"class":42},"flag",[36,32773,47],{"class":46},[36,32775,32776],{"class":42},"torch.cuda.is_available()\n",[36,32778,32779,32781,32783,32786,32789],{"class":38,"line":86},[36,32780,371],{"class":62},[36,32782,92],{"class":42},[36,32784,32785],{"class":50},"\"cuda:\"",[36,32787,32788],{"class":42},", flag)   ",[36,32790,32791],{"class":2621},"#返回true的话说明被激活\n",[36,32793,32794],{"class":38,"line":126},[36,32795,32796],{"class":2621},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,32798,32799,32802,32804],{"class":38,"line":131},[36,32800,32801],{"class":42},"ngpu",[36,32803,47],{"class":46},[36,32805,32806],{"class":62},"1\n",[36,32808,32809,32812,32814,32817,32820,32822,32825,32828,32831,32833,32835,32837,32839,32842],{"class":38,"line":225},[36,32810,32811],{"class":42},"device",[36,32813,47],{"class":46},[36,32815,32816],{"class":42},"torch.device(",[36,32818,32819],{"class":50},"\"cuda:0\"",[36,32821,4108],{"class":46},[36,32823,32824],{"class":42},"(torch.cuda.is_available() ",[36,32826,32827],{"class":46},"and",[36,32829,32830],{"class":42}," ngpu",[36,32832,986],{"class":46},[36,32834,2751],{"class":62},[36,32836,16091],{"class":42},[36,32838,4105],{"class":46},[36,32840,32841],{"class":50}," \"cpu\"",[36,32843,123],{"class":42},[36,32845,32846,32848],{"class":38,"line":235},[36,32847,371],{"class":62},[36,32849,32850],{"class":42},"(device)\n",[36,32852,32853,32855,32858,32860],{"class":38,"line":377},[36,32854,371],{"class":62},[36,32856,32857],{"class":42},"(torch.cuda.get_device_name(",[36,32859,2751],{"class":62},[36,32861,1914],{"class":42},[36,32863,32864,32866,32869,32871,32873,32875],{"class":38,"line":617},[36,32865,371],{"class":62},[36,32867,32868],{"class":42},"(torch.rand(",[36,32870,2634],{"class":62},[36,32872,2934],{"class":42},[36,32874,2634],{"class":62},[36,32876,32877],{"class":42},").cuda())\n",[36,32879,32880],{"class":38,"line":643},[36,32881,32882],{"class":2621},"# 查看cuda和cudnn的版本\n",[36,32884,32885,32888,32890],{"class":38,"line":921},[36,32886,32887],{"class":42},"cuda_version",[36,32889,47],{"class":46},[36,32891,32892],{"class":42},"torch.version.cuda\n",[36,32894,32895,32897,32899,32902],{"class":38,"line":934},[36,32896,371],{"class":62},[36,32898,92],{"class":42},[36,32900,32901],{"class":50},"\"cuda version\"",[36,32903,32904],{"class":42},",cuda_version)\n",[36,32906,32907,32910,32912],{"class":38,"line":939},[36,32908,32909],{"class":42},"cudnn_version",[36,32911,47],{"class":46},[36,32913,32914],{"class":42},"torch.backends.cudnn.version()\n",[36,32916,32917,32919,32921,32924],{"class":38,"line":949},[36,32918,371],{"class":62},[36,32920,92],{"class":42},[36,32922,32923],{"class":50},"\"cudnn version\"",[36,32925,32926],{"class":42},",cudnn_version)\n",[19,32928,32929],{},[3879,32930],{"alt":31,"src":32931},"\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,32933,32934],{},"cuda:0 指的是一块显卡",[2467,32936,32937],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":32939},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32651,"description":2493},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32946,"title":32947,"body":32948,"description":2493,"extension":2494,"meta":52737,"navigation":69,"path":52738,"seo":52739,"stem":52740,"__hash__":52741},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32949,"toc":52731},[32950,32953,32957,32961,32964,32969,32974,32977,32982,32987,32992,32995,32999,33004,33008,33013,33016,33021,33024,33027,33030,33033,33038,33041,33046,33051,33056,33061,33064,33068,33071,33076,33670,33675,33678,33683,33686,33689,34153,34156,34159,34162,34165,36214,36217,36222,36227,37021,37024,37029,37807,37811,39470,39474,40188,40192,40196,40201,40206,40211,40214,40219,40224,40229,40234,40239,40243,40248,41528,41533,41536,41539,41542,41697,41700,41703,42919,42924,43619,43623,43627,43632,43637,43640,43645,43650,43655,43660,43665,43670,43675,43680,43685,43690,43695,43700,43705,43710,43715,43720,43725,43730,43735,43740,43745,43750,43755,43760,43765,43770,43775,43780,43785,43790,43794,43798,43801,45279,45283,46930,46934,47628,47632,47635,47638,48182,48185,48189,48192,49589,49593,49596,50174,51961,51965,51968,52728],[10,32951,32947],{"id":32952},"_2经典神经网络",[1752,32954,32956],{"id":32955},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24368,32958,32960],{"id":32959},"_211原理介绍","2.1.1.原理介绍",[19,32962,32963],{},"LeNet-5",[650,32965,32966],{},[653,32967,32968],{},"原理",[19,32970,32971],{},[3879,32972],{"alt":31,"src":32973},"\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,32975,32976],{},"B是batch批次；C是channel通道",[650,32978,32979],{"start":54},[653,32980,32981],{},"网络参数详细",[19,32983,32984],{},[3879,32985],{"alt":31,"src":32986},"\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,32988,32989],{},[3879,32990],{"alt":31,"src":32991},"\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,32993,32994],{},"AlexNet",[650,32996,32997],{},[653,32998,32968],{},[19,33000,33001],{},[3879,33002],{"alt":31,"src":33003},"\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",[650,33005,33006],{"start":54},[653,33007,32981],{},[19,33009,33010],{},[3879,33011],{"alt":31,"src":33012},"\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,33014,33015],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33017,33018],{},[3879,33019],{"alt":31,"src":33020},"\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,33022,33023],{},"数据处理中的图像增强操作:",[19,33025,33026],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33028,33029],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33031,33032],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33034,33035],{},[3879,33036],{"alt":31,"src":33037},"\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,33039,33040],{},"提升网络精确度的方法：LRN正则化",[19,33042,33043],{},[3879,33044],{"alt":31,"src":33045},"\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,33047,33048],{},[3879,33049],{"alt":31,"src":33050},"\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",[650,33052,33053],{"start":66},[653,33054,33055],{},"AlexNet的总结",[19,33057,33058],{},[3879,33059],{"alt":31,"src":33060},"\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,33062,33063],{},"比LeNet模型要深一丢丢",[24368,33065,33067],{"id":33066},"_212代码实现","2.1.2.代码实现",[19,33069,33070],{},"（1）LeNet",[650,33072,33073],{},[653,33074,33075],{},"模型搭建",[26,33077,33079],{"className":28,"code":33078,"language":30,"meta":31,"style":31},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[33,33080,33081,33086,33092,33097,33109,33114,33126,33130,33149,33154,33159,33167,33172,33188,33192,33197,33245,33257,33262,33291,33326,33353,33358,33370,33375,33395,33414,33433,33437,33442,33452,33469,33480,33495,33506,33517,33532,33547,33558,33565,33569,33583,33588,33611,33616,33621,33626,33630,33635,33640,33650],{"__ignoreMap":31},[36,33082,33083],{"class":38,"line":39},[36,33084,33085],{"class":2621},"# 导入库\n",[36,33087,33088,33090],{"class":38,"line":54},[36,33089,1943],{"class":46},[36,33091,32761],{"class":42},[36,33093,33094],{"class":38,"line":66},[36,33095,33096],{"class":2621},"# 导入神经网络层\n",[36,33098,33099,33101,33104,33106],{"class":38,"line":73},[36,33100,1937],{"class":46},[36,33102,33103],{"class":42}," torch ",[36,33105,1943],{"class":46},[36,33107,33108],{"class":42}," nn\n",[36,33110,33111],{"class":38,"line":86},[36,33112,33113],{"class":2621},"# 导入展示神经网络参数的包\n",[36,33115,33116,33118,33121,33123],{"class":38,"line":126},[36,33117,1937],{"class":46},[36,33119,33120],{"class":42}," torchsummary ",[36,33122,1943],{"class":46},[36,33124,33125],{"class":42}," summary\n",[36,33127,33128],{"class":38,"line":131},[36,33129,70],{"emptyLinePlaceholder":69},[36,33131,33132,33134,33137,33139,33142,33144,33147],{"class":38,"line":225},[36,33133,147],{"class":46},[36,33135,33136],{"class":79}," LeNet",[36,33138,92],{"class":42},[36,33140,33141],{"class":79},"nn",[36,33143,3113],{"class":42},[36,33145,33146],{"class":79},"Module",[36,33148,1147],{"class":42},[36,33150,33151],{"class":38,"line":235},[36,33152,33153],{"class":2621},"    # 模型初始化:\n",[36,33155,33156],{"class":38,"line":377},[36,33157,33158],{"class":2621},"    # 定义一些网络层和激活函数\n",[36,33160,33161,33163,33165],{"class":38,"line":617},[36,33162,158],{"class":46},[36,33164,515],{"class":62},[36,33166,163],{"class":42},[36,33168,33169],{"class":38,"line":643},[36,33170,33171],{"class":2621},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,33173,33174,33176,33179,33181,33184,33186],{"class":38,"line":921},[36,33175,1432],{"class":62},[36,33177,33178],{"class":42},"(LeNet,",[36,33180,481],{"class":62},[36,33182,33183],{"class":42},").",[36,33185,494],{"class":62},[36,33187,4369],{"class":42},[36,33189,33190],{"class":38,"line":934},[36,33191,70],{"emptyLinePlaceholder":69},[36,33193,33194],{"class":38,"line":939},[36,33195,33196],{"class":2621},"        # 定义网络层\n",[36,33198,33199,33201,33204,33206,33209,33212,33214,33216,33218,33221,33223,33225,33227,33230,33232,33234,33236,33239,33241,33243],{"class":38,"line":949},[36,33200,523],{"class":62},[36,33202,33203],{"class":42},".c1",[36,33205,47],{"class":46},[36,33207,33208],{"class":42},"nn.Conv2d(",[36,33210,33211],{"class":7598},"in_channels",[36,33213,47],{"class":46},[36,33215,1906],{"class":62},[36,33217,2934],{"class":42},[36,33219,33220],{"class":7598},"out_channels",[36,33222,47],{"class":46},[36,33224,2900],{"class":62},[36,33226,2934],{"class":42},[36,33228,33229],{"class":7598},"kernel_size",[36,33231,47],{"class":46},[36,33233,2875],{"class":62},[36,33235,2934],{"class":42},[36,33237,33238],{"class":7598},"padding",[36,33240,47],{"class":46},[36,33242,1911],{"class":62},[36,33244,123],{"class":42},[36,33246,33247,33249,33252,33254],{"class":38,"line":962},[36,33248,523],{"class":62},[36,33250,33251],{"class":42},".sig",[36,33253,47],{"class":46},[36,33255,33256],{"class":42},"nn.Sigmoid()\n",[36,33258,33259],{"class":38,"line":974},[36,33260,33261],{"class":2621},"        # 定义池化\n",[36,33263,33264,33266,33269,33271,33274,33276,33278,33280,33282,33285,33287,33289],{"class":38,"line":979},[36,33265,523],{"class":62},[36,33267,33268],{"class":42},".s2",[36,33270,47],{"class":46},[36,33272,33273],{"class":42},"nn.AvgPool2d(",[36,33275,33229],{"class":7598},[36,33277,47],{"class":46},[36,33279,1911],{"class":62},[36,33281,2934],{"class":42},[36,33283,33284],{"class":7598},"stride",[36,33286,47],{"class":46},[36,33288,1911],{"class":62},[36,33290,123],{"class":42},[36,33292,33293,33295,33298,33300,33302,33304,33306,33308,33310,33312,33314,33316,33318,33320,33322,33324],{"class":38,"line":994},[36,33294,523],{"class":62},[36,33296,33297],{"class":42},".c3",[36,33299,47],{"class":46},[36,33301,33208],{"class":42},[36,33303,33211],{"class":7598},[36,33305,47],{"class":46},[36,33307,2900],{"class":62},[36,33309,2934],{"class":42},[36,33311,33220],{"class":7598},[36,33313,47],{"class":46},[36,33315,3156],{"class":62},[36,33317,2934],{"class":42},[36,33319,33229],{"class":7598},[36,33321,47],{"class":46},[36,33323,2875],{"class":62},[36,33325,123],{"class":42},[36,33327,33328,33330,33333,33335,33337,33339,33341,33343,33345,33347,33349,33351],{"class":38,"line":1006},[36,33329,523],{"class":62},[36,33331,33332],{"class":42},".s4",[36,33334,47],{"class":46},[36,33336,33273],{"class":42},[36,33338,33229],{"class":7598},[36,33340,47],{"class":46},[36,33342,1911],{"class":62},[36,33344,2934],{"class":42},[36,33346,33284],{"class":7598},[36,33348,47],{"class":46},[36,33350,1911],{"class":62},[36,33352,123],{"class":42},[36,33354,33355],{"class":38,"line":1011},[36,33356,33357],{"class":2621},"        # 定义平展层\n",[36,33359,33360,33362,33365,33367],{"class":38,"line":1023},[36,33361,523],{"class":62},[36,33363,33364],{"class":42},".flatten",[36,33366,47],{"class":46},[36,33368,33369],{"class":42},"nn.Flatten()\n",[36,33371,33372],{"class":38,"line":1028},[36,33373,33374],{"class":2621},"        # 定义全连接层\n",[36,33376,33377,33379,33382,33384,33387,33389,33391,33393],{"class":38,"line":1033},[36,33378,523],{"class":62},[36,33380,33381],{"class":42},".f5",[36,33383,47],{"class":46},[36,33385,33386],{"class":42},"nn.Linear(",[36,33388,6371],{"class":62},[36,33390,2934],{"class":42},[36,33392,3371],{"class":62},[36,33394,123],{"class":42},[36,33396,33397,33399,33402,33404,33406,33408,33410,33412],{"class":38,"line":1053},[36,33398,523],{"class":62},[36,33400,33401],{"class":42},".f6",[36,33403,47],{"class":46},[36,33405,33386],{"class":42},[36,33407,3371],{"class":62},[36,33409,2934],{"class":42},[36,33411,3265],{"class":62},[36,33413,123],{"class":42},[36,33415,33416,33418,33421,33423,33425,33427,33429,33431],{"class":38,"line":1064},[36,33417,523],{"class":62},[36,33419,33420],{"class":42},".f7",[36,33422,47],{"class":46},[36,33424,33386],{"class":42},[36,33426,3265],{"class":62},[36,33428,2934],{"class":42},[36,33430,3002],{"class":62},[36,33432,123],{"class":42},[36,33434,33435],{"class":38,"line":1075},[36,33436,70],{"emptyLinePlaceholder":69},[36,33438,33439],{"class":38,"line":2291},[36,33440,33441],{"class":2621},"    # 写工具->写前向传播\n",[36,33443,33444,33446,33449],{"class":38,"line":2329},[36,33445,158],{"class":46},[36,33447,33448],{"class":79}," forward",[36,33450,33451],{"class":42},"(self,x):\n",[36,33453,33454,33457,33459,33461,33464,33466],{"class":38,"line":2334},[36,33455,33456],{"class":42},"        x",[36,33458,47],{"class":46},[36,33460,481],{"class":62},[36,33462,33463],{"class":42},".sig(",[36,33465,481],{"class":62},[36,33467,33468],{"class":42},".c1(x))\n",[36,33470,33471,33473,33475,33477],{"class":38,"line":2339},[36,33472,33456],{"class":42},[36,33474,47],{"class":46},[36,33476,481],{"class":62},[36,33478,33479],{"class":42},".s2(x)\n",[36,33481,33482,33484,33486,33488,33490,33492],{"class":38,"line":2365},[36,33483,33456],{"class":42},[36,33485,47],{"class":46},[36,33487,481],{"class":62},[36,33489,33463],{"class":42},[36,33491,481],{"class":62},[36,33493,33494],{"class":42},".c3(x))\n",[36,33496,33497,33499,33501,33503],{"class":38,"line":2373},[36,33498,33456],{"class":42},[36,33500,47],{"class":46},[36,33502,481],{"class":62},[36,33504,33505],{"class":42},".s4(x)\n",[36,33507,33508,33510,33512,33514],{"class":38,"line":5001},[36,33509,33456],{"class":42},[36,33511,47],{"class":46},[36,33513,481],{"class":62},[36,33515,33516],{"class":42},".flatten(x)\n",[36,33518,33519,33521,33523,33525,33527,33529],{"class":38,"line":5006},[36,33520,33456],{"class":42},[36,33522,47],{"class":46},[36,33524,481],{"class":62},[36,33526,33463],{"class":42},[36,33528,481],{"class":62},[36,33530,33531],{"class":42},".f5(x))\n",[36,33533,33534,33536,33538,33540,33542,33544],{"class":38,"line":10328},[36,33535,33456],{"class":42},[36,33537,47],{"class":46},[36,33539,481],{"class":62},[36,33541,33463],{"class":42},[36,33543,481],{"class":62},[36,33545,33546],{"class":42},".f6(x))\n",[36,33548,33549,33551,33553,33555],{"class":38,"line":10352},[36,33550,33456],{"class":42},[36,33552,47],{"class":46},[36,33554,481],{"class":62},[36,33556,33557],{"class":42},".f7(x)\n",[36,33559,33560,33562],{"class":38,"line":10357},[36,33561,736],{"class":46},[36,33563,33564],{"class":42}," x\n",[36,33566,33567],{"class":38,"line":10363},[36,33568,70],{"emptyLinePlaceholder":69},[36,33570,33571,33573,33576,33578,33581],{"class":38,"line":10390},[36,33572,3948],{"class":46},[36,33574,33575],{"class":62}," __name__",[36,33577,5334],{"class":46},[36,33579,33580],{"class":50},"\"__main__\"",[36,33582,153],{"class":42},[36,33584,33585],{"class":38,"line":10395},[36,33586,33587],{"class":2621},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,33589,33590,33593,33595,33597,33600,33602,33605,33607,33609],{"class":38,"line":10401},[36,33591,33592],{"class":42},"    device",[36,33594,47],{"class":46},[36,33596,32816],{"class":42},[36,33598,33599],{"class":50},"\"cuda\"",[36,33601,4108],{"class":46},[36,33603,33604],{"class":42}," torch.cuda.is_available() ",[36,33606,4105],{"class":46},[36,33608,32841],{"class":50},[36,33610,123],{"class":42},[36,33612,33613],{"class":38,"line":10413},[36,33614,33615],{"class":2621},"    # 如果就是想指定用cpu用下方代码:\n",[36,33617,33618],{"class":38,"line":10425},[36,33619,33620],{"class":2621},"    # device=\"cpu\"\n",[36,33622,33623],{"class":38,"line":10437},[36,33624,33625],{"class":2621},"    # print(device)\n",[36,33627,33628],{"class":38,"line":12095},[36,33629,70],{"emptyLinePlaceholder":69},[36,33631,33632],{"class":38,"line":12120},[36,33633,33634],{"class":2621},"    # 实例化模型\n",[36,33636,33637],{"class":38,"line":12143},[36,33638,33639],{"class":2621},"    # 将模型放到设备中去运行\n",[36,33641,33642,33645,33647],{"class":38,"line":12167},[36,33643,33644],{"class":42},"    model",[36,33646,47],{"class":46},[36,33648,33649],{"class":42},"LeNet().to(device)\n",[36,33651,33652,33654,33657,33659,33661,33663,33665,33667],{"class":38,"line":12172},[36,33653,89],{"class":62},[36,33655,33656],{"class":42},"(summary(model,(",[36,33658,1906],{"class":62},[36,33660,2934],{"class":42},[36,33662,3454],{"class":62},[36,33664,2934],{"class":42},[36,33666,3454],{"class":62},[36,33668,33669],{"class":42},")))\n",[19,33671,33672],{},[3879,33673],{"alt":31,"src":33674},"\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,33676,33677],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[650,33679,33680],{"start":54},[653,33681,33682],{},"训练",[19,33684,33685],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33687,33688],{},"在训练之前可以将数据展示看一下",[26,33690,33692],{"className":28,"code":33691,"language":30,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[33,33693,33694,33699,33704,33716,33728,33741,33746,33758,33763,33775,33780,33792,33796,33800,33821,33833,33838,33859,33870,33874,33879,33897,33908,33913,33924,33929,33940,33944,33949,33964,33977,33982,33987,34000,34013,34026,34031,34035,34040,34060,34077,34097,34110,34123,34133,34148],{"__ignoreMap":31},[36,33695,33696],{"class":38,"line":39},[36,33697,33698],{"class":2621},"# 建立画图的函数，用于展示数据\n",[36,33700,33701],{"class":38,"line":54},[36,33702,33703],{"class":2621},"# torchvision中包含很多内置的数据集\n",[36,33705,33706,33708,33711,33713],{"class":38,"line":66},[36,33707,1937],{"class":46},[36,33709,33710],{"class":42}," sklearn.externals.array_api_compat.torch ",[36,33712,1943],{"class":46},[36,33714,33715],{"class":42}," squeeze\n",[36,33717,33718,33720,33723,33725],{"class":38,"line":73},[36,33719,1937],{"class":46},[36,33721,33722],{"class":42}," torchvision.datasets ",[36,33724,1943],{"class":46},[36,33726,33727],{"class":42}," FashionMNIST\n",[36,33729,33730,33732,33735,33738],{"class":38,"line":86},[36,33731,1943],{"class":46},[36,33733,33734],{"class":42}," numpy ",[36,33736,33737],{"class":46},"as",[36,33739,33740],{"class":42}," np\n",[36,33742,33743],{"class":38,"line":126},[36,33744,33745],{"class":2621},"# 引入处理数据集的包\n",[36,33747,33748,33750,33753,33755],{"class":38,"line":131},[36,33749,1937],{"class":46},[36,33751,33752],{"class":42}," torchvision ",[36,33754,1943],{"class":46},[36,33756,33757],{"class":42}," transforms\n",[36,33759,33760],{"class":38,"line":225},[36,33761,33762],{"class":2621},"# 从torch库中引入数据处理的包\n",[36,33764,33765,33767,33770,33772],{"class":38,"line":235},[36,33766,1943],{"class":46},[36,33768,33769],{"class":42}," torch.utils.data ",[36,33771,33737],{"class":46},[36,33773,33774],{"class":42}," Data\n",[36,33776,33777],{"class":38,"line":377},[36,33778,33779],{"class":2621},"# 导入画图的库\n",[36,33781,33782,33784,33787,33789],{"class":38,"line":617},[36,33783,1943],{"class":46},[36,33785,33786],{"class":42}," matplotlib.pyplot ",[36,33788,33737],{"class":46},[36,33790,33791],{"class":42}," plt\n",[36,33793,33794],{"class":38,"line":643},[36,33795,70],{"emptyLinePlaceholder":69},[36,33797,33798],{"class":38,"line":921},[36,33799,70],{"emptyLinePlaceholder":69},[36,33801,33802,33805,33807,33810,33813,33815,33818],{"class":38,"line":934},[36,33803,33804],{"class":42},"train_data",[36,33806,47],{"class":46},[36,33808,33809],{"class":42},"FashionMNIST(",[36,33811,33812],{"class":7598},"root",[36,33814,47],{"class":46},[36,33816,33817],{"class":50},"'.\u002Fdata'",[36,33819,33820],{"class":42},",\n",[36,33822,33823,33826,33828,33831],{"class":38,"line":939},[36,33824,33825],{"class":7598},"                        train",[36,33827,47],{"class":46},[36,33829,33830],{"class":62},"True",[36,33832,33820],{"class":42},[36,33834,33835],{"class":38,"line":949},[36,33836,33837],{"class":2621},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,33839,33840,33843,33845,33848,33851,33853,33856],{"class":38,"line":962},[36,33841,33842],{"class":7598},"                        transform",[36,33844,47],{"class":46},[36,33846,33847],{"class":42},"transforms.Compose([transforms.Resize(",[36,33849,33850],{"class":7598},"size",[36,33852,47],{"class":46},[36,33854,33855],{"class":62},"224",[36,33857,33858],{"class":42},"),transforms.ToTensor()]),\n",[36,33860,33861,33864,33866,33868],{"class":38,"line":974},[36,33862,33863],{"class":7598},"                        download",[36,33865,47],{"class":46},[36,33867,33830],{"class":62},[36,33869,123],{"class":42},[36,33871,33872],{"class":38,"line":979},[36,33873,70],{"emptyLinePlaceholder":69},[36,33875,33876],{"class":38,"line":994},[36,33877,33878],{"class":2621},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,33880,33881,33884,33886,33889,33892,33894],{"class":38,"line":1006},[36,33882,33883],{"class":42},"train_loader",[36,33885,47],{"class":46},[36,33887,33888],{"class":42},"Data.DataLoader(",[36,33890,33891],{"class":7598},"dataset",[36,33893,47],{"class":46},[36,33895,33896],{"class":42},"train_data,\n",[36,33898,33899,33902,33904,33906],{"class":38,"line":1011},[36,33900,33901],{"class":7598},"                             batch_size",[36,33903,47],{"class":46},[36,33905,2763],{"class":62},[36,33907,33820],{"class":42},[36,33909,33910],{"class":38,"line":1023},[36,33911,33912],{"class":2621},"                             # 数据是否打乱\n",[36,33914,33915,33918,33920,33922],{"class":38,"line":1028},[36,33916,33917],{"class":7598},"                             shuffle",[36,33919,47],{"class":46},[36,33921,33830],{"class":62},[36,33923,33820],{"class":42},[36,33925,33926],{"class":38,"line":1033},[36,33927,33928],{"class":2621},"                             # 规定加载数据的进程\n",[36,33930,33931,33934,33936,33938],{"class":38,"line":1053},[36,33932,33933],{"class":7598},"                             num_workers",[36,33935,47],{"class":46},[36,33937,2751],{"class":62},[36,33939,123],{"class":42},[36,33941,33942],{"class":38,"line":1064},[36,33943,70],{"emptyLinePlaceholder":69},[36,33945,33946],{"class":38,"line":1075},[36,33947,33948],{"class":2621},"# 获得一个batch的数据\n",[36,33950,33951,33953,33956,33958,33961],{"class":38,"line":2291},[36,33952,5410],{"class":46},[36,33954,33955],{"class":42}," step,(b_x,b_y) ",[36,33957,28413],{"class":46},[36,33959,33960],{"class":62}," enumerate",[36,33962,33963],{"class":42},"(train_loader):\n",[36,33965,33966,33968,33971,33973,33975],{"class":38,"line":2329},[36,33967,5486],{"class":46},[36,33969,33970],{"class":42}," step ",[36,33972,986],{"class":46},[36,33974,899],{"class":62},[36,33976,153],{"class":42},[36,33978,33979],{"class":38,"line":2334},[36,33980,33981],{"class":46},"        break\n",[36,33983,33984],{"class":38,"line":2339},[36,33985,33986],{"class":2621},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,33988,33989,33992,33994,33997],{"class":38,"line":2365},[36,33990,33991],{"class":42},"batch_x",[36,33993,47],{"class":46},[36,33995,33996],{"class":42},"b_x.squeeze().numpy()  ",[36,33998,33999],{"class":2621},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,34001,34002,34005,34007,34010],{"class":38,"line":2373},[36,34003,34004],{"class":42},"batch_y",[36,34006,47],{"class":46},[36,34008,34009],{"class":42},"b_y.numpy()   ",[36,34011,34012],{"class":2621},"#将张量转换成功numpy数组\n",[36,34014,34015,34018,34020,34023],{"class":38,"line":5001},[36,34016,34017],{"class":42},"class_label",[36,34019,47],{"class":46},[36,34021,34022],{"class":42},"train_data.classes  ",[36,34024,34025],{"class":2621},"#训练集标签\n",[36,34027,34028],{"class":38,"line":5006},[36,34029,34030],{"class":2621},"# print(class_label)\n",[36,34032,34033],{"class":38,"line":10328},[36,34034,70],{"emptyLinePlaceholder":69},[36,34036,34037],{"class":38,"line":10352},[36,34038,34039],{"class":2621},"# 可视化一个batch的图像\n",[36,34041,34042,34045,34048,34050,34052,34054,34056,34058],{"class":38,"line":10357},[36,34043,34044],{"class":42},"plt.figure(",[36,34046,34047],{"class":7598},"figsize",[36,34049,47],{"class":46},[36,34051,92],{"class":42},[36,34053,3053],{"class":62},[36,34055,2934],{"class":42},[36,34057,2875],{"class":62},[36,34059,1914],{"class":42},[36,34061,34062,34064,34067,34069,34072,34074],{"class":38,"line":10363},[36,34063,5410],{"class":46},[36,34065,34066],{"class":42}," ii ",[36,34068,28413],{"class":46},[36,34070,34071],{"class":42}," np.arange(",[36,34073,9739],{"class":62},[36,34075,34076],{"class":42},"(batch_y)):\n",[36,34078,34079,34082,34084,34086,34088,34091,34093,34095],{"class":38,"line":10390},[36,34080,34081],{"class":42},"    plt.subplot(",[36,34083,2850],{"class":62},[36,34085,2934],{"class":42},[36,34087,3156],{"class":62},[36,34089,34090],{"class":42},",ii ",[36,34092,1885],{"class":46},[36,34094,27489],{"class":62},[36,34096,123],{"class":42},[36,34098,34099,34102,34105,34107],{"class":38,"line":10395},[36,34100,34101],{"class":42},"    plt.imshow(batch_x[ii,:,:],",[36,34103,34104],{"class":7598},"cmap",[36,34106,47],{"class":46},[36,34108,34109],{"class":42},"plt.cm.gray)\n",[36,34111,34112,34115,34117,34119,34121],{"class":38,"line":10401},[36,34113,34114],{"class":42},"    plt.title(class_label[batch_y[ii]],",[36,34116,33850],{"class":7598},[36,34118,47],{"class":46},[36,34120,3002],{"class":62},[36,34122,123],{"class":42},[36,34124,34125,34128,34131],{"class":38,"line":10413},[36,34126,34127],{"class":42},"    plt.axis(",[36,34129,34130],{"class":50},"\"off\"",[36,34132,123],{"class":42},[36,34134,34135,34138,34141,34143,34146],{"class":38,"line":10425},[36,34136,34137],{"class":42},"    plt.subplots_adjust(",[36,34139,34140],{"class":7598},"wspace",[36,34142,47],{"class":46},[36,34144,34145],{"class":62},"0.05",[36,34147,123],{"class":42},[36,34149,34150],{"class":38,"line":10437},[36,34151,34152],{"class":42},"plt.show()\n",[19,34154,34155],{},"用matplotlib进行展示的过程可以后续再补",[19,34157,34158],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34160,34161],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34163,34164],{},"模型训练：",[26,34166,34168],{"className":28,"code":34167,"language":30,"meta":31,"style":31},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[33,34169,34170,34177,34184,34188,34200,34206,34217,34227,34237,34247,34257,34262,34274,34284,34288,34292,34297,34307,34320,34331,34348,34359,34398,34414,34426,34437,34442,34453,34469,34480,34491,34502,34509,34513,34518,34523,34527,34532,34542,34563,34567,34571,34576,34581,34586,34606,34610,34615,34625,34629,34634,34643,34648,34653,34658,34668,34672,34676,34681,34686,34696,34701,34711,34716,34725,34730,34739,34744,34753,34757,34762,34772,34776,34780,34785,34800,34827,34842,34846,34851,34856,34865,34870,34879,34884,34893,34898,34907,34912,34921,34926,34935,34940,34953,34958,34968,34973,34983,34989,34995,35001,35007,35018,35024,35044,35050,35061,35067,35073,35079,35085,35091,35097,35103,35123,35129,35145,35151,35165,35171,35186,35192,35201,35207,35216,35222,35228,35237,35243,35254,35260,35279,35285,35296,35302,35322,35338,35344,35358,35364,35370,35381,35387,35393,35403,35409,35420,35426,35436,35441,35447,35496,35543,35548,35554,35573,35579,35599,35605,35611,35621,35626,35632,35648,35693,35699,35705,35711,35722,35728,35734,35740,35758,35772,35781,35790,35799,35808,35814,35820,35828,35833,35839,35850,35856,35876,35882,35888,35894,35911,35917,35923,35929,35935,35941,35968,35992,35998,36004,36010,36021,36032,36038,36055,36078,36101,36107,36112,36121,36131,36137,36142,36148,36161,36167,36178,36189,36208],{"__ignoreMap":31},[36,34171,34172,34174],{"class":38,"line":39},[36,34173,1943],{"class":46},[36,34175,34176],{"class":42}," copy\n",[36,34178,34179,34181],{"class":38,"line":54},[36,34180,1943],{"class":46},[36,34182,34183],{"class":42}," time\n",[36,34185,34186],{"class":38,"line":66},[36,34187,70],{"emptyLinePlaceholder":69},[36,34189,34190,34192,34195,34197],{"class":38,"line":73},[36,34191,1943],{"class":46},[36,34193,34194],{"class":42}," pandas ",[36,34196,33737],{"class":46},[36,34198,34199],{"class":42}," pd\n",[36,34201,34202,34204],{"class":38,"line":86},[36,34203,1943],{"class":46},[36,34205,32761],{"class":42},[36,34207,34208,34210,34212,34214],{"class":38,"line":126},[36,34209,1937],{"class":46},[36,34211,33769],{"class":42},[36,34213,1943],{"class":46},[36,34215,34216],{"class":42}," Dataset\n",[36,34218,34219,34221,34223,34225],{"class":38,"line":131},[36,34220,1937],{"class":46},[36,34222,33722],{"class":42},[36,34224,1943],{"class":46},[36,34226,33727],{"class":42},[36,34228,34229,34231,34233,34235],{"class":38,"line":225},[36,34230,1937],{"class":46},[36,34232,33752],{"class":42},[36,34234,1943],{"class":46},[36,34236,33757],{"class":42},[36,34238,34239,34241,34243,34245],{"class":38,"line":235},[36,34240,1943],{"class":46},[36,34242,33769],{"class":42},[36,34244,33737],{"class":46},[36,34246,33774],{"class":42},[36,34248,34249,34251,34253,34255],{"class":38,"line":377},[36,34250,1943],{"class":46},[36,34252,33786],{"class":42},[36,34254,33737],{"class":46},[36,34256,33791],{"class":42},[36,34258,34259],{"class":38,"line":617},[36,34260,34261],{"class":2621},"# 导入模型\n",[36,34263,34264,34266,34269,34271],{"class":38,"line":643},[36,34265,1937],{"class":46},[36,34267,34268],{"class":42}," model ",[36,34270,1943],{"class":46},[36,34272,34273],{"class":42}," LeNet\n",[36,34275,34276,34278,34280,34282],{"class":38,"line":921},[36,34277,1937],{"class":46},[36,34279,33103],{"class":42},[36,34281,1943],{"class":46},[36,34283,33108],{"class":42},[36,34285,34286],{"class":38,"line":934},[36,34287,70],{"emptyLinePlaceholder":69},[36,34289,34290],{"class":38,"line":939},[36,34291,70],{"emptyLinePlaceholder":69},[36,34293,34294],{"class":38,"line":949},[36,34295,34296],{"class":2621},"# 处理训练集与验证集函数--->划分数据集\n",[36,34298,34299,34301,34304],{"class":38,"line":962},[36,34300,76],{"class":46},[36,34302,34303],{"class":79}," train_val_data_process",[36,34305,34306],{"class":42},"():\n",[36,34308,34309,34312,34314,34316,34318],{"class":38,"line":974},[36,34310,34311],{"class":42},"    train_data",[36,34313,47],{"class":46},[36,34315,33809],{"class":42},[36,34317,33817],{"class":50},[36,34319,33820],{"class":42},[36,34321,34322,34325,34327,34329],{"class":38,"line":979},[36,34323,34324],{"class":7598},"                            train",[36,34326,47],{"class":46},[36,34328,33830],{"class":62},[36,34330,33820],{"class":42},[36,34332,34333,34336,34338,34340,34342,34344,34346],{"class":38,"line":994},[36,34334,34335],{"class":7598},"                            transform",[36,34337,47],{"class":46},[36,34339,33847],{"class":42},[36,34341,33850],{"class":7598},[36,34343,47],{"class":46},[36,34345,3454],{"class":62},[36,34347,33858],{"class":42},[36,34349,34350,34353,34355,34357],{"class":38,"line":1006},[36,34351,34352],{"class":7598},"                            download",[36,34354,47],{"class":46},[36,34356,33830],{"class":62},[36,34358,123],{"class":42},[36,34360,34361,34364,34366,34369,34372,34374,34377,34379,34381,34384,34386,34388,34391,34393,34395],{"class":38,"line":1011},[36,34362,34363],{"class":42},"    train_data,val_data",[36,34365,47],{"class":46},[36,34367,34368],{"class":42},"Data.random_split(train_data,[",[36,34370,34371],{"class":62},"round",[36,34373,92],{"class":42},[36,34375,34376],{"class":62},"0.8",[36,34378,3011],{"class":46},[36,34380,9739],{"class":62},[36,34382,34383],{"class":42},"(train_data)),",[36,34385,34371],{"class":62},[36,34387,92],{"class":42},[36,34389,34390],{"class":62},"0.2",[36,34392,3011],{"class":46},[36,34394,9739],{"class":62},[36,34396,34397],{"class":42},"(train_data))])\n",[36,34399,34400,34403,34405,34408,34410,34412],{"class":38,"line":1023},[36,34401,34402],{"class":42},"    train_dataloader ",[36,34404,47],{"class":46},[36,34406,34407],{"class":42}," Data.DataLoader(",[36,34409,33891],{"class":7598},[36,34411,47],{"class":46},[36,34413,33896],{"class":42},[36,34415,34416,34419,34421,34424],{"class":38,"line":1028},[36,34417,34418],{"class":7598},"                                       batch_size",[36,34420,47],{"class":46},[36,34422,34423],{"class":62},"128",[36,34425,33820],{"class":42},[36,34427,34428,34431,34433,34435],{"class":38,"line":1033},[36,34429,34430],{"class":7598},"                                       shuffle",[36,34432,47],{"class":46},[36,34434,33830],{"class":62},[36,34436,33820],{"class":42},[36,34438,34439],{"class":38,"line":1053},[36,34440,34441],{"class":2621},"                                       # 规定8个进程\n",[36,34443,34444,34447,34449,34451],{"class":38,"line":1064},[36,34445,34446],{"class":7598},"                                       num_workers",[36,34448,47],{"class":46},[36,34450,2951],{"class":62},[36,34452,123],{"class":42},[36,34454,34455,34458,34460,34462,34464,34466],{"class":38,"line":1075},[36,34456,34457],{"class":42},"    val_dataloader",[36,34459,47],{"class":46},[36,34461,33888],{"class":42},[36,34463,33891],{"class":7598},[36,34465,47],{"class":46},[36,34467,34468],{"class":42},"val_data,\n",[36,34470,34471,34474,34476,34478],{"class":38,"line":2291},[36,34472,34473],{"class":7598},"                                   batch_size",[36,34475,47],{"class":46},[36,34477,34423],{"class":62},[36,34479,33820],{"class":42},[36,34481,34482,34485,34487,34489],{"class":38,"line":2329},[36,34483,34484],{"class":7598},"                                   shuffle",[36,34486,47],{"class":46},[36,34488,33830],{"class":62},[36,34490,33820],{"class":42},[36,34492,34493,34496,34498,34500],{"class":38,"line":2334},[36,34494,34495],{"class":7598},"                                   num_workers",[36,34497,47],{"class":46},[36,34499,2951],{"class":62},[36,34501,123],{"class":42},[36,34503,34504,34506],{"class":38,"line":2339},[36,34505,6474],{"class":46},[36,34507,34508],{"class":42}," train_dataloader,val_dataloader\n",[36,34510,34511],{"class":38,"line":2365},[36,34512,70],{"emptyLinePlaceholder":69},[36,34514,34515],{"class":38,"line":2373},[36,34516,34517],{"class":2621},"# 验证是否出错\n",[36,34519,34520],{"class":38,"line":5001},[36,34521,34522],{"class":2621},"# train_val_data_process()\n",[36,34524,34525],{"class":38,"line":5006},[36,34526,70],{"emptyLinePlaceholder":69},[36,34528,34529],{"class":38,"line":10328},[36,34530,34531],{"class":2621},"# 定义模型训练函数\n",[36,34533,34534,34536,34539],{"class":38,"line":10352},[36,34535,76],{"class":46},[36,34537,34538],{"class":79}," train_model_process",[36,34540,34541],{"class":42},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,34543,34544,34546,34548,34550,34552,34554,34556,34558,34561],{"class":38,"line":10357},[36,34545,33592],{"class":42},[36,34547,47],{"class":46},[36,34549,32816],{"class":42},[36,34551,33599],{"class":50},[36,34553,4108],{"class":46},[36,34555,33604],{"class":42},[36,34557,4105],{"class":46},[36,34559,34560],{"class":50}," 'cpu'",[36,34562,123],{"class":42},[36,34564,34565],{"class":38,"line":10363},[36,34566,70],{"emptyLinePlaceholder":69},[36,34568,34569],{"class":38,"line":10390},[36,34570,70],{"emptyLinePlaceholder":69},[36,34572,34573],{"class":38,"line":10395},[36,34574,34575],{"class":2621},"    # 定义优化器\n",[36,34577,34578],{"class":38,"line":10401},[36,34579,34580],{"class":2621},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,34582,34583],{"class":38,"line":10413},[36,34584,34585],{"class":2621},"    # lr为学习率\n",[36,34587,34588,34591,34593,34596,34599,34601,34604],{"class":38,"line":10425},[36,34589,34590],{"class":42},"    optimizer",[36,34592,47],{"class":46},[36,34594,34595],{"class":42},"torch.optim.Adam(model.parameters(),",[36,34597,34598],{"class":7598},"lr",[36,34600,47],{"class":46},[36,34602,34603],{"class":62},"0.001",[36,34605,123],{"class":42},[36,34607,34608],{"class":38,"line":10437},[36,34609,70],{"emptyLinePlaceholder":69},[36,34611,34612],{"class":38,"line":12095},[36,34613,34614],{"class":2621},"    # 定义损失函数使用交叉熵损失函数\n",[36,34616,34617,34620,34622],{"class":38,"line":12120},[36,34618,34619],{"class":42},"    criterion",[36,34621,47],{"class":46},[36,34623,34624],{"class":42},"nn.CrossEntropyLoss()\n",[36,34626,34627],{"class":38,"line":12143},[36,34628,70],{"emptyLinePlaceholder":69},[36,34630,34631],{"class":38,"line":12167},[36,34632,34633],{"class":2621},"    # 将模型放到GPU中进行训练\n",[36,34635,34636,34638,34640],{"class":38,"line":12172},[36,34637,33644],{"class":42},[36,34639,47],{"class":46},[36,34641,34642],{"class":42},"model.to(device)\n",[36,34644,34645],{"class":38,"line":12177},[36,34646,34647],{"class":2621},"    # 复制当前模型的参数\n",[36,34649,34650],{"class":38,"line":12182},[36,34651,34652],{"class":2621},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,34654,34655],{"class":38,"line":12191},[36,34656,34657],{"class":2621},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,34659,34660,34663,34665],{"class":38,"line":12196},[36,34661,34662],{"class":42},"    best_model_wts",[36,34664,47],{"class":46},[36,34666,34667],{"class":42},"copy.deepcopy(model.state_dict())\n",[36,34669,34670],{"class":38,"line":12202},[36,34671,70],{"emptyLinePlaceholder":69},[36,34673,34674],{"class":38,"line":12223},[36,34675,70],{"emptyLinePlaceholder":69},[36,34677,34678],{"class":38,"line":12229},[36,34679,34680],{"class":2621},"    # 初始化参数\n",[36,34682,34683],{"class":38,"line":12243},[36,34684,34685],{"class":2621},"    # 最高准确度\n",[36,34687,34688,34691,34693],{"class":38,"line":12249},[36,34689,34690],{"class":42},"    best_acc",[36,34692,47],{"class":46},[36,34694,34695],{"class":62},"0.0\n",[36,34697,34698],{"class":38,"line":12276},[36,34699,34700],{"class":2621},"    # 训练集损失列表\n",[36,34702,34703,34706,34708],{"class":38,"line":12285},[36,34704,34705],{"class":42},"    train_loss_all",[36,34707,47],{"class":46},[36,34709,34710],{"class":42},"[]\n",[36,34712,34713],{"class":38,"line":12291},[36,34714,34715],{"class":2621},"    # 验证集函数列表\n",[36,34717,34718,34721,34723],{"class":38,"line":12299},[36,34719,34720],{"class":42},"    val_loss_all",[36,34722,47],{"class":46},[36,34724,34710],{"class":42},[36,34726,34727],{"class":38,"line":12304},[36,34728,34729],{"class":2621},"    # 训练集准确度列表\n",[36,34731,34732,34735,34737],{"class":38,"line":18977},[36,34733,34734],{"class":42},"    train_acc_all",[36,34736,47],{"class":46},[36,34738,34710],{"class":42},[36,34740,34741],{"class":38,"line":18983},[36,34742,34743],{"class":2621},"    # 验证集准确度列表\n",[36,34745,34746,34749,34751],{"class":38,"line":19006},[36,34747,34748],{"class":42},"    val_acc_all",[36,34750,47],{"class":46},[36,34752,34710],{"class":42},[36,34754,34755],{"class":38,"line":19012},[36,34756,70],{"emptyLinePlaceholder":69},[36,34758,34759],{"class":38,"line":19035},[36,34760,34761],{"class":2621},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,34763,34764,34767,34769],{"class":38,"line":19049},[36,34765,34766],{"class":42},"    since",[36,34768,47],{"class":46},[36,34770,34771],{"class":42},"time.time()\n",[36,34773,34774],{"class":38,"line":19069},[36,34775,70],{"emptyLinePlaceholder":69},[36,34777,34778],{"class":38,"line":19075},[36,34779,70],{"emptyLinePlaceholder":69},[36,34781,34782],{"class":38,"line":19086},[36,34783,34784],{"class":2621},"    # 准备工作完成--->开始训练模型\n",[36,34786,34787,34789,34792,34794,34797],{"class":38,"line":19109},[36,34788,5586],{"class":46},[36,34790,34791],{"class":42}," epoch ",[36,34793,28413],{"class":46},[36,34795,34796],{"class":62}," range",[36,34798,34799],{"class":42},"(num_epochs):\n",[36,34801,34802,34804,34806,34809,34812,34814,34816,34818,34821,34823,34825],{"class":38,"line":19131},[36,34803,168],{"class":62},[36,34805,92],{"class":42},[36,34807,34808],{"class":50},"\"Epoch ",[36,34810,34811],{"class":62},"{}",[36,34813,3139],{"class":50},[36,34815,34811],{"class":62},[36,34817,604],{"class":50},[36,34819,34820],{"class":42},".format(epoch,num_epochs",[36,34822,3087],{"class":46},[36,34824,1906],{"class":62},[36,34826,1914],{"class":42},[36,34828,34829,34831,34833,34836,34838,34840],{"class":38,"line":19136},[36,34830,168],{"class":62},[36,34832,92],{"class":42},[36,34834,34835],{"class":50},"\"-\"",[36,34837,3011],{"class":46},[36,34839,3002],{"class":62},[36,34841,123],{"class":42},[36,34843,34844],{"class":38,"line":19142},[36,34845,70],{"emptyLinePlaceholder":69},[36,34847,34848],{"class":38,"line":19156},[36,34849,34850],{"class":2621},"        # 初始化参数\n",[36,34852,34853],{"class":38,"line":19169},[36,34854,34855],{"class":2621},"        # 训练集损失函数\n",[36,34857,34858,34861,34863],{"class":38,"line":19174},[36,34859,34860],{"class":42},"        train_loss",[36,34862,47],{"class":46},[36,34864,34695],{"class":62},[36,34866,34867],{"class":38,"line":19188},[36,34868,34869],{"class":2621},"        # 训练集准确度\n",[36,34871,34872,34875,34877],{"class":38,"line":19193},[36,34873,34874],{"class":42},"        train_corrects",[36,34876,47],{"class":46},[36,34878,5470],{"class":62},[36,34880,34881],{"class":38,"line":19199},[36,34882,34883],{"class":2621},"        # 验证集损失函数\n",[36,34885,34886,34889,34891],{"class":38,"line":19204},[36,34887,34888],{"class":42},"        val_loss",[36,34890,47],{"class":46},[36,34892,34695],{"class":62},[36,34894,34895],{"class":38,"line":19218},[36,34896,34897],{"class":2621},"        # 验证集准确度\n",[36,34899,34900,34903,34905],{"class":38,"line":19223},[36,34901,34902],{"class":42},"        val_corrects",[36,34904,47],{"class":46},[36,34906,5470],{"class":62},[36,34908,34909],{"class":38,"line":19228},[36,34910,34911],{"class":2621},"        # 训练集样本数量\n",[36,34913,34914,34917,34919],{"class":38,"line":19242},[36,34915,34916],{"class":42},"        train_num",[36,34918,47],{"class":46},[36,34920,5470],{"class":62},[36,34922,34923],{"class":38,"line":19254},[36,34924,34925],{"class":2621},"        # 验证集样本数量\n",[36,34927,34928,34931,34933],{"class":38,"line":19259},[36,34929,34930],{"class":42},"        val_num",[36,34932,47],{"class":46},[36,34934,5470],{"class":62},[36,34936,34937],{"class":38,"line":19272},[36,34938,34939],{"class":2621},"        # 将数据放到设备,并开始训练\n",[36,34941,34942,34944,34946,34948,34950],{"class":38,"line":19277},[36,34943,5788],{"class":46},[36,34945,33955],{"class":42},[36,34947,28413],{"class":46},[36,34949,33960],{"class":62},[36,34951,34952],{"class":42},"(train_dataloader):\n",[36,34954,34955],{"class":38,"line":19282},[36,34956,34957],{"class":2621},"            # 将特征放入到训练设备\n",[36,34959,34960,34963,34965],{"class":38,"line":19287},[36,34961,34962],{"class":42},"            b_x",[36,34964,47],{"class":46},[36,34966,34967],{"class":42},"b_x.to(device)\n",[36,34969,34970],{"class":38,"line":19300},[36,34971,34972],{"class":2621},"            # 将标签放入到训练设备当中\n",[36,34974,34975,34978,34980],{"class":38,"line":19305},[36,34976,34977],{"class":42},"            b_y",[36,34979,47],{"class":46},[36,34981,34982],{"class":42},"b_y.to(device)\n",[36,34984,34986],{"class":38,"line":34985},98,[36,34987,34988],{"class":2621},"            # 设置模型为训练模式\n",[36,34990,34992],{"class":38,"line":34991},99,[36,34993,34994],{"class":42},"            model.train()\n",[36,34996,34998],{"class":38,"line":34997},100,[36,34999,35000],{"class":2621},"            # 将数据放到模型当中,开始前向传播\n",[36,35002,35004],{"class":38,"line":35003},101,[36,35005,35006],{"class":2621},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,35008,35010,35013,35015],{"class":38,"line":35009},102,[36,35011,35012],{"class":42},"            output",[36,35014,47],{"class":46},[36,35016,35017],{"class":42},"model(b_x)\n",[36,35019,35021],{"class":38,"line":35020},103,[36,35022,35023],{"class":2621},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,35025,35027,35030,35032,35035,35038,35040,35042],{"class":38,"line":35026},104,[36,35028,35029],{"class":42},"            pre_lab",[36,35031,47],{"class":46},[36,35033,35034],{"class":42},"torch.argmax(output,",[36,35036,35037],{"class":7598},"dim",[36,35039,47],{"class":46},[36,35041,1906],{"class":62},[36,35043,123],{"class":42},[36,35045,35047],{"class":38,"line":35046},105,[36,35048,35049],{"class":2621},"            # 计算每一个batch的损失函数\n",[36,35051,35053,35056,35058],{"class":38,"line":35052},106,[36,35054,35055],{"class":42},"            loss",[36,35057,47],{"class":46},[36,35059,35060],{"class":42},"criterion(output,b_y)\n",[36,35062,35064],{"class":38,"line":35063},107,[36,35065,35066],{"class":2621},"            # 将梯度初始化为0\n",[36,35068,35070],{"class":38,"line":35069},108,[36,35071,35072],{"class":42},"            optimizer.zero_grad()\n",[36,35074,35076],{"class":38,"line":35075},109,[36,35077,35078],{"class":2621},"            # 梯度置为0后再进行反向传播\n",[36,35080,35082],{"class":38,"line":35081},110,[36,35083,35084],{"class":42},"            loss.backward()\n",[36,35086,35088],{"class":38,"line":35087},111,[36,35089,35090],{"class":2621},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,35092,35094],{"class":38,"line":35093},112,[36,35095,35096],{"class":42},"            optimizer.step()\n",[36,35098,35100],{"class":38,"line":35099},113,[36,35101,35102],{"class":2621},"            # loss.item()指的是batch的平均损失\n",[36,35104,35106,35109,35111,35114,35116,35119,35121],{"class":38,"line":35105},114,[36,35107,35108],{"class":42},"            train_loss",[36,35110,928],{"class":46},[36,35112,35113],{"class":42},"loss.item()",[36,35115,3011],{"class":46},[36,35117,35118],{"class":42},"b_x.size(",[36,35120,2751],{"class":62},[36,35122,123],{"class":42},[36,35124,35126],{"class":38,"line":35125},115,[36,35127,35128],{"class":2621},"            # 计算每个批次中正确预测的数量\n",[36,35130,35132,35135,35137,35140,35142],{"class":38,"line":35131},116,[36,35133,35134],{"class":42},"            train_corrects",[36,35136,928],{"class":46},[36,35138,35139],{"class":42},"torch.sum(pre_lab",[36,35141,5334],{"class":46},[36,35143,35144],{"class":42},"b_y.data)\n",[36,35146,35148],{"class":38,"line":35147},117,[36,35149,35150],{"class":2621},"            # 计算目前为止一共处理了多少样本\n",[36,35152,35154,35157,35159,35161,35163],{"class":38,"line":35153},118,[36,35155,35156],{"class":42},"            train_num",[36,35158,928],{"class":46},[36,35160,35118],{"class":42},[36,35162,2751],{"class":62},[36,35164,123],{"class":42},[36,35166,35168],{"class":38,"line":35167},119,[36,35169,35170],{"class":2621},"        # 验证数据\n",[36,35172,35174,35176,35179,35181,35183],{"class":38,"line":35173},120,[36,35175,5788],{"class":46},[36,35177,35178],{"class":42}," step ,(b_x,b_y) ",[36,35180,28413],{"class":46},[36,35182,33960],{"class":62},[36,35184,35185],{"class":42},"(val_dataloader):\n",[36,35187,35189],{"class":38,"line":35188},121,[36,35190,35191],{"class":2621},"            # 将特征放到验证设备当中\n",[36,35193,35195,35197,35199],{"class":38,"line":35194},122,[36,35196,34962],{"class":42},[36,35198,47],{"class":46},[36,35200,34967],{"class":42},[36,35202,35204],{"class":38,"line":35203},123,[36,35205,35206],{"class":2621},"            # 将标签放到放到训练设备当中\n",[36,35208,35210,35212,35214],{"class":38,"line":35209},124,[36,35211,34977],{"class":42},[36,35213,47],{"class":46},[36,35215,34982],{"class":42},[36,35217,35219],{"class":38,"line":35218},125,[36,35220,35221],{"class":2621},"            # 开启验证模式，设置模型为评估模式\n",[36,35223,35225],{"class":38,"line":35224},126,[36,35226,35227],{"class":42},"            model.eval()\n",[36,35229,35231,35234],{"class":38,"line":35230},127,[36,35232,35233],{"class":46},"            with",[36,35235,35236],{"class":42}," torch.no_grad():\n",[36,35238,35240],{"class":38,"line":35239},128,[36,35241,35242],{"class":2621},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,35244,35246,35249,35251],{"class":38,"line":35245},129,[36,35247,35248],{"class":42},"                output ",[36,35250,47],{"class":46},[36,35252,35253],{"class":42}," model(b_x)\n",[36,35255,35257],{"class":38,"line":35256},130,[36,35258,35259],{"class":2621},"                # 查找每一行中最大值对应的下标\n",[36,35261,35263,35266,35268,35271,35273,35275,35277],{"class":38,"line":35262},131,[36,35264,35265],{"class":42},"                pre_lab ",[36,35267,47],{"class":46},[36,35269,35270],{"class":42}," torch.argmax(output, ",[36,35272,35037],{"class":7598},[36,35274,47],{"class":46},[36,35276,1906],{"class":62},[36,35278,123],{"class":42},[36,35280,35282],{"class":38,"line":35281},132,[36,35283,35284],{"class":2621},"                # 计算验证集上的当前 batch 损失\n",[36,35286,35288,35291,35293],{"class":38,"line":35287},133,[36,35289,35290],{"class":42},"                val_batch_loss ",[36,35292,47],{"class":46},[36,35294,35295],{"class":42}," criterion(output, b_y)\n",[36,35297,35299],{"class":38,"line":35298},134,[36,35300,35301],{"class":2621},"                # 对损失函数进行累加（按样本数加权）\n",[36,35303,35305,35308,35310,35313,35315,35318,35320],{"class":38,"line":35304},135,[36,35306,35307],{"class":42},"                val_loss ",[36,35309,928],{"class":46},[36,35311,35312],{"class":42}," val_batch_loss.item() ",[36,35314,3011],{"class":46},[36,35316,35317],{"class":42}," b_x.size(",[36,35319,2751],{"class":62},[36,35321,123],{"class":42},[36,35323,35325,35328,35330,35333,35335],{"class":38,"line":35324},136,[36,35326,35327],{"class":42},"                val_corrects ",[36,35329,928],{"class":46},[36,35331,35332],{"class":42}," torch.sum(pre_lab ",[36,35334,5334],{"class":46},[36,35336,35337],{"class":42}," b_y.data)\n",[36,35339,35341],{"class":38,"line":35340},137,[36,35342,35343],{"class":2621},"                # 当前用于验证的样本数量\n",[36,35345,35347,35350,35352,35354,35356],{"class":38,"line":35346},138,[36,35348,35349],{"class":42},"            val_num ",[36,35351,928],{"class":46},[36,35353,35317],{"class":42},[36,35355,2751],{"class":62},[36,35357,123],{"class":42},[36,35359,35361],{"class":38,"line":35360},139,[36,35362,35363],{"class":2621},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,35365,35367],{"class":38,"line":35366},140,[36,35368,35369],{"class":2621},"        # 计算并保存训练集的loss值\n",[36,35371,35373,35376,35378],{"class":38,"line":35372},141,[36,35374,35375],{"class":42},"        train_loss_all.append(train_loss",[36,35377,3139],{"class":46},[36,35379,35380],{"class":42},"train_num)\n",[36,35382,35384],{"class":38,"line":35383},142,[36,35385,35386],{"class":2621},"        # 取双精度\n",[36,35388,35390],{"class":38,"line":35389},143,[36,35391,35392],{"class":2621},"        # 计算并保存训练集的准确率\n",[36,35394,35396,35399,35401],{"class":38,"line":35395},144,[36,35397,35398],{"class":42},"        train_acc_all.append(train_corrects.double().item()",[36,35400,3139],{"class":46},[36,35402,35380],{"class":42},[36,35404,35406],{"class":38,"line":35405},145,[36,35407,35408],{"class":2621},"        # 计算并保存验证集的loss值\n",[36,35410,35412,35415,35417],{"class":38,"line":35411},146,[36,35413,35414],{"class":42},"        val_loss_all.append(val_loss",[36,35416,3139],{"class":46},[36,35418,35419],{"class":42},"val_num)\n",[36,35421,35423],{"class":38,"line":35422},147,[36,35424,35425],{"class":2621},"        # 计算并保存验证集的准确率\n",[36,35427,35429,35432,35434],{"class":38,"line":35428},148,[36,35430,35431],{"class":42},"        val_acc_all.append(val_corrects.double().item()",[36,35433,3139],{"class":46},[36,35435,35419],{"class":42},[36,35437,35439],{"class":38,"line":35438},149,[36,35440,70],{"emptyLinePlaceholder":69},[36,35442,35444],{"class":38,"line":35443},150,[36,35445,35446],{"class":2621},"        # 打印训练一轮的loss值和准确率\n",[36,35448,35450,35452,35454,35456,35458,35461,35463,35466,35468,35471,35473,35475,35477,35479,35482,35484,35486,35489,35491,35493],{"class":38,"line":35449},151,[36,35451,168],{"class":62},[36,35453,92],{"class":42},[36,35455,5977],{"class":50},[36,35457,34811],{"class":62},[36,35459,35460],{"class":50},"train loss:",[36,35462,101],{"class":62},[36,35464,35465],{"class":46},":.4f",[36,35467,107],{"class":62},[36,35469,35470],{"class":50}," train acc:",[36,35472,101],{"class":62},[36,35474,35465],{"class":46},[36,35476,107],{"class":62},[36,35478,5977],{"class":50},[36,35480,35481],{"class":42},".format(epoch,train_loss_all[",[36,35483,3087],{"class":46},[36,35485,1906],{"class":62},[36,35487,35488],{"class":42},"],train_acc_all[",[36,35490,3087],{"class":46},[36,35492,1906],{"class":62},[36,35494,35495],{"class":42},"]))\n",[36,35497,35499,35501,35503,35505,35507,35510,35512,35514,35516,35519,35521,35523,35525,35527,35530,35532,35534,35537,35539,35541],{"class":38,"line":35498},152,[36,35500,168],{"class":62},[36,35502,92],{"class":42},[36,35504,5977],{"class":50},[36,35506,34811],{"class":62},[36,35508,35509],{"class":50},"val loss:",[36,35511,101],{"class":62},[36,35513,35465],{"class":46},[36,35515,107],{"class":62},[36,35517,35518],{"class":50}," val acc:",[36,35520,101],{"class":62},[36,35522,35465],{"class":46},[36,35524,107],{"class":62},[36,35526,5977],{"class":50},[36,35528,35529],{"class":42},".format(epoch,val_loss_all[",[36,35531,3087],{"class":46},[36,35533,1906],{"class":62},[36,35535,35536],{"class":42},"],val_acc_all[",[36,35538,3087],{"class":46},[36,35540,1906],{"class":62},[36,35542,35495],{"class":42},[36,35544,35546],{"class":38,"line":35545},153,[36,35547,70],{"emptyLinePlaceholder":69},[36,35549,35551],{"class":38,"line":35550},154,[36,35552,35553],{"class":2621},"        # 判断准确度--->保存最优模型\n",[36,35555,35557,35559,35562,35564,35566,35568,35570],{"class":38,"line":35556},155,[36,35558,890],{"class":46},[36,35560,35561],{"class":42}," val_acc_all[",[36,35563,3087],{"class":46},[36,35565,1906],{"class":62},[36,35567,3493],{"class":42},[36,35569,986],{"class":46},[36,35571,35572],{"class":42},"best_acc:\n",[36,35574,35576],{"class":38,"line":35575},156,[36,35577,35578],{"class":2621},"            # 保存当前模型准确度\n",[36,35580,35582,35585,35587,35589,35592,35594,35596],{"class":38,"line":35581},157,[36,35583,35584],{"class":42},"            best_acc:",[36,35586,2605],{"class":62},[36,35588,47],{"class":46},[36,35590,35591],{"class":42},"val_acc_all[",[36,35593,3087],{"class":46},[36,35595,1906],{"class":62},[36,35597,35598],{"class":42},"]\n",[36,35600,35602],{"class":38,"line":35601},158,[36,35603,35604],{"class":2621},"            # 保存当前的准确度\n",[36,35606,35608],{"class":38,"line":35607},159,[36,35609,35610],{"class":2621},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,35612,35614,35617,35619],{"class":38,"line":35613},160,[36,35615,35616],{"class":42},"            best_model_wts",[36,35618,47],{"class":46},[36,35620,34667],{"class":42},[36,35622,35624],{"class":38,"line":35623},161,[36,35625,70],{"emptyLinePlaceholder":69},[36,35627,35629],{"class":38,"line":35628},162,[36,35630,35631],{"class":2621},"        # 计算耗时\n",[36,35633,35635,35638,35640,35643,35645],{"class":38,"line":35634},163,[36,35636,35637],{"class":42},"        time_use",[36,35639,47],{"class":46},[36,35641,35642],{"class":42},"time.time()",[36,35644,3087],{"class":46},[36,35646,35647],{"class":42},"since\n",[36,35649,35651,35653,35655,35658,35660,35663,35665,35667,35669,35671,35673,35676,35679,35682,35684,35687,35689,35691],{"class":38,"line":35650},164,[36,35652,168],{"class":62},[36,35654,92],{"class":42},[36,35656,35657],{"class":50},"'训练和验证耗费的时间",[36,35659,101],{"class":62},[36,35661,35662],{"class":46},":.0f",[36,35664,107],{"class":62},[36,35666,3099],{"class":50},[36,35668,101],{"class":62},[36,35670,35662],{"class":46},[36,35672,107],{"class":62},[36,35674,35675],{"class":50},"s'",[36,35677,35678],{"class":42},".format(time_use",[36,35680,35681],{"class":46},"\u002F\u002F",[36,35683,3460],{"class":62},[36,35685,35686],{"class":42},",time_use",[36,35688,2884],{"class":46},[36,35690,3460],{"class":62},[36,35692,1914],{"class":42},[36,35694,35696],{"class":38,"line":35695},165,[36,35697,35698],{"class":2621},"    # 选择最优参数\n",[36,35700,35702],{"class":38,"line":35701},166,[36,35703,35704],{"class":2621},"    # 加载最高准确率下的模型参数\n",[36,35706,35708],{"class":38,"line":35707},167,[36,35709,35710],{"class":2621},"    # model.load_state_dict(best_model_wts)\n",[36,35712,35714,35717,35720],{"class":38,"line":35713},168,[36,35715,35716],{"class":42},"    torch.save(model.state_dict(best_model_wts), ",[36,35718,35719],{"class":50},"'.\u002Fbest_model.pth'",[36,35721,123],{"class":42},[36,35723,35725],{"class":38,"line":35724},169,[36,35726,35727],{"class":2621},"    # 或者写成\n",[36,35729,35731],{"class":38,"line":35730},170,[36,35732,35733],{"class":2621},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,35735,35737],{"class":38,"line":35736},171,[36,35738,35739],{"class":2621},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,35741,35743,35746,35748,35751,35754,35756],{"class":38,"line":35742},172,[36,35744,35745],{"class":42},"    train_process",[36,35747,47],{"class":46},[36,35749,35750],{"class":42},"pd.DataFrame(",[36,35752,35753],{"class":7598},"data",[36,35755,47],{"class":46},[36,35757,3963],{"class":42},[36,35759,35761,35764,35766,35769],{"class":38,"line":35760},173,[36,35762,35763],{"class":50},"        \"epoch\"",[36,35765,3413],{"class":42},[36,35767,35768],{"class":62},"range",[36,35770,35771],{"class":42},"(num_epochs),\n",[36,35773,35775,35778],{"class":38,"line":35774},174,[36,35776,35777],{"class":50},"        \"train_loss_all\"",[36,35779,35780],{"class":42},":train_loss_all,\n",[36,35782,35784,35787],{"class":38,"line":35783},175,[36,35785,35786],{"class":50},"        \"val_loss_all\"",[36,35788,35789],{"class":42},":val_loss_all,\n",[36,35791,35793,35796],{"class":38,"line":35792},176,[36,35794,35795],{"class":50},"        \"train_acc_all\"",[36,35797,35798],{"class":42},":train_acc_all,\n",[36,35800,35802,35805],{"class":38,"line":35801},177,[36,35803,35804],{"class":50},"        \"val_acc_all\"",[36,35806,35807],{"class":42},":val_acc_all\n",[36,35809,35811],{"class":38,"line":35810},178,[36,35812,35813],{"class":42},"    })\n",[36,35815,35817],{"class":38,"line":35816},179,[36,35818,35819],{"class":2621},"    # 返回训练保存的过程\n",[36,35821,35823,35825],{"class":38,"line":35822},180,[36,35824,6474],{"class":46},[36,35826,35827],{"class":42}," train_process\n",[36,35829,35831],{"class":38,"line":35830},181,[36,35832,70],{"emptyLinePlaceholder":69},[36,35834,35836],{"class":38,"line":35835},182,[36,35837,35838],{"class":2621},"# 将loss值和精度按照图片的形式展示出来\n",[36,35840,35842,35844,35847],{"class":38,"line":35841},183,[36,35843,76],{"class":46},[36,35845,35846],{"class":79}," matplot_acc_loss",[36,35848,35849],{"class":42},"(train_process):\n",[36,35851,35853],{"class":38,"line":35852},184,[36,35854,35855],{"class":2621},"    # 设置图的大小\n",[36,35857,35859,35862,35864,35866,35868,35870,35872,35874],{"class":38,"line":35858},185,[36,35860,35861],{"class":42},"    plt.figure(",[36,35863,34047],{"class":7598},[36,35865,47],{"class":46},[36,35867,92],{"class":42},[36,35869,3053],{"class":62},[36,35871,2934],{"class":42},[36,35873,2850],{"class":62},[36,35875,1914],{"class":42},[36,35877,35879],{"class":38,"line":35878},186,[36,35880,35881],{"class":2621},"    # 设置图中有几张图\n",[36,35883,35885],{"class":38,"line":35884},187,[36,35886,35887],{"class":2621},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,35889,35891],{"class":38,"line":35890},188,[36,35892,35893],{"class":2621},"    # ①loss图\n",[36,35895,35897,35899,35901,35903,35905,35907,35909],{"class":38,"line":35896},189,[36,35898,34081],{"class":42},[36,35900,1906],{"class":62},[36,35902,2934],{"class":42},[36,35904,1911],{"class":62},[36,35906,2934],{"class":42},[36,35908,1906],{"class":62},[36,35910,123],{"class":42},[36,35912,35914],{"class":38,"line":35913},190,[36,35915,35916],{"class":2621},"    # 补充:\n",[36,35918,35920],{"class":38,"line":35919},191,[36,35921,35922],{"class":2621},"    # plt.subplot(nrows, ncols, index)\n",[36,35924,35926],{"class":38,"line":35925},192,[36,35927,35928],{"class":2621},"    # nrows：行数\n",[36,35930,35932],{"class":38,"line":35931},193,[36,35933,35934],{"class":2621},"    # ncols：列数\n",[36,35936,35938],{"class":38,"line":35937},194,[36,35939,35940],{"class":2621},"    # index：目前选中第几个子图（从1开始）\n",[36,35942,35944,35947,35950,35953,35956,35958,35961,35963,35966],{"class":38,"line":35943},195,[36,35945,35946],{"class":42},"    plt.plot(train_process[",[36,35948,35949],{"class":50},"\"epoch\"",[36,35951,35952],{"class":42},"],train_process.train_loss_all,",[36,35954,35955],{"class":50},"'ro-'",[36,35957,2934],{"class":42},[36,35959,35960],{"class":7598},"label",[36,35962,47],{"class":46},[36,35964,35965],{"class":50},"'train loss'",[36,35967,123],{"class":42},[36,35969,35971,35973,35975,35978,35981,35983,35985,35987,35990],{"class":38,"line":35970},196,[36,35972,35946],{"class":42},[36,35974,35949],{"class":50},[36,35976,35977],{"class":42},"],train_process.val_loss_all,",[36,35979,35980],{"class":50},"'bs--'",[36,35982,2934],{"class":42},[36,35984,35960],{"class":7598},[36,35986,47],{"class":46},[36,35988,35989],{"class":50},"'val loss'",[36,35991,123],{"class":42},[36,35993,35995],{"class":38,"line":35994},197,[36,35996,35997],{"class":2621},"    # 添加一个图例\n",[36,35999,36001],{"class":38,"line":36000},198,[36,36002,36003],{"class":42},"    plt.legend()\n",[36,36005,36007],{"class":38,"line":36006},199,[36,36008,36009],{"class":2621},"    # 给轴添加标签\n",[36,36011,36013,36016,36019],{"class":38,"line":36012},200,[36,36014,36015],{"class":42},"    plt.xlabel(",[36,36017,36018],{"class":50},"'epoch'",[36,36020,123],{"class":42},[36,36022,36024,36027,36030],{"class":38,"line":36023},201,[36,36025,36026],{"class":42},"    plt.ylabel(",[36,36028,36029],{"class":50},"'loss'",[36,36031,123],{"class":42},[36,36033,36035],{"class":38,"line":36034},202,[36,36036,36037],{"class":2621},"    # ②准确度图\n",[36,36039,36041,36043,36045,36047,36049,36051,36053],{"class":38,"line":36040},203,[36,36042,34081],{"class":42},[36,36044,1906],{"class":62},[36,36046,2934],{"class":42},[36,36048,1911],{"class":62},[36,36050,2934],{"class":42},[36,36052,1911],{"class":62},[36,36054,123],{"class":42},[36,36056,36058,36060,36062,36065,36067,36069,36071,36073,36076],{"class":38,"line":36057},204,[36,36059,35946],{"class":42},[36,36061,35949],{"class":50},[36,36063,36064],{"class":42},"],train_process.train_acc_all,",[36,36066,35955],{"class":50},[36,36068,2934],{"class":42},[36,36070,35960],{"class":7598},[36,36072,47],{"class":46},[36,36074,36075],{"class":50},"'train acc'",[36,36077,123],{"class":42},[36,36079,36081,36083,36085,36088,36090,36092,36094,36096,36099],{"class":38,"line":36080},205,[36,36082,35946],{"class":42},[36,36084,35949],{"class":50},[36,36086,36087],{"class":42},"],train_process.val_acc_all,",[36,36089,35980],{"class":50},[36,36091,2934],{"class":42},[36,36093,35960],{"class":7598},[36,36095,47],{"class":46},[36,36097,36098],{"class":50},"'val acc'",[36,36100,123],{"class":42},[36,36102,36104],{"class":38,"line":36103},206,[36,36105,36106],{"class":2621},"    # 添加图例\n",[36,36108,36110],{"class":38,"line":36109},207,[36,36111,36003],{"class":42},[36,36113,36115,36117,36119],{"class":38,"line":36114},208,[36,36116,36015],{"class":42},[36,36118,35949],{"class":50},[36,36120,123],{"class":42},[36,36122,36124,36126,36129],{"class":38,"line":36123},209,[36,36125,36026],{"class":42},[36,36127,36128],{"class":50},"\"acc\"",[36,36130,123],{"class":42},[36,36132,36134],{"class":38,"line":36133},210,[36,36135,36136],{"class":42},"    plt.show()\n",[36,36138,36140],{"class":38,"line":36139},211,[36,36141,70],{"emptyLinePlaceholder":69},[36,36143,36145],{"class":38,"line":36144},212,[36,36146,36147],{"class":2621},"# 正式开始训练:\n",[36,36149,36151,36153,36155,36157,36159],{"class":38,"line":36150},213,[36,36152,3948],{"class":46},[36,36154,33575],{"class":62},[36,36156,5334],{"class":46},[36,36158,33580],{"class":50},[36,36160,153],{"class":42},[36,36162,36164],{"class":38,"line":36163},214,[36,36165,36166],{"class":2621},"    # 将模型实例化\n",[36,36168,36170,36173,36175],{"class":38,"line":36169},215,[36,36171,36172],{"class":42},"    LeNet",[36,36174,47],{"class":46},[36,36176,36177],{"class":42},"LeNet()\n",[36,36179,36181,36184,36186],{"class":38,"line":36180},216,[36,36182,36183],{"class":42},"    train_dataloader,val_dataloader",[36,36185,47],{"class":46},[36,36187,36188],{"class":42},"train_val_data_process()\n",[36,36190,36192,36194,36196,36199,36202,36204,36206],{"class":38,"line":36191},217,[36,36193,35745],{"class":42},[36,36195,47],{"class":46},[36,36197,36198],{"class":42},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,36200,36201],{"class":7598},"num_epochs",[36,36203,47],{"class":46},[36,36205,3254],{"class":62},[36,36207,123],{"class":42},[36,36209,36211],{"class":38,"line":36210},218,[36,36212,36213],{"class":42},"    matplot_acc_loss(train_process)\n",[19,36215,36216],{},"画图的补充点学习：",[19,36218,36219],{},[3879,36220],{"alt":31,"src":36221},"\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",[650,36223,36224],{"start":66},[653,36225,36226],{},"测试",[26,36228,36230],{"className":28,"code":36229,"language":30,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,36231,36232,36238,36248,36260,36270,36275,36285,36295,36299,36304,36313,36330,36342,36359,36370,36386,36391,36402,36413,36424,36431,36435,36440,36450,36455,36472,36480,36484,36489,36498,36507,36511,36516,36521,36526,36533,36538,36550,36560,36570,36575,36579,36584,36593,36598,36614,36619,36624,36629,36643,36648,36662,36666,36671,36686,36691,36703,36707,36712,36724,36729,36737,36742,36747,36757,36762,36771,36776,36781,36785,36790,36795,36811,36819,36824,36829,36888,36894,36899,36910,36918,36926,36930,36935,36939,36944,36952,36957,36973,36978,36988,36998],{"__ignoreMap":31},[36,36233,36234,36236],{"class":38,"line":39},[36,36235,1943],{"class":46},[36,36237,32761],{"class":42},[36,36239,36240,36242,36244,36246],{"class":38,"line":54},[36,36241,1943],{"class":46},[36,36243,33769],{"class":42},[36,36245,33737],{"class":46},[36,36247,33774],{"class":42},[36,36249,36250,36252,36255,36257],{"class":38,"line":66},[36,36251,1937],{"class":46},[36,36253,36254],{"class":42}," jupyter_client.consoleapp ",[36,36256,1943],{"class":46},[36,36258,36259],{"class":42}," classes\n",[36,36261,36262,36264,36266,36268],{"class":38,"line":73},[36,36263,1937],{"class":46},[36,36265,33752],{"class":42},[36,36267,1943],{"class":46},[36,36269,33757],{"class":42},[36,36271,36272],{"class":38,"line":86},[36,36273,36274],{"class":2621},"# 导入数据集\n",[36,36276,36277,36279,36281,36283],{"class":38,"line":126},[36,36278,1937],{"class":46},[36,36280,33722],{"class":42},[36,36282,1943],{"class":46},[36,36284,33727],{"class":42},[36,36286,36287,36289,36291,36293],{"class":38,"line":131},[36,36288,1937],{"class":46},[36,36290,34268],{"class":42},[36,36292,1943],{"class":46},[36,36294,34273],{"class":42},[36,36296,36297],{"class":38,"line":225},[36,36298,70],{"emptyLinePlaceholder":69},[36,36300,36301],{"class":38,"line":235},[36,36302,36303],{"class":2621},"# 测试数据处理\n",[36,36305,36306,36308,36311],{"class":38,"line":377},[36,36307,76],{"class":46},[36,36309,36310],{"class":79}," test_data_process",[36,36312,34306],{"class":42},[36,36314,36315,36318,36320,36322,36324,36326,36328],{"class":38,"line":617},[36,36316,36317],{"class":42},"    test_data",[36,36319,47],{"class":46},[36,36321,33809],{"class":42},[36,36323,33812],{"class":7598},[36,36325,47],{"class":46},[36,36327,33817],{"class":50},[36,36329,33820],{"class":42},[36,36331,36332,36335,36337,36340],{"class":38,"line":643},[36,36333,36334],{"class":7598},"                           train",[36,36336,47],{"class":46},[36,36338,36339],{"class":62},"False",[36,36341,33820],{"class":42},[36,36343,36344,36347,36349,36351,36353,36355,36357],{"class":38,"line":921},[36,36345,36346],{"class":7598},"                           transform",[36,36348,47],{"class":46},[36,36350,33847],{"class":42},[36,36352,33850],{"class":7598},[36,36354,47],{"class":46},[36,36356,3454],{"class":62},[36,36358,33858],{"class":42},[36,36360,36361,36364,36366,36368],{"class":38,"line":934},[36,36362,36363],{"class":7598},"                           download",[36,36365,47],{"class":46},[36,36367,33830],{"class":62},[36,36369,123],{"class":42},[36,36371,36372,36375,36377,36379,36381,36383],{"class":38,"line":939},[36,36373,36374],{"class":42},"    test_dataloader",[36,36376,47],{"class":46},[36,36378,33888],{"class":42},[36,36380,33891],{"class":7598},[36,36382,47],{"class":46},[36,36384,36385],{"class":42},"test_data,\n",[36,36387,36388],{"class":38,"line":949},[36,36389,36390],{"class":2621},"                                    # 这里是一张一张进行测试\n",[36,36392,36393,36396,36398,36400],{"class":38,"line":962},[36,36394,36395],{"class":7598},"                                    batch_size",[36,36397,47],{"class":46},[36,36399,1906],{"class":62},[36,36401,33820],{"class":42},[36,36403,36404,36407,36409,36411],{"class":38,"line":974},[36,36405,36406],{"class":7598},"                                    shuffle",[36,36408,47],{"class":46},[36,36410,33830],{"class":62},[36,36412,33820],{"class":42},[36,36414,36415,36418,36420,36422],{"class":38,"line":979},[36,36416,36417],{"class":7598},"                                    num_workers",[36,36419,47],{"class":46},[36,36421,2751],{"class":62},[36,36423,123],{"class":42},[36,36425,36426,36428],{"class":38,"line":994},[36,36427,6474],{"class":46},[36,36429,36430],{"class":42}," test_dataloader\n",[36,36432,36433],{"class":38,"line":1006},[36,36434,70],{"emptyLinePlaceholder":69},[36,36436,36437],{"class":38,"line":1011},[36,36438,36439],{"class":2621},"# 定义模型测试函数\n",[36,36441,36442,36444,36447],{"class":38,"line":1023},[36,36443,76],{"class":46},[36,36445,36446],{"class":79}," test_model_process",[36,36448,36449],{"class":42},"(model,test_dataloader):\n",[36,36451,36452],{"class":38,"line":1028},[36,36453,36454],{"class":2621},"    # 将模型放到设备当中，先进行判断\n",[36,36456,36457,36459,36461,36463,36465,36467,36469],{"class":38,"line":1033},[36,36458,33592],{"class":42},[36,36460,47],{"class":46},[36,36462,33599],{"class":50},[36,36464,4108],{"class":46},[36,36466,33604],{"class":42},[36,36468,4105],{"class":46},[36,36470,36471],{"class":50}," \"cpu\"\n",[36,36473,36474,36476,36478],{"class":38,"line":1053},[36,36475,33644],{"class":42},[36,36477,47],{"class":46},[36,36479,34642],{"class":42},[36,36481,36482],{"class":38,"line":1064},[36,36483,70],{"emptyLinePlaceholder":69},[36,36485,36486],{"class":38,"line":1075},[36,36487,36488],{"class":2621},"    # 设置初始化参数\n",[36,36490,36491,36494,36496],{"class":38,"line":2291},[36,36492,36493],{"class":42},"    test_corrects",[36,36495,47],{"class":46},[36,36497,34695],{"class":62},[36,36499,36500,36503,36505],{"class":38,"line":2329},[36,36501,36502],{"class":42},"    test_num",[36,36504,47],{"class":46},[36,36506,5470],{"class":62},[36,36508,36509],{"class":38,"line":2334},[36,36510,70],{"emptyLinePlaceholder":69},[36,36512,36513],{"class":38,"line":2339},[36,36514,36515],{"class":2621},"    # 进行模型测试\n",[36,36517,36518],{"class":38,"line":2365},[36,36519,36520],{"class":2621},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,36522,36523],{"class":38,"line":2373},[36,36524,36525],{"class":2621},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,36527,36528,36531],{"class":38,"line":5001},[36,36529,36530],{"class":46},"    with",[36,36532,35236],{"class":42},[36,36534,36535],{"class":38,"line":5006},[36,36536,36537],{"class":2621},"        # 从数据中进行\n",[36,36539,36540,36542,36545,36547],{"class":38,"line":10328},[36,36541,5788],{"class":46},[36,36543,36544],{"class":42}," test_data_x,test_data_y ",[36,36546,28413],{"class":46},[36,36548,36549],{"class":42}," test_dataloader:\n",[36,36551,36552,36555,36557],{"class":38,"line":10352},[36,36553,36554],{"class":42},"            test_data_x",[36,36556,47],{"class":46},[36,36558,36559],{"class":42},"test_data_x.to(device)\n",[36,36561,36562,36565,36567],{"class":38,"line":10357},[36,36563,36564],{"class":42},"            test_data_y",[36,36566,47],{"class":46},[36,36568,36569],{"class":42},"test_data_y.to(device)\n",[36,36571,36572],{"class":38,"line":10363},[36,36573,36574],{"class":2621},"            # 设置为验证模式\n",[36,36576,36577],{"class":38,"line":10390},[36,36578,35227],{"class":42},[36,36580,36581],{"class":38,"line":10395},[36,36582,36583],{"class":2621},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,36585,36586,36588,36590],{"class":38,"line":10401},[36,36587,35012],{"class":42},[36,36589,47],{"class":46},[36,36591,36592],{"class":42},"model(test_data_x)\n",[36,36594,36595],{"class":38,"line":10413},[36,36596,36597],{"class":2621},"            # 查找每一行中最大值对应的下标\n",[36,36599,36600,36602,36604,36606,36608,36610,36612],{"class":38,"line":10425},[36,36601,35029],{"class":42},[36,36603,47],{"class":46},[36,36605,35034],{"class":42},[36,36607,35037],{"class":7598},[36,36609,47],{"class":46},[36,36611,1906],{"class":62},[36,36613,123],{"class":42},[36,36615,36616],{"class":38,"line":10437},[36,36617,36618],{"class":2621},"            # 计算正确率\n",[36,36620,36621],{"class":38,"line":12095},[36,36622,36623],{"class":2621},"            # .data表示是一个不带梯度信息的tensor\n",[36,36625,36626],{"class":38,"line":12120},[36,36627,36628],{"class":2621},"            # 如果预测正确，则准确度test_corrects加1\n",[36,36630,36631,36634,36636,36638,36640],{"class":38,"line":12143},[36,36632,36633],{"class":42},"            test_corrects",[36,36635,928],{"class":46},[36,36637,35139],{"class":42},[36,36639,5334],{"class":46},[36,36641,36642],{"class":42},"test_data_y.data)\n",[36,36644,36645],{"class":38,"line":12167},[36,36646,36647],{"class":2621},"            # 将所有的测试样本进行累计\n",[36,36649,36650,36653,36655,36658,36660],{"class":38,"line":12172},[36,36651,36652],{"class":42},"            test_num",[36,36654,928],{"class":46},[36,36656,36657],{"class":42},"test_data_x.size(",[36,36659,2751],{"class":62},[36,36661,123],{"class":42},[36,36663,36664],{"class":38,"line":12177},[36,36665,70],{"emptyLinePlaceholder":69},[36,36667,36668],{"class":38,"line":12182},[36,36669,36670],{"class":2621},"        # 计算准确度\n",[36,36672,36673,36676,36678,36681,36683],{"class":38,"line":12191},[36,36674,36675],{"class":42},"        test_acc",[36,36677,47],{"class":46},[36,36679,36680],{"class":42},"test_corrects.double().item()",[36,36682,3139],{"class":46},[36,36684,36685],{"class":42},"test_num\n",[36,36687,36688],{"class":38,"line":12196},[36,36689,36690],{"class":2621},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,36692,36693,36695,36697,36700],{"class":38,"line":12202},[36,36694,168],{"class":62},[36,36696,92],{"class":42},[36,36698,36699],{"class":50},"\"测试的准确率：\"",[36,36701,36702],{"class":42},",test_acc)\n",[36,36704,36705],{"class":38,"line":12223},[36,36706,70],{"emptyLinePlaceholder":69},[36,36708,36709],{"class":38,"line":12229},[36,36710,36711],{"class":2621},"# 实现模型的测试功能\n",[36,36713,36714,36716,36718,36720,36722],{"class":38,"line":12243},[36,36715,3948],{"class":46},[36,36717,33575],{"class":62},[36,36719,5334],{"class":46},[36,36721,33580],{"class":50},[36,36723,153],{"class":42},[36,36725,36726],{"class":38,"line":12249},[36,36727,36728],{"class":2621},"    # 加载模型\n",[36,36730,36731,36733,36735],{"class":38,"line":12276},[36,36732,33644],{"class":42},[36,36734,47],{"class":46},[36,36736,36177],{"class":42},[36,36738,36739],{"class":38,"line":12285},[36,36740,36741],{"class":2621},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,36743,36744],{"class":38,"line":12291},[36,36745,36746],{"class":2621},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,36748,36749,36752,36755],{"class":38,"line":12299},[36,36750,36751],{"class":42},"    model.load_state_dict(torch.load(",[36,36753,36754],{"class":50},"'best_model.pth'",[36,36756,1914],{"class":42},[36,36758,36759],{"class":38,"line":12304},[36,36760,36761],{"class":2621},"    # 数据加载\n",[36,36763,36764,36766,36768],{"class":38,"line":18977},[36,36765,36374],{"class":42},[36,36767,47],{"class":46},[36,36769,36770],{"class":42},"test_data_process()\n",[36,36772,36773],{"class":38,"line":18983},[36,36774,36775],{"class":2621},"    # 加载模型测试的函数\n",[36,36777,36778],{"class":38,"line":19006},[36,36779,36780],{"class":42},"    test_model_process(model,test_dataloader)\n",[36,36782,36783],{"class":38,"line":19012},[36,36784,70],{"emptyLinePlaceholder":69},[36,36786,36787],{"class":38,"line":19035},[36,36788,36789],{"class":2621},"    # 验证集推理实现：\n",[36,36791,36792],{"class":38,"line":19049},[36,36793,36794],{"class":2621},"    # 加载数据加载的更详细一些\n",[36,36796,36797,36799,36801,36803,36805,36807,36809],{"class":38,"line":19069},[36,36798,33592],{"class":42},[36,36800,47],{"class":46},[36,36802,33599],{"class":50},[36,36804,4108],{"class":46},[36,36806,33604],{"class":42},[36,36808,4105],{"class":46},[36,36810,36471],{"class":50},[36,36812,36813,36815,36817],{"class":38,"line":19075},[36,36814,33644],{"class":42},[36,36816,47],{"class":46},[36,36818,34642],{"class":42},[36,36820,36821],{"class":38,"line":19086},[36,36822,36823],{"class":2621},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,36825,36826],{"class":38,"line":19109},[36,36827,36828],{"class":2621},"    # 顺序不可改变\n",[36,36830,36831,36834,36836,36838,36841,36843,36846,36848,36851,36853,36856,36858,36861,36863,36866,36868,36871,36873,36876,36878,36881,36883,36886],{"class":38,"line":19131},[36,36832,36833],{"class":42},"    classes",[36,36835,47],{"class":46},[36,36837,3444],{"class":42},[36,36839,36840],{"class":50},"'T-shirt\u002Ftop'",[36,36842,2934],{"class":42},[36,36844,36845],{"class":50},"'Trouser'",[36,36847,2934],{"class":42},[36,36849,36850],{"class":50},"'Pullover'",[36,36852,2934],{"class":42},[36,36854,36855],{"class":50},"'Dress'",[36,36857,2934],{"class":42},[36,36859,36860],{"class":50},"'Coat'",[36,36862,2934],{"class":42},[36,36864,36865],{"class":50},"'Sandal'",[36,36867,2934],{"class":42},[36,36869,36870],{"class":50},"'Shirt'",[36,36872,2934],{"class":42},[36,36874,36875],{"class":50},"'Sneaker'",[36,36877,2934],{"class":42},[36,36879,36880],{"class":50},"'Bag'",[36,36882,2934],{"class":42},[36,36884,36885],{"class":50},"'Ankle boot'",[36,36887,35598],{"class":42},[36,36889,36890,36892],{"class":38,"line":19136},[36,36891,36530],{"class":46},[36,36893,35236],{"class":42},[36,36895,36896],{"class":38,"line":19142},[36,36897,36898],{"class":2621},"        # 将数据和标签都放到设备当中\n",[36,36900,36901,36903,36906,36908],{"class":38,"line":19156},[36,36902,5788],{"class":46},[36,36904,36905],{"class":42}," b_x,b_y ",[36,36907,28413],{"class":46},[36,36909,36549],{"class":42},[36,36911,36912,36914,36916],{"class":38,"line":19169},[36,36913,34962],{"class":42},[36,36915,47],{"class":46},[36,36917,34967],{"class":42},[36,36919,36920,36922,36924],{"class":38,"line":19174},[36,36921,34977],{"class":42},[36,36923,47],{"class":46},[36,36925,34982],{"class":42},[36,36927,36928],{"class":38,"line":19188},[36,36929,70],{"emptyLinePlaceholder":69},[36,36931,36932],{"class":38,"line":19193},[36,36933,36934],{"class":2621},"            # 设置模型为验证模式\n",[36,36936,36937],{"class":38,"line":19199},[36,36938,35227],{"class":42},[36,36940,36941],{"class":38,"line":19204},[36,36942,36943],{"class":2621},"            # 模型推理结果\n",[36,36945,36946,36948,36950],{"class":38,"line":19218},[36,36947,35012],{"class":42},[36,36949,47],{"class":46},[36,36951,35017],{"class":42},[36,36953,36954],{"class":38,"line":19223},[36,36955,36956],{"class":2621},"            # 获取最大下标，最大下标就是类别号\n",[36,36958,36959,36961,36963,36965,36967,36969,36971],{"class":38,"line":19228},[36,36960,35029],{"class":42},[36,36962,47],{"class":46},[36,36964,35034],{"class":42},[36,36966,35037],{"class":7598},[36,36968,47],{"class":46},[36,36970,1906],{"class":62},[36,36972,123],{"class":42},[36,36974,36975],{"class":38,"line":19242},[36,36976,36977],{"class":2621},"            # 取出张量中的数值\n",[36,36979,36980,36983,36985],{"class":38,"line":19254},[36,36981,36982],{"class":42},"            result",[36,36984,47],{"class":46},[36,36986,36987],{"class":42},"pre_lab.item()\n",[36,36989,36990,36993,36995],{"class":38,"line":19259},[36,36991,36992],{"class":42},"            label",[36,36994,47],{"class":46},[36,36996,36997],{"class":42},"b_y.item()\n",[36,36999,37000,37002,37004,37007,37010,37013,37015,37018],{"class":38,"line":19272},[36,37001,906],{"class":62},[36,37003,92],{"class":42},[36,37005,37006],{"class":50},"\"预测值：\"",[36,37008,37009],{"class":42},",classes[result],",[36,37011,37012],{"class":50},"\"------\"",[36,37014,2934],{"class":42},[36,37016,37017],{"class":50},"\"真实值：\"",[36,37019,37020],{"class":42},",classes[label])\n",[19,37022,37023],{},"（2）AlexNet",[650,37025,37026],{},[653,37027,37028],{},"神经网络构建",[26,37030,37032],{"className":28,"code":37031,"language":30,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[33,37033,37034,37040,37050,37060,37072,37076,37093,37101,37116,37128,37170,37197,37240,37266,37310,37353,37396,37423,37427,37437,37442,37470,37489,37508,37512,37517,37525,37540,37550,37564,37574,37589,37604,37619,37630,37634,37639,37649,37664,37669,37683,37698,37710,37715,37726,37731,37737,37742,37754,37774,37779,37788],{"__ignoreMap":31},[36,37035,37036,37038],{"class":38,"line":39},[36,37037,1943],{"class":46},[36,37039,32761],{"class":42},[36,37041,37042,37044,37046,37048],{"class":38,"line":54},[36,37043,1937],{"class":46},[36,37045,33103],{"class":42},[36,37047,1943],{"class":46},[36,37049,33108],{"class":42},[36,37051,37052,37054,37056,37058],{"class":38,"line":66},[36,37053,1937],{"class":46},[36,37055,33120],{"class":42},[36,37057,1943],{"class":46},[36,37059,33125],{"class":42},[36,37061,37062,37064,37067,37069],{"class":38,"line":73},[36,37063,1943],{"class":46},[36,37065,37066],{"class":42}," torch.nn.functional ",[36,37068,33737],{"class":46},[36,37070,37071],{"class":42}," F\n",[36,37073,37074],{"class":38,"line":86},[36,37075,70],{"emptyLinePlaceholder":69},[36,37077,37078,37080,37083,37085,37087,37089,37091],{"class":38,"line":126},[36,37079,147],{"class":46},[36,37081,37082],{"class":79}," AlexNet",[36,37084,92],{"class":42},[36,37086,33141],{"class":79},[36,37088,3113],{"class":42},[36,37090,33146],{"class":79},[36,37092,1147],{"class":42},[36,37094,37095,37097,37099],{"class":38,"line":131},[36,37096,158],{"class":46},[36,37098,515],{"class":62},[36,37100,163],{"class":42},[36,37102,37103,37105,37108,37110,37112,37114],{"class":38,"line":225},[36,37104,1432],{"class":62},[36,37106,37107],{"class":42},"(AlexNet,",[36,37109,481],{"class":62},[36,37111,33183],{"class":42},[36,37113,494],{"class":62},[36,37115,4369],{"class":42},[36,37117,37118,37120,37123,37125],{"class":38,"line":235},[36,37119,523],{"class":62},[36,37121,37122],{"class":42},".ReLu",[36,37124,47],{"class":46},[36,37126,37127],{"class":42},"nn.ReLU()\n",[36,37129,37130,37132,37134,37136,37138,37140,37142,37144,37146,37148,37150,37152,37154,37156,37158,37160,37162,37164,37166,37168],{"class":38,"line":377},[36,37131,523],{"class":62},[36,37133,33203],{"class":42},[36,37135,47],{"class":46},[36,37137,33208],{"class":42},[36,37139,33211],{"class":7598},[36,37141,47],{"class":46},[36,37143,1906],{"class":62},[36,37145,2934],{"class":42},[36,37147,33220],{"class":7598},[36,37149,47],{"class":46},[36,37151,2769],{"class":62},[36,37153,2934],{"class":42},[36,37155,33229],{"class":7598},[36,37157,47],{"class":46},[36,37159,3028],{"class":62},[36,37161,2934],{"class":42},[36,37163,33284],{"class":7598},[36,37165,47],{"class":46},[36,37167,2850],{"class":62},[36,37169,123],{"class":42},[36,37171,37172,37174,37176,37178,37181,37183,37185,37187,37189,37191,37193,37195],{"class":38,"line":617},[36,37173,523],{"class":62},[36,37175,33268],{"class":42},[36,37177,47],{"class":46},[36,37179,37180],{"class":42},"nn.MaxPool2d(",[36,37182,33229],{"class":7598},[36,37184,47],{"class":46},[36,37186,2634],{"class":62},[36,37188,2934],{"class":42},[36,37190,33284],{"class":7598},[36,37192,47],{"class":46},[36,37194,1911],{"class":62},[36,37196,123],{"class":42},[36,37198,37199,37201,37203,37205,37207,37209,37211,37213,37215,37217,37219,37222,37224,37226,37228,37230,37232,37234,37236,37238],{"class":38,"line":643},[36,37200,523],{"class":62},[36,37202,33297],{"class":42},[36,37204,47],{"class":46},[36,37206,33208],{"class":42},[36,37208,33211],{"class":7598},[36,37210,47],{"class":46},[36,37212,2769],{"class":62},[36,37214,2934],{"class":42},[36,37216,33220],{"class":7598},[36,37218,47],{"class":46},[36,37220,37221],{"class":62},"256",[36,37223,2934],{"class":42},[36,37225,33229],{"class":7598},[36,37227,47],{"class":46},[36,37229,2875],{"class":62},[36,37231,2934],{"class":42},[36,37233,33238],{"class":7598},[36,37235,47],{"class":46},[36,37237,1911],{"class":62},[36,37239,123],{"class":42},[36,37241,37242,37244,37246,37248,37250,37252,37254,37256,37258,37260,37262,37264],{"class":38,"line":921},[36,37243,523],{"class":62},[36,37245,33332],{"class":42},[36,37247,47],{"class":46},[36,37249,37180],{"class":42},[36,37251,33229],{"class":7598},[36,37253,47],{"class":46},[36,37255,2634],{"class":62},[36,37257,2934],{"class":42},[36,37259,33284],{"class":7598},[36,37261,47],{"class":46},[36,37263,1911],{"class":62},[36,37265,123],{"class":42},[36,37267,37268,37270,37273,37275,37277,37279,37281,37283,37285,37287,37289,37292,37294,37296,37298,37300,37302,37304,37306,37308],{"class":38,"line":934},[36,37269,523],{"class":62},[36,37271,37272],{"class":42},".c5",[36,37274,47],{"class":46},[36,37276,33208],{"class":42},[36,37278,33211],{"class":7598},[36,37280,47],{"class":46},[36,37282,37221],{"class":62},[36,37284,2934],{"class":42},[36,37286,33220],{"class":7598},[36,37288,47],{"class":46},[36,37290,37291],{"class":62},"384",[36,37293,2934],{"class":42},[36,37295,33229],{"class":7598},[36,37297,47],{"class":46},[36,37299,2634],{"class":62},[36,37301,2934],{"class":42},[36,37303,33238],{"class":7598},[36,37305,47],{"class":46},[36,37307,1906],{"class":62},[36,37309,123],{"class":42},[36,37311,37312,37314,37317,37319,37321,37323,37325,37327,37329,37331,37333,37335,37337,37339,37341,37343,37345,37347,37349,37351],{"class":38,"line":939},[36,37313,523],{"class":62},[36,37315,37316],{"class":42},".c6",[36,37318,47],{"class":46},[36,37320,33208],{"class":42},[36,37322,33211],{"class":7598},[36,37324,47],{"class":46},[36,37326,37291],{"class":62},[36,37328,2934],{"class":42},[36,37330,33220],{"class":7598},[36,37332,47],{"class":46},[36,37334,37291],{"class":62},[36,37336,2934],{"class":42},[36,37338,33229],{"class":7598},[36,37340,47],{"class":46},[36,37342,2634],{"class":62},[36,37344,2934],{"class":42},[36,37346,33238],{"class":7598},[36,37348,47],{"class":46},[36,37350,1906],{"class":62},[36,37352,123],{"class":42},[36,37354,37355,37357,37360,37362,37364,37366,37368,37370,37372,37374,37376,37378,37380,37382,37384,37386,37388,37390,37392,37394],{"class":38,"line":949},[36,37356,523],{"class":62},[36,37358,37359],{"class":42},".c7",[36,37361,47],{"class":46},[36,37363,33208],{"class":42},[36,37365,33211],{"class":7598},[36,37367,47],{"class":46},[36,37369,37291],{"class":62},[36,37371,2934],{"class":42},[36,37373,33220],{"class":7598},[36,37375,47],{"class":46},[36,37377,37221],{"class":62},[36,37379,2934],{"class":42},[36,37381,33229],{"class":7598},[36,37383,47],{"class":46},[36,37385,2634],{"class":62},[36,37387,2934],{"class":42},[36,37389,33238],{"class":7598},[36,37391,47],{"class":46},[36,37393,1906],{"class":62},[36,37395,123],{"class":42},[36,37397,37398,37400,37403,37405,37407,37409,37411,37413,37415,37417,37419,37421],{"class":38,"line":962},[36,37399,523],{"class":62},[36,37401,37402],{"class":42},".s8",[36,37404,47],{"class":46},[36,37406,37180],{"class":42},[36,37408,33229],{"class":7598},[36,37410,47],{"class":46},[36,37412,2634],{"class":62},[36,37414,2934],{"class":42},[36,37416,33284],{"class":7598},[36,37418,47],{"class":46},[36,37420,1911],{"class":62},[36,37422,123],{"class":42},[36,37424,37425],{"class":38,"line":974},[36,37426,33357],{"class":2621},[36,37428,37429,37431,37433,37435],{"class":38,"line":979},[36,37430,523],{"class":62},[36,37432,33364],{"class":42},[36,37434,47],{"class":46},[36,37436,33369],{"class":42},[36,37438,37439],{"class":38,"line":994},[36,37440,37441],{"class":2621},"       # 定义全连接层\n",[36,37443,37444,37446,37449,37451,37453,37455,37457,37459,37461,37463,37465,37468],{"class":38,"line":1006},[36,37445,523],{"class":62},[36,37447,37448],{"class":42},".f1",[36,37450,47],{"class":46},[36,37452,33386],{"class":42},[36,37454,2900],{"class":62},[36,37456,3011],{"class":46},[36,37458,2900],{"class":62},[36,37460,3011],{"class":46},[36,37462,37221],{"class":62},[36,37464,2934],{"class":42},[36,37466,37467],{"class":62},"4096",[36,37469,123],{"class":42},[36,37471,37472,37474,37477,37479,37481,37483,37485,37487],{"class":38,"line":1011},[36,37473,523],{"class":62},[36,37475,37476],{"class":42},".f2",[36,37478,47],{"class":46},[36,37480,33386],{"class":42},[36,37482,37467],{"class":62},[36,37484,2934],{"class":42},[36,37486,37467],{"class":62},[36,37488,123],{"class":42},[36,37490,37491,37493,37496,37498,37500,37502,37504,37506],{"class":38,"line":1023},[36,37492,523],{"class":62},[36,37494,37495],{"class":42},".f3",[36,37497,47],{"class":46},[36,37499,33386],{"class":42},[36,37501,37467],{"class":62},[36,37503,2934],{"class":42},[36,37505,3002],{"class":62},[36,37507,123],{"class":42},[36,37509,37510],{"class":38,"line":1028},[36,37511,70],{"emptyLinePlaceholder":69},[36,37513,37514],{"class":38,"line":1033},[36,37515,37516],{"class":2621},"    # 定义前向传播\n",[36,37518,37519,37521,37523],{"class":38,"line":1053},[36,37520,158],{"class":46},[36,37522,33448],{"class":79},[36,37524,33451],{"class":42},[36,37526,37527,37529,37531,37533,37536,37538],{"class":38,"line":1064},[36,37528,33456],{"class":42},[36,37530,47],{"class":46},[36,37532,481],{"class":62},[36,37534,37535],{"class":42},".ReLu(",[36,37537,481],{"class":62},[36,37539,33468],{"class":42},[36,37541,37542,37544,37546,37548],{"class":38,"line":1075},[36,37543,33456],{"class":42},[36,37545,47],{"class":46},[36,37547,481],{"class":62},[36,37549,33479],{"class":42},[36,37551,37552,37554,37556,37558,37560,37562],{"class":38,"line":2291},[36,37553,33456],{"class":42},[36,37555,47],{"class":46},[36,37557,481],{"class":62},[36,37559,37535],{"class":42},[36,37561,481],{"class":62},[36,37563,33494],{"class":42},[36,37565,37566,37568,37570,37572],{"class":38,"line":2329},[36,37567,33456],{"class":42},[36,37569,47],{"class":46},[36,37571,481],{"class":62},[36,37573,33505],{"class":42},[36,37575,37576,37578,37580,37582,37584,37586],{"class":38,"line":2334},[36,37577,33456],{"class":42},[36,37579,47],{"class":46},[36,37581,481],{"class":62},[36,37583,37535],{"class":42},[36,37585,481],{"class":62},[36,37587,37588],{"class":42},".c5(x))\n",[36,37590,37591,37593,37595,37597,37599,37601],{"class":38,"line":2339},[36,37592,33456],{"class":42},[36,37594,47],{"class":46},[36,37596,481],{"class":62},[36,37598,37535],{"class":42},[36,37600,481],{"class":62},[36,37602,37603],{"class":42},".c6(x))\n",[36,37605,37606,37608,37610,37612,37614,37616],{"class":38,"line":2365},[36,37607,33456],{"class":42},[36,37609,47],{"class":46},[36,37611,481],{"class":62},[36,37613,37535],{"class":42},[36,37615,481],{"class":62},[36,37617,37618],{"class":42},".c7(x))\n",[36,37620,37621,37623,37625,37627],{"class":38,"line":2373},[36,37622,33456],{"class":42},[36,37624,47],{"class":46},[36,37626,481],{"class":62},[36,37628,37629],{"class":42},".s8(x)\n",[36,37631,37632],{"class":38,"line":5001},[36,37633,70],{"emptyLinePlaceholder":69},[36,37635,37636],{"class":38,"line":5006},[36,37637,37638],{"class":2621},"        # 展平加线性全连接层\n",[36,37640,37641,37643,37645,37647],{"class":38,"line":10328},[36,37642,33456],{"class":42},[36,37644,47],{"class":46},[36,37646,481],{"class":62},[36,37648,33516],{"class":42},[36,37650,37651,37653,37655,37657,37659,37661],{"class":38,"line":10352},[36,37652,33456],{"class":42},[36,37654,47],{"class":46},[36,37656,481],{"class":62},[36,37658,37535],{"class":42},[36,37660,481],{"class":62},[36,37662,37663],{"class":42},".f1(x))\n",[36,37665,37666],{"class":38,"line":10357},[36,37667,37668],{"class":2621},"        # 还需要dropout对神经元随机进行失活\n",[36,37670,37671,37673,37675,37678,37681],{"class":38,"line":10363},[36,37672,33456],{"class":42},[36,37674,47],{"class":46},[36,37676,37677],{"class":42},"F.dropout(x,",[36,37679,37680],{"class":62},"0.5",[36,37682,123],{"class":42},[36,37684,37685,37687,37689,37691,37693,37695],{"class":38,"line":10390},[36,37686,33456],{"class":42},[36,37688,47],{"class":46},[36,37690,481],{"class":62},[36,37692,37535],{"class":42},[36,37694,481],{"class":62},[36,37696,37697],{"class":42},".f2(x))\n",[36,37699,37700,37702,37704,37706,37708],{"class":38,"line":10395},[36,37701,33456],{"class":42},[36,37703,47],{"class":46},[36,37705,37677],{"class":42},[36,37707,37680],{"class":62},[36,37709,123],{"class":42},[36,37711,37712],{"class":38,"line":10401},[36,37713,37714],{"class":2621},"        # 直接输出\n",[36,37716,37717,37719,37721,37723],{"class":38,"line":10413},[36,37718,33456],{"class":42},[36,37720,47],{"class":46},[36,37722,481],{"class":62},[36,37724,37725],{"class":42},".f3(x)\n",[36,37727,37728],{"class":38,"line":10425},[36,37729,37730],{"class":2621},"        # 前向传播输出\n",[36,37732,37733,37735],{"class":38,"line":10437},[36,37734,736],{"class":46},[36,37736,33564],{"class":42},[36,37738,37739],{"class":38,"line":12095},[36,37740,37741],{"class":2621},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,37743,37744,37746,37748,37750,37752],{"class":38,"line":12120},[36,37745,3948],{"class":46},[36,37747,33575],{"class":62},[36,37749,5334],{"class":46},[36,37751,33580],{"class":50},[36,37753,153],{"class":42},[36,37755,37756,37758,37760,37762,37764,37766,37768,37770,37772],{"class":38,"line":12143},[36,37757,33592],{"class":42},[36,37759,47],{"class":46},[36,37761,32816],{"class":42},[36,37763,33599],{"class":50},[36,37765,4108],{"class":46},[36,37767,33604],{"class":42},[36,37769,4105],{"class":46},[36,37771,32841],{"class":50},[36,37773,123],{"class":42},[36,37775,37776],{"class":38,"line":12167},[36,37777,37778],{"class":2621},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,37780,37781,37783,37785],{"class":38,"line":12172},[36,37782,33644],{"class":42},[36,37784,47],{"class":46},[36,37786,37787],{"class":42},"AlexNet().to(device)\n",[36,37789,37790,37792,37794,37796,37798,37801,37803,37805],{"class":38,"line":12177},[36,37791,89],{"class":62},[36,37793,33656],{"class":42},[36,37795,1906],{"class":62},[36,37797,2934],{"class":42},[36,37799,37800],{"class":62},"227",[36,37802,2934],{"class":42},[36,37804,37800],{"class":62},[36,37806,33669],{"class":42},[650,37808,37809],{"start":54},[653,37810,33682],{},[26,37812,37814],{"className":28,"code":37813,"language":30,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[33,37815,37816,37822,37828,37838,37844,37854,37864,37874,37884,37894,37898,37909,37919,37923,37927,37931,37939,37951,37961,37977,37987,38019,38033,38043,38053,38057,38067,38081,38091,38101,38111,38117,38121,38125,38129,38133,38137,38145,38165,38169,38173,38177,38181,38185,38201,38205,38209,38217,38221,38225,38233,38237,38241,38245,38253,38257,38261,38265,38269,38277,38281,38289,38293,38301,38305,38313,38317,38325,38329,38333,38341,38345,38349,38353,38365,38389,38403,38407,38411,38415,38423,38427,38435,38439,38447,38451,38459,38463,38471,38475,38483,38487,38499,38503,38511,38515,38523,38527,38531,38535,38539,38547,38551,38567,38571,38579,38583,38587,38591,38595,38599,38603,38607,38623,38627,38639,38643,38655,38659,38671,38675,38683,38687,38695,38699,38703,38708,38714,38718,38727,38731,38748,38752,38761,38765,38783,38796,38801,38814,38818,38822,38830,38834,38838,38846,38850,38858,38862,38870,38874,38878,38920,38962,38966,38970,38986,38990,39006,39010,39014,39022,39026,39030,39042,39080,39085,39090,39099,39103,39117,39127,39133,39139,39145,39151,39155,39159,39165,39169,39173,39181,39185,39203,39207,39211,39215,39231,39235,39239,39243,39247,39251,39271,39291,39295,39299,39303,39311,39319,39323,39339,39359,39379,39383,39387,39395,39403,39407,39411,39415,39427,39431,39441,39449,39466],{"__ignoreMap":31},[36,37817,37818,37820],{"class":38,"line":39},[36,37819,1943],{"class":46},[36,37821,34176],{"class":42},[36,37823,37824,37826],{"class":38,"line":54},[36,37825,1943],{"class":46},[36,37827,34183],{"class":42},[36,37829,37830,37832,37834,37836],{"class":38,"line":66},[36,37831,1943],{"class":46},[36,37833,34194],{"class":42},[36,37835,33737],{"class":46},[36,37837,34199],{"class":42},[36,37839,37840,37842],{"class":38,"line":73},[36,37841,1943],{"class":46},[36,37843,32761],{"class":42},[36,37845,37846,37848,37850,37852],{"class":38,"line":86},[36,37847,1937],{"class":46},[36,37849,33769],{"class":42},[36,37851,1943],{"class":46},[36,37853,34216],{"class":42},[36,37855,37856,37858,37860,37862],{"class":38,"line":126},[36,37857,1937],{"class":46},[36,37859,33722],{"class":42},[36,37861,1943],{"class":46},[36,37863,33727],{"class":42},[36,37865,37866,37868,37870,37872],{"class":38,"line":131},[36,37867,1937],{"class":46},[36,37869,33752],{"class":42},[36,37871,1943],{"class":46},[36,37873,33757],{"class":42},[36,37875,37876,37878,37880,37882],{"class":38,"line":225},[36,37877,1943],{"class":46},[36,37879,33769],{"class":42},[36,37881,33737],{"class":46},[36,37883,33774],{"class":42},[36,37885,37886,37888,37890,37892],{"class":38,"line":235},[36,37887,1943],{"class":46},[36,37889,33786],{"class":42},[36,37891,33737],{"class":46},[36,37893,33791],{"class":42},[36,37895,37896],{"class":38,"line":377},[36,37897,34261],{"class":2621},[36,37899,37900,37902,37904,37906],{"class":38,"line":617},[36,37901,1937],{"class":46},[36,37903,34268],{"class":42},[36,37905,1943],{"class":46},[36,37907,37908],{"class":42}," AlexNet\n",[36,37910,37911,37913,37915,37917],{"class":38,"line":643},[36,37912,1937],{"class":46},[36,37914,33103],{"class":42},[36,37916,1943],{"class":46},[36,37918,33108],{"class":42},[36,37920,37921],{"class":38,"line":921},[36,37922,70],{"emptyLinePlaceholder":69},[36,37924,37925],{"class":38,"line":934},[36,37926,70],{"emptyLinePlaceholder":69},[36,37928,37929],{"class":38,"line":939},[36,37930,34296],{"class":2621},[36,37932,37933,37935,37937],{"class":38,"line":949},[36,37934,76],{"class":46},[36,37936,34303],{"class":79},[36,37938,34306],{"class":42},[36,37940,37941,37943,37945,37947,37949],{"class":38,"line":962},[36,37942,34311],{"class":42},[36,37944,47],{"class":46},[36,37946,33809],{"class":42},[36,37948,33817],{"class":50},[36,37950,33820],{"class":42},[36,37952,37953,37955,37957,37959],{"class":38,"line":974},[36,37954,34324],{"class":7598},[36,37956,47],{"class":46},[36,37958,33830],{"class":62},[36,37960,33820],{"class":42},[36,37962,37963,37965,37967,37969,37971,37973,37975],{"class":38,"line":979},[36,37964,34335],{"class":7598},[36,37966,47],{"class":46},[36,37968,33847],{"class":42},[36,37970,33850],{"class":7598},[36,37972,47],{"class":46},[36,37974,37800],{"class":62},[36,37976,33858],{"class":42},[36,37978,37979,37981,37983,37985],{"class":38,"line":994},[36,37980,34352],{"class":7598},[36,37982,47],{"class":46},[36,37984,33830],{"class":62},[36,37986,123],{"class":42},[36,37988,37989,37991,37993,37995,37997,37999,38001,38003,38005,38007,38009,38011,38013,38015,38017],{"class":38,"line":1006},[36,37990,34363],{"class":42},[36,37992,47],{"class":46},[36,37994,34368],{"class":42},[36,37996,34371],{"class":62},[36,37998,92],{"class":42},[36,38000,34376],{"class":62},[36,38002,3011],{"class":46},[36,38004,9739],{"class":62},[36,38006,34383],{"class":42},[36,38008,34371],{"class":62},[36,38010,92],{"class":42},[36,38012,34390],{"class":62},[36,38014,3011],{"class":46},[36,38016,9739],{"class":62},[36,38018,34397],{"class":42},[36,38020,38021,38023,38025,38027,38029,38031],{"class":38,"line":1011},[36,38022,34402],{"class":42},[36,38024,47],{"class":46},[36,38026,34407],{"class":42},[36,38028,33891],{"class":7598},[36,38030,47],{"class":46},[36,38032,33896],{"class":42},[36,38034,38035,38037,38039,38041],{"class":38,"line":1023},[36,38036,34418],{"class":7598},[36,38038,47],{"class":46},[36,38040,34423],{"class":62},[36,38042,33820],{"class":42},[36,38044,38045,38047,38049,38051],{"class":38,"line":1028},[36,38046,34430],{"class":7598},[36,38048,47],{"class":46},[36,38050,33830],{"class":62},[36,38052,33820],{"class":42},[36,38054,38055],{"class":38,"line":1033},[36,38056,34441],{"class":2621},[36,38058,38059,38061,38063,38065],{"class":38,"line":1053},[36,38060,34446],{"class":7598},[36,38062,47],{"class":46},[36,38064,2951],{"class":62},[36,38066,123],{"class":42},[36,38068,38069,38071,38073,38075,38077,38079],{"class":38,"line":1064},[36,38070,34457],{"class":42},[36,38072,47],{"class":46},[36,38074,33888],{"class":42},[36,38076,33891],{"class":7598},[36,38078,47],{"class":46},[36,38080,34468],{"class":42},[36,38082,38083,38085,38087,38089],{"class":38,"line":1075},[36,38084,34473],{"class":7598},[36,38086,47],{"class":46},[36,38088,34423],{"class":62},[36,38090,33820],{"class":42},[36,38092,38093,38095,38097,38099],{"class":38,"line":2291},[36,38094,34484],{"class":7598},[36,38096,47],{"class":46},[36,38098,33830],{"class":62},[36,38100,33820],{"class":42},[36,38102,38103,38105,38107,38109],{"class":38,"line":2329},[36,38104,34495],{"class":7598},[36,38106,47],{"class":46},[36,38108,2951],{"class":62},[36,38110,123],{"class":42},[36,38112,38113,38115],{"class":38,"line":2334},[36,38114,6474],{"class":46},[36,38116,34508],{"class":42},[36,38118,38119],{"class":38,"line":2339},[36,38120,70],{"emptyLinePlaceholder":69},[36,38122,38123],{"class":38,"line":2365},[36,38124,34517],{"class":2621},[36,38126,38127],{"class":38,"line":2373},[36,38128,34522],{"class":2621},[36,38130,38131],{"class":38,"line":5001},[36,38132,70],{"emptyLinePlaceholder":69},[36,38134,38135],{"class":38,"line":5006},[36,38136,34531],{"class":2621},[36,38138,38139,38141,38143],{"class":38,"line":10328},[36,38140,76],{"class":46},[36,38142,34538],{"class":79},[36,38144,34541],{"class":42},[36,38146,38147,38149,38151,38153,38155,38157,38159,38161,38163],{"class":38,"line":10352},[36,38148,33592],{"class":42},[36,38150,47],{"class":46},[36,38152,32816],{"class":42},[36,38154,33599],{"class":50},[36,38156,4108],{"class":46},[36,38158,33604],{"class":42},[36,38160,4105],{"class":46},[36,38162,34560],{"class":50},[36,38164,123],{"class":42},[36,38166,38167],{"class":38,"line":10357},[36,38168,70],{"emptyLinePlaceholder":69},[36,38170,38171],{"class":38,"line":10363},[36,38172,70],{"emptyLinePlaceholder":69},[36,38174,38175],{"class":38,"line":10390},[36,38176,34575],{"class":2621},[36,38178,38179],{"class":38,"line":10395},[36,38180,34580],{"class":2621},[36,38182,38183],{"class":38,"line":10401},[36,38184,34585],{"class":2621},[36,38186,38187,38189,38191,38193,38195,38197,38199],{"class":38,"line":10413},[36,38188,34590],{"class":42},[36,38190,47],{"class":46},[36,38192,34595],{"class":42},[36,38194,34598],{"class":7598},[36,38196,47],{"class":46},[36,38198,34603],{"class":62},[36,38200,123],{"class":42},[36,38202,38203],{"class":38,"line":10425},[36,38204,70],{"emptyLinePlaceholder":69},[36,38206,38207],{"class":38,"line":10437},[36,38208,34614],{"class":2621},[36,38210,38211,38213,38215],{"class":38,"line":12095},[36,38212,34619],{"class":42},[36,38214,47],{"class":46},[36,38216,34624],{"class":42},[36,38218,38219],{"class":38,"line":12120},[36,38220,70],{"emptyLinePlaceholder":69},[36,38222,38223],{"class":38,"line":12143},[36,38224,34633],{"class":2621},[36,38226,38227,38229,38231],{"class":38,"line":12167},[36,38228,33644],{"class":42},[36,38230,47],{"class":46},[36,38232,34642],{"class":42},[36,38234,38235],{"class":38,"line":12172},[36,38236,34647],{"class":2621},[36,38238,38239],{"class":38,"line":12177},[36,38240,34652],{"class":2621},[36,38242,38243],{"class":38,"line":12182},[36,38244,34657],{"class":2621},[36,38246,38247,38249,38251],{"class":38,"line":12191},[36,38248,34662],{"class":42},[36,38250,47],{"class":46},[36,38252,34667],{"class":42},[36,38254,38255],{"class":38,"line":12196},[36,38256,70],{"emptyLinePlaceholder":69},[36,38258,38259],{"class":38,"line":12202},[36,38260,70],{"emptyLinePlaceholder":69},[36,38262,38263],{"class":38,"line":12223},[36,38264,34680],{"class":2621},[36,38266,38267],{"class":38,"line":12229},[36,38268,34685],{"class":2621},[36,38270,38271,38273,38275],{"class":38,"line":12243},[36,38272,34690],{"class":42},[36,38274,47],{"class":46},[36,38276,34695],{"class":62},[36,38278,38279],{"class":38,"line":12249},[36,38280,34700],{"class":2621},[36,38282,38283,38285,38287],{"class":38,"line":12276},[36,38284,34705],{"class":42},[36,38286,47],{"class":46},[36,38288,34710],{"class":42},[36,38290,38291],{"class":38,"line":12285},[36,38292,34715],{"class":2621},[36,38294,38295,38297,38299],{"class":38,"line":12291},[36,38296,34720],{"class":42},[36,38298,47],{"class":46},[36,38300,34710],{"class":42},[36,38302,38303],{"class":38,"line":12299},[36,38304,34729],{"class":2621},[36,38306,38307,38309,38311],{"class":38,"line":12304},[36,38308,34734],{"class":42},[36,38310,47],{"class":46},[36,38312,34710],{"class":42},[36,38314,38315],{"class":38,"line":18977},[36,38316,34743],{"class":2621},[36,38318,38319,38321,38323],{"class":38,"line":18983},[36,38320,34748],{"class":42},[36,38322,47],{"class":46},[36,38324,34710],{"class":42},[36,38326,38327],{"class":38,"line":19006},[36,38328,70],{"emptyLinePlaceholder":69},[36,38330,38331],{"class":38,"line":19012},[36,38332,34761],{"class":2621},[36,38334,38335,38337,38339],{"class":38,"line":19035},[36,38336,34766],{"class":42},[36,38338,47],{"class":46},[36,38340,34771],{"class":42},[36,38342,38343],{"class":38,"line":19049},[36,38344,70],{"emptyLinePlaceholder":69},[36,38346,38347],{"class":38,"line":19069},[36,38348,70],{"emptyLinePlaceholder":69},[36,38350,38351],{"class":38,"line":19075},[36,38352,34784],{"class":2621},[36,38354,38355,38357,38359,38361,38363],{"class":38,"line":19086},[36,38356,5586],{"class":46},[36,38358,34791],{"class":42},[36,38360,28413],{"class":46},[36,38362,34796],{"class":62},[36,38364,34799],{"class":42},[36,38366,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387],{"class":38,"line":19109},[36,38368,168],{"class":62},[36,38370,92],{"class":42},[36,38372,34808],{"class":50},[36,38374,34811],{"class":62},[36,38376,3139],{"class":50},[36,38378,34811],{"class":62},[36,38380,604],{"class":50},[36,38382,34820],{"class":42},[36,38384,3087],{"class":46},[36,38386,1906],{"class":62},[36,38388,1914],{"class":42},[36,38390,38391,38393,38395,38397,38399,38401],{"class":38,"line":19131},[36,38392,168],{"class":62},[36,38394,92],{"class":42},[36,38396,34835],{"class":50},[36,38398,3011],{"class":46},[36,38400,3002],{"class":62},[36,38402,123],{"class":42},[36,38404,38405],{"class":38,"line":19136},[36,38406,70],{"emptyLinePlaceholder":69},[36,38408,38409],{"class":38,"line":19142},[36,38410,34850],{"class":2621},[36,38412,38413],{"class":38,"line":19156},[36,38414,34855],{"class":2621},[36,38416,38417,38419,38421],{"class":38,"line":19169},[36,38418,34860],{"class":42},[36,38420,47],{"class":46},[36,38422,34695],{"class":62},[36,38424,38425],{"class":38,"line":19174},[36,38426,34869],{"class":2621},[36,38428,38429,38431,38433],{"class":38,"line":19188},[36,38430,34874],{"class":42},[36,38432,47],{"class":46},[36,38434,5470],{"class":62},[36,38436,38437],{"class":38,"line":19193},[36,38438,34883],{"class":2621},[36,38440,38441,38443,38445],{"class":38,"line":19199},[36,38442,34888],{"class":42},[36,38444,47],{"class":46},[36,38446,34695],{"class":62},[36,38448,38449],{"class":38,"line":19204},[36,38450,34897],{"class":2621},[36,38452,38453,38455,38457],{"class":38,"line":19218},[36,38454,34902],{"class":42},[36,38456,47],{"class":46},[36,38458,5470],{"class":62},[36,38460,38461],{"class":38,"line":19223},[36,38462,34911],{"class":2621},[36,38464,38465,38467,38469],{"class":38,"line":19228},[36,38466,34916],{"class":42},[36,38468,47],{"class":46},[36,38470,5470],{"class":62},[36,38472,38473],{"class":38,"line":19242},[36,38474,34925],{"class":2621},[36,38476,38477,38479,38481],{"class":38,"line":19254},[36,38478,34930],{"class":42},[36,38480,47],{"class":46},[36,38482,5470],{"class":62},[36,38484,38485],{"class":38,"line":19259},[36,38486,34939],{"class":2621},[36,38488,38489,38491,38493,38495,38497],{"class":38,"line":19272},[36,38490,5788],{"class":46},[36,38492,33955],{"class":42},[36,38494,28413],{"class":46},[36,38496,33960],{"class":62},[36,38498,34952],{"class":42},[36,38500,38501],{"class":38,"line":19277},[36,38502,34957],{"class":2621},[36,38504,38505,38507,38509],{"class":38,"line":19282},[36,38506,34962],{"class":42},[36,38508,47],{"class":46},[36,38510,34967],{"class":42},[36,38512,38513],{"class":38,"line":19287},[36,38514,34972],{"class":2621},[36,38516,38517,38519,38521],{"class":38,"line":19300},[36,38518,34977],{"class":42},[36,38520,47],{"class":46},[36,38522,34982],{"class":42},[36,38524,38525],{"class":38,"line":19305},[36,38526,34988],{"class":2621},[36,38528,38529],{"class":38,"line":34985},[36,38530,34994],{"class":42},[36,38532,38533],{"class":38,"line":34991},[36,38534,35000],{"class":2621},[36,38536,38537],{"class":38,"line":34997},[36,38538,35006],{"class":2621},[36,38540,38541,38543,38545],{"class":38,"line":35003},[36,38542,35012],{"class":42},[36,38544,47],{"class":46},[36,38546,35017],{"class":42},[36,38548,38549],{"class":38,"line":35009},[36,38550,35023],{"class":2621},[36,38552,38553,38555,38557,38559,38561,38563,38565],{"class":38,"line":35020},[36,38554,35029],{"class":42},[36,38556,47],{"class":46},[36,38558,35034],{"class":42},[36,38560,35037],{"class":7598},[36,38562,47],{"class":46},[36,38564,1906],{"class":62},[36,38566,123],{"class":42},[36,38568,38569],{"class":38,"line":35026},[36,38570,35049],{"class":2621},[36,38572,38573,38575,38577],{"class":38,"line":35046},[36,38574,35055],{"class":42},[36,38576,47],{"class":46},[36,38578,35060],{"class":42},[36,38580,38581],{"class":38,"line":35052},[36,38582,35066],{"class":2621},[36,38584,38585],{"class":38,"line":35063},[36,38586,35072],{"class":42},[36,38588,38589],{"class":38,"line":35069},[36,38590,35078],{"class":2621},[36,38592,38593],{"class":38,"line":35075},[36,38594,35084],{"class":42},[36,38596,38597],{"class":38,"line":35081},[36,38598,35090],{"class":2621},[36,38600,38601],{"class":38,"line":35087},[36,38602,35096],{"class":42},[36,38604,38605],{"class":38,"line":35093},[36,38606,35102],{"class":2621},[36,38608,38609,38611,38613,38615,38617,38619,38621],{"class":38,"line":35099},[36,38610,35108],{"class":42},[36,38612,928],{"class":46},[36,38614,35113],{"class":42},[36,38616,3011],{"class":46},[36,38618,35118],{"class":42},[36,38620,2751],{"class":62},[36,38622,123],{"class":42},[36,38624,38625],{"class":38,"line":35105},[36,38626,35128],{"class":2621},[36,38628,38629,38631,38633,38635,38637],{"class":38,"line":35125},[36,38630,35134],{"class":42},[36,38632,928],{"class":46},[36,38634,35139],{"class":42},[36,38636,5334],{"class":46},[36,38638,35144],{"class":42},[36,38640,38641],{"class":38,"line":35131},[36,38642,35150],{"class":2621},[36,38644,38645,38647,38649,38651,38653],{"class":38,"line":35147},[36,38646,35156],{"class":42},[36,38648,928],{"class":46},[36,38650,35118],{"class":42},[36,38652,2751],{"class":62},[36,38654,123],{"class":42},[36,38656,38657],{"class":38,"line":35153},[36,38658,35170],{"class":2621},[36,38660,38661,38663,38665,38667,38669],{"class":38,"line":35167},[36,38662,5788],{"class":46},[36,38664,35178],{"class":42},[36,38666,28413],{"class":46},[36,38668,33960],{"class":62},[36,38670,35185],{"class":42},[36,38672,38673],{"class":38,"line":35173},[36,38674,35191],{"class":2621},[36,38676,38677,38679,38681],{"class":38,"line":35188},[36,38678,34962],{"class":42},[36,38680,47],{"class":46},[36,38682,34967],{"class":42},[36,38684,38685],{"class":38,"line":35194},[36,38686,35206],{"class":2621},[36,38688,38689,38691,38693],{"class":38,"line":35203},[36,38690,34977],{"class":42},[36,38692,47],{"class":46},[36,38694,34982],{"class":42},[36,38696,38697],{"class":38,"line":35209},[36,38698,35221],{"class":2621},[36,38700,38701],{"class":38,"line":35218},[36,38702,35227],{"class":42},[36,38704,38705],{"class":38,"line":35224},[36,38706,38707],{"class":2621},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,38709,38710,38712],{"class":38,"line":35230},[36,38711,35233],{"class":46},[36,38713,35236],{"class":42},[36,38715,38716],{"class":38,"line":35239},[36,38717,35242],{"class":2621},[36,38719,38720,38723,38725],{"class":38,"line":35245},[36,38721,38722],{"class":42},"                output",[36,38724,47],{"class":46},[36,38726,35017],{"class":42},[36,38728,38729],{"class":38,"line":35256},[36,38730,35259],{"class":2621},[36,38732,38733,38736,38738,38740,38742,38744,38746],{"class":38,"line":35262},[36,38734,38735],{"class":42},"                pre_lab",[36,38737,47],{"class":46},[36,38739,35034],{"class":42},[36,38741,35037],{"class":7598},[36,38743,47],{"class":46},[36,38745,1906],{"class":62},[36,38747,123],{"class":42},[36,38749,38750],{"class":38,"line":35281},[36,38751,35284],{"class":2621},[36,38753,38754,38757,38759],{"class":38,"line":35287},[36,38755,38756],{"class":42},"                val_batch_loss",[36,38758,47],{"class":46},[36,38760,35060],{"class":42},[36,38762,38763],{"class":38,"line":35298},[36,38764,35301],{"class":2621},[36,38766,38767,38770,38772,38775,38777,38779,38781],{"class":38,"line":35304},[36,38768,38769],{"class":42},"                val_loss",[36,38771,928],{"class":46},[36,38773,38774],{"class":42},"val_batch_loss.item()",[36,38776,3011],{"class":46},[36,38778,35118],{"class":42},[36,38780,2751],{"class":62},[36,38782,123],{"class":42},[36,38784,38785,38788,38790,38792,38794],{"class":38,"line":35324},[36,38786,38787],{"class":42},"                val_corrects",[36,38789,928],{"class":46},[36,38791,35139],{"class":42},[36,38793,5334],{"class":46},[36,38795,35144],{"class":42},[36,38797,38798],{"class":38,"line":35340},[36,38799,38800],{"class":2621},"            # 当前用于验证的样本数量\n",[36,38802,38803,38806,38808,38810,38812],{"class":38,"line":35346},[36,38804,38805],{"class":42},"            val_num",[36,38807,928],{"class":46},[36,38809,35118],{"class":42},[36,38811,2751],{"class":62},[36,38813,123],{"class":42},[36,38815,38816],{"class":38,"line":35360},[36,38817,35363],{"class":2621},[36,38819,38820],{"class":38,"line":35366},[36,38821,35369],{"class":2621},[36,38823,38824,38826,38828],{"class":38,"line":35372},[36,38825,35375],{"class":42},[36,38827,3139],{"class":46},[36,38829,35380],{"class":42},[36,38831,38832],{"class":38,"line":35383},[36,38833,35386],{"class":2621},[36,38835,38836],{"class":38,"line":35389},[36,38837,35392],{"class":2621},[36,38839,38840,38842,38844],{"class":38,"line":35395},[36,38841,35398],{"class":42},[36,38843,3139],{"class":46},[36,38845,35380],{"class":42},[36,38847,38848],{"class":38,"line":35405},[36,38849,35408],{"class":2621},[36,38851,38852,38854,38856],{"class":38,"line":35411},[36,38853,35414],{"class":42},[36,38855,3139],{"class":46},[36,38857,35419],{"class":42},[36,38859,38860],{"class":38,"line":35422},[36,38861,35425],{"class":2621},[36,38863,38864,38866,38868],{"class":38,"line":35428},[36,38865,35431],{"class":42},[36,38867,3139],{"class":46},[36,38869,35419],{"class":42},[36,38871,38872],{"class":38,"line":35438},[36,38873,70],{"emptyLinePlaceholder":69},[36,38875,38876],{"class":38,"line":35443},[36,38877,35446],{"class":2621},[36,38879,38880,38882,38884,38886,38888,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912,38914,38916,38918],{"class":38,"line":35449},[36,38881,168],{"class":62},[36,38883,92],{"class":42},[36,38885,5977],{"class":50},[36,38887,34811],{"class":62},[36,38889,35460],{"class":50},[36,38891,101],{"class":62},[36,38893,35465],{"class":46},[36,38895,107],{"class":62},[36,38897,35470],{"class":50},[36,38899,101],{"class":62},[36,38901,35465],{"class":46},[36,38903,107],{"class":62},[36,38905,5977],{"class":50},[36,38907,35481],{"class":42},[36,38909,3087],{"class":46},[36,38911,1906],{"class":62},[36,38913,35488],{"class":42},[36,38915,3087],{"class":46},[36,38917,1906],{"class":62},[36,38919,35495],{"class":42},[36,38921,38922,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960],{"class":38,"line":35498},[36,38923,168],{"class":62},[36,38925,92],{"class":42},[36,38927,5977],{"class":50},[36,38929,34811],{"class":62},[36,38931,35509],{"class":50},[36,38933,101],{"class":62},[36,38935,35465],{"class":46},[36,38937,107],{"class":62},[36,38939,35518],{"class":50},[36,38941,101],{"class":62},[36,38943,35465],{"class":46},[36,38945,107],{"class":62},[36,38947,5977],{"class":50},[36,38949,35529],{"class":42},[36,38951,3087],{"class":46},[36,38953,1906],{"class":62},[36,38955,35536],{"class":42},[36,38957,3087],{"class":46},[36,38959,1906],{"class":62},[36,38961,35495],{"class":42},[36,38963,38964],{"class":38,"line":35545},[36,38965,70],{"emptyLinePlaceholder":69},[36,38967,38968],{"class":38,"line":35550},[36,38969,35553],{"class":2621},[36,38971,38972,38974,38976,38978,38980,38982,38984],{"class":38,"line":35556},[36,38973,890],{"class":46},[36,38975,35561],{"class":42},[36,38977,3087],{"class":46},[36,38979,1906],{"class":62},[36,38981,3493],{"class":42},[36,38983,986],{"class":46},[36,38985,35572],{"class":42},[36,38987,38988],{"class":38,"line":35575},[36,38989,35578],{"class":2621},[36,38991,38992,38994,38996,38998,39000,39002,39004],{"class":38,"line":35581},[36,38993,35584],{"class":42},[36,38995,2605],{"class":62},[36,38997,47],{"class":46},[36,38999,35591],{"class":42},[36,39001,3087],{"class":46},[36,39003,1906],{"class":62},[36,39005,35598],{"class":42},[36,39007,39008],{"class":38,"line":35601},[36,39009,35604],{"class":2621},[36,39011,39012],{"class":38,"line":35607},[36,39013,35610],{"class":2621},[36,39015,39016,39018,39020],{"class":38,"line":35613},[36,39017,35616],{"class":42},[36,39019,47],{"class":46},[36,39021,34667],{"class":42},[36,39023,39024],{"class":38,"line":35623},[36,39025,70],{"emptyLinePlaceholder":69},[36,39027,39028],{"class":38,"line":35628},[36,39029,35631],{"class":2621},[36,39031,39032,39034,39036,39038,39040],{"class":38,"line":35634},[36,39033,35637],{"class":42},[36,39035,47],{"class":46},[36,39037,35642],{"class":42},[36,39039,3087],{"class":46},[36,39041,35647],{"class":42},[36,39043,39044,39046,39048,39050,39052,39054,39056,39058,39060,39062,39064,39066,39068,39070,39072,39074,39076,39078],{"class":38,"line":35650},[36,39045,168],{"class":62},[36,39047,92],{"class":42},[36,39049,35657],{"class":50},[36,39051,101],{"class":62},[36,39053,35662],{"class":46},[36,39055,107],{"class":62},[36,39057,3099],{"class":50},[36,39059,101],{"class":62},[36,39061,35662],{"class":46},[36,39063,107],{"class":62},[36,39065,35675],{"class":50},[36,39067,35678],{"class":42},[36,39069,35681],{"class":46},[36,39071,3460],{"class":62},[36,39073,35686],{"class":42},[36,39075,2884],{"class":46},[36,39077,3460],{"class":62},[36,39079,1914],{"class":42},[36,39081,39082],{"class":38,"line":35695},[36,39083,39084],{"class":2621},"    # 选择最优参数并保存\n",[36,39086,39087],{"class":38,"line":35701},[36,39088,39089],{"class":2621},"    # 保存最佳模型权重字典\n",[36,39091,39092,39095,39097],{"class":38,"line":35707},[36,39093,39094],{"class":42},"    torch.save(best_model_wts,",[36,39096,35719],{"class":50},[36,39098,123],{"class":42},[36,39100,39101],{"class":38,"line":35713},[36,39102,35739],{"class":2621},[36,39104,39105,39107,39109,39111,39113,39115],{"class":38,"line":35724},[36,39106,35745],{"class":42},[36,39108,47],{"class":46},[36,39110,35750],{"class":42},[36,39112,35753],{"class":7598},[36,39114,47],{"class":46},[36,39116,3963],{"class":42},[36,39118,39119,39121,39123,39125],{"class":38,"line":35730},[36,39120,35763],{"class":50},[36,39122,3413],{"class":42},[36,39124,35768],{"class":62},[36,39126,35771],{"class":42},[36,39128,39129,39131],{"class":38,"line":35736},[36,39130,35777],{"class":50},[36,39132,35780],{"class":42},[36,39134,39135,39137],{"class":38,"line":35742},[36,39136,35786],{"class":50},[36,39138,35789],{"class":42},[36,39140,39141,39143],{"class":38,"line":35760},[36,39142,35795],{"class":50},[36,39144,35798],{"class":42},[36,39146,39147,39149],{"class":38,"line":35774},[36,39148,35804],{"class":50},[36,39150,35807],{"class":42},[36,39152,39153],{"class":38,"line":35783},[36,39154,35813],{"class":42},[36,39156,39157],{"class":38,"line":35792},[36,39158,35819],{"class":2621},[36,39160,39161,39163],{"class":38,"line":35801},[36,39162,6474],{"class":46},[36,39164,35827],{"class":42},[36,39166,39167],{"class":38,"line":35810},[36,39168,70],{"emptyLinePlaceholder":69},[36,39170,39171],{"class":38,"line":35816},[36,39172,35838],{"class":2621},[36,39174,39175,39177,39179],{"class":38,"line":35822},[36,39176,76],{"class":46},[36,39178,35846],{"class":79},[36,39180,35849],{"class":42},[36,39182,39183],{"class":38,"line":35830},[36,39184,35855],{"class":2621},[36,39186,39187,39189,39191,39193,39195,39197,39199,39201],{"class":38,"line":35835},[36,39188,35861],{"class":42},[36,39190,34047],{"class":7598},[36,39192,47],{"class":46},[36,39194,92],{"class":42},[36,39196,3053],{"class":62},[36,39198,2934],{"class":42},[36,39200,2850],{"class":62},[36,39202,1914],{"class":42},[36,39204,39205],{"class":38,"line":35841},[36,39206,35881],{"class":2621},[36,39208,39209],{"class":38,"line":35852},[36,39210,35887],{"class":2621},[36,39212,39213],{"class":38,"line":35858},[36,39214,35893],{"class":2621},[36,39216,39217,39219,39221,39223,39225,39227,39229],{"class":38,"line":35878},[36,39218,34081],{"class":42},[36,39220,1906],{"class":62},[36,39222,2934],{"class":42},[36,39224,1911],{"class":62},[36,39226,2934],{"class":42},[36,39228,1906],{"class":62},[36,39230,123],{"class":42},[36,39232,39233],{"class":38,"line":35884},[36,39234,35916],{"class":2621},[36,39236,39237],{"class":38,"line":35890},[36,39238,35922],{"class":2621},[36,39240,39241],{"class":38,"line":35896},[36,39242,35928],{"class":2621},[36,39244,39245],{"class":38,"line":35913},[36,39246,35934],{"class":2621},[36,39248,39249],{"class":38,"line":35919},[36,39250,35940],{"class":2621},[36,39252,39253,39255,39257,39259,39261,39263,39265,39267,39269],{"class":38,"line":35925},[36,39254,35946],{"class":42},[36,39256,35949],{"class":50},[36,39258,35952],{"class":42},[36,39260,35955],{"class":50},[36,39262,2934],{"class":42},[36,39264,35960],{"class":7598},[36,39266,47],{"class":46},[36,39268,35965],{"class":50},[36,39270,123],{"class":42},[36,39272,39273,39275,39277,39279,39281,39283,39285,39287,39289],{"class":38,"line":35931},[36,39274,35946],{"class":42},[36,39276,35949],{"class":50},[36,39278,35977],{"class":42},[36,39280,35980],{"class":50},[36,39282,2934],{"class":42},[36,39284,35960],{"class":7598},[36,39286,47],{"class":46},[36,39288,35989],{"class":50},[36,39290,123],{"class":42},[36,39292,39293],{"class":38,"line":35937},[36,39294,35997],{"class":2621},[36,39296,39297],{"class":38,"line":35943},[36,39298,36003],{"class":42},[36,39300,39301],{"class":38,"line":35970},[36,39302,36009],{"class":2621},[36,39304,39305,39307,39309],{"class":38,"line":35994},[36,39306,36015],{"class":42},[36,39308,36018],{"class":50},[36,39310,123],{"class":42},[36,39312,39313,39315,39317],{"class":38,"line":36000},[36,39314,36026],{"class":42},[36,39316,36029],{"class":50},[36,39318,123],{"class":42},[36,39320,39321],{"class":38,"line":36006},[36,39322,36037],{"class":2621},[36,39324,39325,39327,39329,39331,39333,39335,39337],{"class":38,"line":36012},[36,39326,34081],{"class":42},[36,39328,1906],{"class":62},[36,39330,2934],{"class":42},[36,39332,1911],{"class":62},[36,39334,2934],{"class":42},[36,39336,1911],{"class":62},[36,39338,123],{"class":42},[36,39340,39341,39343,39345,39347,39349,39351,39353,39355,39357],{"class":38,"line":36023},[36,39342,35946],{"class":42},[36,39344,35949],{"class":50},[36,39346,36064],{"class":42},[36,39348,35955],{"class":50},[36,39350,2934],{"class":42},[36,39352,35960],{"class":7598},[36,39354,47],{"class":46},[36,39356,36075],{"class":50},[36,39358,123],{"class":42},[36,39360,39361,39363,39365,39367,39369,39371,39373,39375,39377],{"class":38,"line":36034},[36,39362,35946],{"class":42},[36,39364,35949],{"class":50},[36,39366,36087],{"class":42},[36,39368,35980],{"class":50},[36,39370,2934],{"class":42},[36,39372,35960],{"class":7598},[36,39374,47],{"class":46},[36,39376,36098],{"class":50},[36,39378,123],{"class":42},[36,39380,39381],{"class":38,"line":36040},[36,39382,36106],{"class":2621},[36,39384,39385],{"class":38,"line":36057},[36,39386,36003],{"class":42},[36,39388,39389,39391,39393],{"class":38,"line":36080},[36,39390,36015],{"class":42},[36,39392,35949],{"class":50},[36,39394,123],{"class":42},[36,39396,39397,39399,39401],{"class":38,"line":36103},[36,39398,36026],{"class":42},[36,39400,36128],{"class":50},[36,39402,123],{"class":42},[36,39404,39405],{"class":38,"line":36109},[36,39406,36136],{"class":42},[36,39408,39409],{"class":38,"line":36114},[36,39410,70],{"emptyLinePlaceholder":69},[36,39412,39413],{"class":38,"line":36123},[36,39414,36147],{"class":2621},[36,39416,39417,39419,39421,39423,39425],{"class":38,"line":36133},[36,39418,3948],{"class":46},[36,39420,33575],{"class":62},[36,39422,5334],{"class":46},[36,39424,33580],{"class":50},[36,39426,153],{"class":42},[36,39428,39429],{"class":38,"line":36139},[36,39430,36166],{"class":2621},[36,39432,39433,39436,39438],{"class":38,"line":36144},[36,39434,39435],{"class":42},"    AlexNet",[36,39437,47],{"class":46},[36,39439,39440],{"class":42},"AlexNet()\n",[36,39442,39443,39445,39447],{"class":38,"line":36150},[36,39444,36183],{"class":42},[36,39446,47],{"class":46},[36,39448,36188],{"class":42},[36,39450,39451,39453,39455,39458,39460,39462,39464],{"class":38,"line":36163},[36,39452,35745],{"class":42},[36,39454,47],{"class":46},[36,39456,39457],{"class":42},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,39459,36201],{"class":7598},[36,39461,47],{"class":46},[36,39463,3254],{"class":62},[36,39465,123],{"class":42},[36,39467,39468],{"class":38,"line":36169},[36,39469,36213],{"class":42},[650,39471,39472],{"start":66},[653,39473,36226],{},[26,39475,39477],{"className":28,"code":39476,"language":30,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,39478,39479,39485,39495,39505,39515,39519,39529,39539,39550,39554,39558,39562,39570,39586,39596,39612,39622,39636,39640,39650,39660,39670,39676,39680,39684,39692,39696,39712,39720,39724,39728,39736,39744,39748,39752,39756,39760,39766,39770,39780,39788,39796,39800,39804,39808,39816,39820,39836,39840,39844,39848,39860,39864,39876,39880,39884,39896,39900,39910,39914,39918,39930,39934,39942,39946,39950,39958,39962,39970,39974,39978,39982,39986,39990,40006,40014,40018,40022,40070,40076,40080,40090,40098,40106,40110,40114,40118,40122,40130,40134,40150,40154,40162,40170],{"__ignoreMap":31},[36,39480,39481,39483],{"class":38,"line":39},[36,39482,1943],{"class":46},[36,39484,32761],{"class":42},[36,39486,39487,39489,39491,39493],{"class":38,"line":54},[36,39488,1943],{"class":46},[36,39490,33769],{"class":42},[36,39492,33737],{"class":46},[36,39494,33774],{"class":42},[36,39496,39497,39499,39501,39503],{"class":38,"line":66},[36,39498,1937],{"class":46},[36,39500,36254],{"class":42},[36,39502,1943],{"class":46},[36,39504,36259],{"class":42},[36,39506,39507,39509,39511,39513],{"class":38,"line":73},[36,39508,1937],{"class":46},[36,39510,33752],{"class":42},[36,39512,1943],{"class":46},[36,39514,33757],{"class":42},[36,39516,39517],{"class":38,"line":86},[36,39518,36274],{"class":2621},[36,39520,39521,39523,39525,39527],{"class":38,"line":126},[36,39522,1937],{"class":46},[36,39524,33722],{"class":42},[36,39526,1943],{"class":46},[36,39528,33727],{"class":42},[36,39530,39531,39533,39535,39537],{"class":38,"line":131},[36,39532,1937],{"class":46},[36,39534,34268],{"class":42},[36,39536,1943],{"class":46},[36,39538,37908],{"class":42},[36,39540,39541,39543,39546,39548],{"class":38,"line":225},[36,39542,1937],{"class":46},[36,39544,39545],{"class":42}," 练习.AlexNet.model ",[36,39547,1943],{"class":46},[36,39549,37908],{"class":42},[36,39551,39552],{"class":38,"line":235},[36,39553,70],{"emptyLinePlaceholder":69},[36,39555,39556],{"class":38,"line":377},[36,39557,70],{"emptyLinePlaceholder":69},[36,39559,39560],{"class":38,"line":617},[36,39561,36303],{"class":2621},[36,39563,39564,39566,39568],{"class":38,"line":643},[36,39565,76],{"class":46},[36,39567,36310],{"class":79},[36,39569,34306],{"class":42},[36,39571,39572,39574,39576,39578,39580,39582,39584],{"class":38,"line":921},[36,39573,36317],{"class":42},[36,39575,47],{"class":46},[36,39577,33809],{"class":42},[36,39579,33812],{"class":7598},[36,39581,47],{"class":46},[36,39583,33817],{"class":50},[36,39585,33820],{"class":42},[36,39587,39588,39590,39592,39594],{"class":38,"line":934},[36,39589,36334],{"class":7598},[36,39591,47],{"class":46},[36,39593,36339],{"class":62},[36,39595,33820],{"class":42},[36,39597,39598,39600,39602,39604,39606,39608,39610],{"class":38,"line":939},[36,39599,36346],{"class":7598},[36,39601,47],{"class":46},[36,39603,33847],{"class":42},[36,39605,33850],{"class":7598},[36,39607,47],{"class":46},[36,39609,37800],{"class":62},[36,39611,33858],{"class":42},[36,39613,39614,39616,39618,39620],{"class":38,"line":949},[36,39615,36363],{"class":7598},[36,39617,47],{"class":46},[36,39619,33830],{"class":62},[36,39621,123],{"class":42},[36,39623,39624,39626,39628,39630,39632,39634],{"class":38,"line":962},[36,39625,36374],{"class":42},[36,39627,47],{"class":46},[36,39629,33888],{"class":42},[36,39631,33891],{"class":7598},[36,39633,47],{"class":46},[36,39635,36385],{"class":42},[36,39637,39638],{"class":38,"line":974},[36,39639,36390],{"class":2621},[36,39641,39642,39644,39646,39648],{"class":38,"line":979},[36,39643,36395],{"class":7598},[36,39645,47],{"class":46},[36,39647,1906],{"class":62},[36,39649,33820],{"class":42},[36,39651,39652,39654,39656,39658],{"class":38,"line":994},[36,39653,36406],{"class":7598},[36,39655,47],{"class":46},[36,39657,33830],{"class":62},[36,39659,33820],{"class":42},[36,39661,39662,39664,39666,39668],{"class":38,"line":1006},[36,39663,36417],{"class":7598},[36,39665,47],{"class":46},[36,39667,2751],{"class":62},[36,39669,123],{"class":42},[36,39671,39672,39674],{"class":38,"line":1011},[36,39673,6474],{"class":46},[36,39675,36430],{"class":42},[36,39677,39678],{"class":38,"line":1023},[36,39679,70],{"emptyLinePlaceholder":69},[36,39681,39682],{"class":38,"line":1028},[36,39683,36439],{"class":2621},[36,39685,39686,39688,39690],{"class":38,"line":1033},[36,39687,76],{"class":46},[36,39689,36446],{"class":79},[36,39691,36449],{"class":42},[36,39693,39694],{"class":38,"line":1053},[36,39695,36454],{"class":2621},[36,39697,39698,39700,39702,39704,39706,39708,39710],{"class":38,"line":1064},[36,39699,33592],{"class":42},[36,39701,47],{"class":46},[36,39703,33599],{"class":50},[36,39705,4108],{"class":46},[36,39707,33604],{"class":42},[36,39709,4105],{"class":46},[36,39711,36471],{"class":50},[36,39713,39714,39716,39718],{"class":38,"line":1075},[36,39715,33644],{"class":42},[36,39717,47],{"class":46},[36,39719,34642],{"class":42},[36,39721,39722],{"class":38,"line":2291},[36,39723,70],{"emptyLinePlaceholder":69},[36,39725,39726],{"class":38,"line":2329},[36,39727,36488],{"class":2621},[36,39729,39730,39732,39734],{"class":38,"line":2334},[36,39731,36493],{"class":42},[36,39733,47],{"class":46},[36,39735,34695],{"class":62},[36,39737,39738,39740,39742],{"class":38,"line":2339},[36,39739,36502],{"class":42},[36,39741,47],{"class":46},[36,39743,5470],{"class":62},[36,39745,39746],{"class":38,"line":2365},[36,39747,70],{"emptyLinePlaceholder":69},[36,39749,39750],{"class":38,"line":2373},[36,39751,36515],{"class":2621},[36,39753,39754],{"class":38,"line":5001},[36,39755,36520],{"class":2621},[36,39757,39758],{"class":38,"line":5006},[36,39759,36525],{"class":2621},[36,39761,39762,39764],{"class":38,"line":10328},[36,39763,36530],{"class":46},[36,39765,35236],{"class":42},[36,39767,39768],{"class":38,"line":10352},[36,39769,36537],{"class":2621},[36,39771,39772,39774,39776,39778],{"class":38,"line":10357},[36,39773,5788],{"class":46},[36,39775,36544],{"class":42},[36,39777,28413],{"class":46},[36,39779,36549],{"class":42},[36,39781,39782,39784,39786],{"class":38,"line":10363},[36,39783,36554],{"class":42},[36,39785,47],{"class":46},[36,39787,36559],{"class":42},[36,39789,39790,39792,39794],{"class":38,"line":10390},[36,39791,36564],{"class":42},[36,39793,47],{"class":46},[36,39795,36569],{"class":42},[36,39797,39798],{"class":38,"line":10395},[36,39799,36574],{"class":2621},[36,39801,39802],{"class":38,"line":10401},[36,39803,35227],{"class":42},[36,39805,39806],{"class":38,"line":10413},[36,39807,36583],{"class":2621},[36,39809,39810,39812,39814],{"class":38,"line":10425},[36,39811,35012],{"class":42},[36,39813,47],{"class":46},[36,39815,36592],{"class":42},[36,39817,39818],{"class":38,"line":10437},[36,39819,36597],{"class":2621},[36,39821,39822,39824,39826,39828,39830,39832,39834],{"class":38,"line":12095},[36,39823,35029],{"class":42},[36,39825,47],{"class":46},[36,39827,35034],{"class":42},[36,39829,35037],{"class":7598},[36,39831,47],{"class":46},[36,39833,1906],{"class":62},[36,39835,123],{"class":42},[36,39837,39838],{"class":38,"line":12120},[36,39839,36618],{"class":2621},[36,39841,39842],{"class":38,"line":12143},[36,39843,36623],{"class":2621},[36,39845,39846],{"class":38,"line":12167},[36,39847,36628],{"class":2621},[36,39849,39850,39852,39854,39856,39858],{"class":38,"line":12172},[36,39851,36633],{"class":42},[36,39853,928],{"class":46},[36,39855,35139],{"class":42},[36,39857,5334],{"class":46},[36,39859,36642],{"class":42},[36,39861,39862],{"class":38,"line":12177},[36,39863,36647],{"class":2621},[36,39865,39866,39868,39870,39872,39874],{"class":38,"line":12182},[36,39867,36652],{"class":42},[36,39869,928],{"class":46},[36,39871,36657],{"class":42},[36,39873,2751],{"class":62},[36,39875,123],{"class":42},[36,39877,39878],{"class":38,"line":12191},[36,39879,70],{"emptyLinePlaceholder":69},[36,39881,39882],{"class":38,"line":12196},[36,39883,36670],{"class":2621},[36,39885,39886,39888,39890,39892,39894],{"class":38,"line":12202},[36,39887,36675],{"class":42},[36,39889,47],{"class":46},[36,39891,36680],{"class":42},[36,39893,3139],{"class":46},[36,39895,36685],{"class":42},[36,39897,39898],{"class":38,"line":12223},[36,39899,36690],{"class":2621},[36,39901,39902,39904,39906,39908],{"class":38,"line":12229},[36,39903,168],{"class":62},[36,39905,92],{"class":42},[36,39907,36699],{"class":50},[36,39909,36702],{"class":42},[36,39911,39912],{"class":38,"line":12243},[36,39913,70],{"emptyLinePlaceholder":69},[36,39915,39916],{"class":38,"line":12249},[36,39917,36711],{"class":2621},[36,39919,39920,39922,39924,39926,39928],{"class":38,"line":12276},[36,39921,3948],{"class":46},[36,39923,33575],{"class":62},[36,39925,5334],{"class":46},[36,39927,33580],{"class":50},[36,39929,153],{"class":42},[36,39931,39932],{"class":38,"line":12285},[36,39933,36728],{"class":2621},[36,39935,39936,39938,39940],{"class":38,"line":12291},[36,39937,33644],{"class":42},[36,39939,47],{"class":46},[36,39941,39440],{"class":42},[36,39943,39944],{"class":38,"line":12299},[36,39945,36741],{"class":2621},[36,39947,39948],{"class":38,"line":12304},[36,39949,36746],{"class":2621},[36,39951,39952,39954,39956],{"class":38,"line":18977},[36,39953,36751],{"class":42},[36,39955,36754],{"class":50},[36,39957,1914],{"class":42},[36,39959,39960],{"class":38,"line":18983},[36,39961,36761],{"class":2621},[36,39963,39964,39966,39968],{"class":38,"line":19006},[36,39965,36374],{"class":42},[36,39967,47],{"class":46},[36,39969,36770],{"class":42},[36,39971,39972],{"class":38,"line":19012},[36,39973,36775],{"class":2621},[36,39975,39976],{"class":38,"line":19035},[36,39977,36780],{"class":42},[36,39979,39980],{"class":38,"line":19049},[36,39981,70],{"emptyLinePlaceholder":69},[36,39983,39984],{"class":38,"line":19069},[36,39985,36789],{"class":2621},[36,39987,39988],{"class":38,"line":19075},[36,39989,36794],{"class":2621},[36,39991,39992,39994,39996,39998,40000,40002,40004],{"class":38,"line":19086},[36,39993,33592],{"class":42},[36,39995,47],{"class":46},[36,39997,33599],{"class":50},[36,39999,4108],{"class":46},[36,40001,33604],{"class":42},[36,40003,4105],{"class":46},[36,40005,36471],{"class":50},[36,40007,40008,40010,40012],{"class":38,"line":19109},[36,40009,33644],{"class":42},[36,40011,47],{"class":46},[36,40013,34642],{"class":42},[36,40015,40016],{"class":38,"line":19131},[36,40017,36823],{"class":2621},[36,40019,40020],{"class":38,"line":19136},[36,40021,36828],{"class":2621},[36,40023,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068],{"class":38,"line":19142},[36,40025,36833],{"class":42},[36,40027,47],{"class":46},[36,40029,3444],{"class":42},[36,40031,36840],{"class":50},[36,40033,2934],{"class":42},[36,40035,36845],{"class":50},[36,40037,2934],{"class":42},[36,40039,36850],{"class":50},[36,40041,2934],{"class":42},[36,40043,36855],{"class":50},[36,40045,2934],{"class":42},[36,40047,36860],{"class":50},[36,40049,2934],{"class":42},[36,40051,36865],{"class":50},[36,40053,2934],{"class":42},[36,40055,36870],{"class":50},[36,40057,2934],{"class":42},[36,40059,36875],{"class":50},[36,40061,2934],{"class":42},[36,40063,36880],{"class":50},[36,40065,2934],{"class":42},[36,40067,36885],{"class":50},[36,40069,35598],{"class":42},[36,40071,40072,40074],{"class":38,"line":19156},[36,40073,36530],{"class":46},[36,40075,35236],{"class":42},[36,40077,40078],{"class":38,"line":19169},[36,40079,36898],{"class":2621},[36,40081,40082,40084,40086,40088],{"class":38,"line":19174},[36,40083,5788],{"class":46},[36,40085,36905],{"class":42},[36,40087,28413],{"class":46},[36,40089,36549],{"class":42},[36,40091,40092,40094,40096],{"class":38,"line":19188},[36,40093,34962],{"class":42},[36,40095,47],{"class":46},[36,40097,34967],{"class":42},[36,40099,40100,40102,40104],{"class":38,"line":19193},[36,40101,34977],{"class":42},[36,40103,47],{"class":46},[36,40105,34982],{"class":42},[36,40107,40108],{"class":38,"line":19199},[36,40109,70],{"emptyLinePlaceholder":69},[36,40111,40112],{"class":38,"line":19204},[36,40113,36934],{"class":2621},[36,40115,40116],{"class":38,"line":19218},[36,40117,35227],{"class":42},[36,40119,40120],{"class":38,"line":19223},[36,40121,36943],{"class":2621},[36,40123,40124,40126,40128],{"class":38,"line":19228},[36,40125,35012],{"class":42},[36,40127,47],{"class":46},[36,40129,35017],{"class":42},[36,40131,40132],{"class":38,"line":19242},[36,40133,36956],{"class":2621},[36,40135,40136,40138,40140,40142,40144,40146,40148],{"class":38,"line":19254},[36,40137,35029],{"class":42},[36,40139,47],{"class":46},[36,40141,35034],{"class":42},[36,40143,35037],{"class":7598},[36,40145,47],{"class":46},[36,40147,1906],{"class":62},[36,40149,123],{"class":42},[36,40151,40152],{"class":38,"line":19259},[36,40153,36977],{"class":2621},[36,40155,40156,40158,40160],{"class":38,"line":19272},[36,40157,36982],{"class":42},[36,40159,47],{"class":46},[36,40161,36987],{"class":42},[36,40163,40164,40166,40168],{"class":38,"line":19277},[36,40165,36992],{"class":42},[36,40167,47],{"class":46},[36,40169,36997],{"class":42},[36,40171,40172,40174,40176,40178,40180,40182,40184,40186],{"class":38,"line":19282},[36,40173,906],{"class":62},[36,40175,92],{"class":42},[36,40177,37006],{"class":50},[36,40179,37009],{"class":42},[36,40181,37012],{"class":50},[36,40183,2934],{"class":42},[36,40185,37017],{"class":50},[36,40187,37020],{"class":42},[1752,40189,40191],{"id":40190},"_22vgg","2.2.VGG",[24368,40193,40195],{"id":40194},"_221原理","2.2.1.原理",[19,40197,40198],{},[3879,40199],{"alt":31,"src":40200},"\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,40202,40203],{},[3879,40204],{"alt":31,"src":40205},"\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,40207,40208],{},[3879,40209],{"alt":31,"src":40210},"\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,40212,40213],{},"参数详细描述：",[19,40215,40216],{},[3879,40217],{"alt":31,"src":40218},"\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,40220,40221],{},[3879,40222],{"alt":31,"src":40223},"\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,40225,40226],{},[3879,40227],{"alt":31,"src":40228},"\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,40230,40231],{},[3879,40232],{"alt":31,"src":40233},"\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,40235,40236],{},[3879,40237],{"alt":31,"src":40238},"\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",[24368,40240,40242],{"id":40241},"_222代码实现","2.2.2.代码实现",[650,40244,40245],{},[653,40246,40247],{},"网络搭建",[26,40249,40251],{"className":28,"code":40250,"language":30,"meta":31,"style":31},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[33,40252,40253,40259,40271,40281,40291,40295,40312,40320,40339,40344,40349,40361,40399,40404,40440,40444,40473,40477,40482,40493,40529,40533,40569,40573,40601,40605,40610,40621,40657,40661,40697,40701,40737,40741,40769,40773,40778,40789,40826,40830,40866,40870,40906,40910,40938,40942,40947,40958,40994,40998,41034,41038,41074,41078,41106,41110,41115,41126,41131,41136,41141,41162,41166,41178,41182,41194,41198,41202,41207,41212,41226,41231,41241,41246,41261,41266,41285,41290,41299,41304,41314,41319,41324,41338,41343,41357,41365,41369,41373,41381,41392,41403,41414,41425,41436,41447,41453,41457,41462,41475,41495,41501,41510],{"__ignoreMap":31},[36,40254,40255,40257],{"class":38,"line":39},[36,40256,1943],{"class":46},[36,40258,32761],{"class":42},[36,40260,40261,40263,40266,40268],{"class":38,"line":54},[36,40262,1937],{"class":46},[36,40264,40265],{"class":42}," sympy.core.sympify ",[36,40267,1943],{"class":46},[36,40269,40270],{"class":42}," kernS\n",[36,40272,40273,40275,40277,40279],{"class":38,"line":66},[36,40274,1937],{"class":46},[36,40276,33103],{"class":42},[36,40278,1943],{"class":46},[36,40280,33108],{"class":42},[36,40282,40283,40285,40287,40289],{"class":38,"line":73},[36,40284,1937],{"class":46},[36,40286,33120],{"class":42},[36,40288,1943],{"class":46},[36,40290,33125],{"class":42},[36,40292,40293],{"class":38,"line":86},[36,40294,70],{"emptyLinePlaceholder":69},[36,40296,40297,40299,40302,40304,40306,40308,40310],{"class":38,"line":126},[36,40298,147],{"class":46},[36,40300,40301],{"class":79}," VGG16",[36,40303,92],{"class":42},[36,40305,33141],{"class":79},[36,40307,3113],{"class":42},[36,40309,33146],{"class":79},[36,40311,1147],{"class":42},[36,40313,40314,40316,40318],{"class":38,"line":131},[36,40315,158],{"class":46},[36,40317,515],{"class":62},[36,40319,163],{"class":42},[36,40321,40322,40324,40326,40329,40331,40333,40335,40337],{"class":38,"line":225},[36,40323,1432],{"class":62},[36,40325,92],{"class":42},[36,40327,40328],{"class":62},"VGG16",[36,40330,630],{"class":42},[36,40332,481],{"class":62},[36,40334,33183],{"class":42},[36,40336,494],{"class":62},[36,40338,4369],{"class":42},[36,40340,40341],{"class":38,"line":235},[36,40342,40343],{"class":2621},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,40345,40346],{"class":38,"line":377},[36,40347,40348],{"class":2621},"        # 这里用的是灰度图\n",[36,40350,40351,40353,40356,40358],{"class":38,"line":617},[36,40352,523],{"class":62},[36,40354,40355],{"class":42},".block1",[36,40357,47],{"class":46},[36,40359,40360],{"class":42},"nn.Sequential(\n",[36,40362,40363,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396],{"class":38,"line":643},[36,40364,40365],{"class":42},"            nn.Conv2d(",[36,40367,33211],{"class":7598},[36,40369,47],{"class":46},[36,40371,1906],{"class":62},[36,40373,2934],{"class":42},[36,40375,33220],{"class":7598},[36,40377,47],{"class":46},[36,40379,2763],{"class":62},[36,40381,2934],{"class":42},[36,40383,33229],{"class":7598},[36,40385,47],{"class":46},[36,40387,2634],{"class":62},[36,40389,2934],{"class":42},[36,40391,33238],{"class":7598},[36,40393,47],{"class":46},[36,40395,1906],{"class":62},[36,40397,40398],{"class":42},"),\n",[36,40400,40401],{"class":38,"line":921},[36,40402,40403],{"class":42},"            nn.ReLU(),\n",[36,40405,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438],{"class":38,"line":934},[36,40407,40365],{"class":42},[36,40409,33211],{"class":7598},[36,40411,47],{"class":46},[36,40413,2763],{"class":62},[36,40415,2934],{"class":42},[36,40417,33220],{"class":7598},[36,40419,47],{"class":46},[36,40421,2763],{"class":62},[36,40423,2934],{"class":42},[36,40425,33229],{"class":7598},[36,40427,47],{"class":46},[36,40429,2634],{"class":62},[36,40431,2934],{"class":42},[36,40433,33238],{"class":7598},[36,40435,47],{"class":46},[36,40437,1906],{"class":62},[36,40439,40398],{"class":42},[36,40441,40442],{"class":38,"line":939},[36,40443,40403],{"class":42},[36,40445,40446,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471],{"class":38,"line":949},[36,40447,40448],{"class":42},"            nn.MaxPool2d(",[36,40450,33229],{"class":7598},[36,40452,47],{"class":46},[36,40454,1911],{"class":62},[36,40456,2934],{"class":42},[36,40458,33284],{"class":7598},[36,40460,47],{"class":46},[36,40462,1911],{"class":62},[36,40464,2934],{"class":42},[36,40466,33238],{"class":7598},[36,40468,47],{"class":46},[36,40470,2751],{"class":62},[36,40472,123],{"class":42},[36,40474,40475],{"class":38,"line":962},[36,40476,2276],{"class":42},[36,40478,40479],{"class":38,"line":974},[36,40480,40481],{"class":2621},"        # 第二层\n",[36,40483,40484,40486,40489,40491],{"class":38,"line":979},[36,40485,523],{"class":62},[36,40487,40488],{"class":42},".block2",[36,40490,47],{"class":46},[36,40492,40360],{"class":42},[36,40494,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525,40527],{"class":38,"line":994},[36,40496,40365],{"class":42},[36,40498,33211],{"class":7598},[36,40500,47],{"class":46},[36,40502,2763],{"class":62},[36,40504,2934],{"class":42},[36,40506,33220],{"class":7598},[36,40508,47],{"class":46},[36,40510,34423],{"class":62},[36,40512,2934],{"class":42},[36,40514,33229],{"class":7598},[36,40516,47],{"class":46},[36,40518,2634],{"class":62},[36,40520,2934],{"class":42},[36,40522,33238],{"class":7598},[36,40524,47],{"class":46},[36,40526,1906],{"class":62},[36,40528,40398],{"class":42},[36,40530,40531],{"class":38,"line":1006},[36,40532,40403],{"class":42},[36,40534,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553,40555,40557,40559,40561,40563,40565,40567],{"class":38,"line":1011},[36,40536,40365],{"class":42},[36,40538,33211],{"class":7598},[36,40540,47],{"class":46},[36,40542,34423],{"class":62},[36,40544,2934],{"class":42},[36,40546,33220],{"class":7598},[36,40548,47],{"class":46},[36,40550,34423],{"class":62},[36,40552,2934],{"class":42},[36,40554,33229],{"class":7598},[36,40556,47],{"class":46},[36,40558,2634],{"class":62},[36,40560,2934],{"class":42},[36,40562,33238],{"class":7598},[36,40564,47],{"class":46},[36,40566,1906],{"class":62},[36,40568,40398],{"class":42},[36,40570,40571],{"class":38,"line":1023},[36,40572,40403],{"class":42},[36,40574,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599],{"class":38,"line":1028},[36,40576,40448],{"class":42},[36,40578,33229],{"class":7598},[36,40580,47],{"class":46},[36,40582,1911],{"class":62},[36,40584,2934],{"class":42},[36,40586,33284],{"class":7598},[36,40588,47],{"class":46},[36,40590,1911],{"class":62},[36,40592,2934],{"class":42},[36,40594,33238],{"class":7598},[36,40596,47],{"class":46},[36,40598,2751],{"class":62},[36,40600,123],{"class":42},[36,40602,40603],{"class":38,"line":1033},[36,40604,2276],{"class":42},[36,40606,40607],{"class":38,"line":1053},[36,40608,40609],{"class":2621},"        # 第三层\n",[36,40611,40612,40614,40617,40619],{"class":38,"line":1064},[36,40613,523],{"class":62},[36,40615,40616],{"class":42},".block3",[36,40618,47],{"class":46},[36,40620,40360],{"class":42},[36,40622,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653,40655],{"class":38,"line":1075},[36,40624,40365],{"class":42},[36,40626,33211],{"class":7598},[36,40628,47],{"class":46},[36,40630,34423],{"class":62},[36,40632,2934],{"class":42},[36,40634,33220],{"class":7598},[36,40636,47],{"class":46},[36,40638,37221],{"class":62},[36,40640,2934],{"class":42},[36,40642,33229],{"class":7598},[36,40644,47],{"class":46},[36,40646,2634],{"class":62},[36,40648,2934],{"class":42},[36,40650,33238],{"class":7598},[36,40652,47],{"class":46},[36,40654,1906],{"class":62},[36,40656,40398],{"class":42},[36,40658,40659],{"class":38,"line":2291},[36,40660,40403],{"class":42},[36,40662,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683,40685,40687,40689,40691,40693,40695],{"class":38,"line":2329},[36,40664,40365],{"class":42},[36,40666,33211],{"class":7598},[36,40668,47],{"class":46},[36,40670,37221],{"class":62},[36,40672,2934],{"class":42},[36,40674,33220],{"class":7598},[36,40676,47],{"class":46},[36,40678,37221],{"class":62},[36,40680,2934],{"class":42},[36,40682,33229],{"class":7598},[36,40684,47],{"class":46},[36,40686,2634],{"class":62},[36,40688,2934],{"class":42},[36,40690,33238],{"class":7598},[36,40692,47],{"class":46},[36,40694,1906],{"class":62},[36,40696,40398],{"class":42},[36,40698,40699],{"class":38,"line":2334},[36,40700,40403],{"class":42},[36,40702,40703,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735],{"class":38,"line":2339},[36,40704,40365],{"class":42},[36,40706,33211],{"class":7598},[36,40708,47],{"class":46},[36,40710,37221],{"class":62},[36,40712,2934],{"class":42},[36,40714,33220],{"class":7598},[36,40716,47],{"class":46},[36,40718,37221],{"class":62},[36,40720,2934],{"class":42},[36,40722,33229],{"class":7598},[36,40724,47],{"class":46},[36,40726,2634],{"class":62},[36,40728,2934],{"class":42},[36,40730,33238],{"class":7598},[36,40732,47],{"class":46},[36,40734,1906],{"class":62},[36,40736,40398],{"class":42},[36,40738,40739],{"class":38,"line":2365},[36,40740,40403],{"class":42},[36,40742,40743,40745,40747,40749,40751,40753,40755,40757,40759,40761,40763,40765,40767],{"class":38,"line":2373},[36,40744,40448],{"class":42},[36,40746,33229],{"class":7598},[36,40748,47],{"class":46},[36,40750,1911],{"class":62},[36,40752,2934],{"class":42},[36,40754,33284],{"class":7598},[36,40756,47],{"class":46},[36,40758,1911],{"class":62},[36,40760,2934],{"class":42},[36,40762,33238],{"class":7598},[36,40764,47],{"class":46},[36,40766,2751],{"class":62},[36,40768,123],{"class":42},[36,40770,40771],{"class":38,"line":5001},[36,40772,2276],{"class":42},[36,40774,40775],{"class":38,"line":5006},[36,40776,40777],{"class":2621},"        # 第四层\n",[36,40779,40780,40782,40785,40787],{"class":38,"line":10328},[36,40781,523],{"class":62},[36,40783,40784],{"class":42},".block4",[36,40786,47],{"class":46},[36,40788,40360],{"class":42},[36,40790,40791,40793,40795,40797,40799,40801,40803,40805,40808,40810,40812,40814,40816,40818,40820,40822,40824],{"class":38,"line":10352},[36,40792,40365],{"class":42},[36,40794,33211],{"class":7598},[36,40796,47],{"class":46},[36,40798,37221],{"class":62},[36,40800,2934],{"class":42},[36,40802,33220],{"class":7598},[36,40804,47],{"class":46},[36,40806,40807],{"class":62},"512",[36,40809,2934],{"class":42},[36,40811,33229],{"class":7598},[36,40813,47],{"class":46},[36,40815,2634],{"class":62},[36,40817,2934],{"class":42},[36,40819,33238],{"class":7598},[36,40821,47],{"class":46},[36,40823,1906],{"class":62},[36,40825,40398],{"class":42},[36,40827,40828],{"class":38,"line":10357},[36,40829,40403],{"class":42},[36,40831,40832,40834,40836,40838,40840,40842,40844,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864],{"class":38,"line":10363},[36,40833,40365],{"class":42},[36,40835,33211],{"class":7598},[36,40837,47],{"class":46},[36,40839,40807],{"class":62},[36,40841,2934],{"class":42},[36,40843,33220],{"class":7598},[36,40845,47],{"class":46},[36,40847,40807],{"class":62},[36,40849,2934],{"class":42},[36,40851,33229],{"class":7598},[36,40853,47],{"class":46},[36,40855,2634],{"class":62},[36,40857,2934],{"class":42},[36,40859,33238],{"class":7598},[36,40861,47],{"class":46},[36,40863,1906],{"class":62},[36,40865,40398],{"class":42},[36,40867,40868],{"class":38,"line":10390},[36,40869,40403],{"class":42},[36,40871,40872,40874,40876,40878,40880,40882,40884,40886,40888,40890,40892,40894,40896,40898,40900,40902,40904],{"class":38,"line":10395},[36,40873,40365],{"class":42},[36,40875,33211],{"class":7598},[36,40877,47],{"class":46},[36,40879,40807],{"class":62},[36,40881,2934],{"class":42},[36,40883,33220],{"class":7598},[36,40885,47],{"class":46},[36,40887,40807],{"class":62},[36,40889,2934],{"class":42},[36,40891,33229],{"class":7598},[36,40893,47],{"class":46},[36,40895,2634],{"class":62},[36,40897,2934],{"class":42},[36,40899,33238],{"class":7598},[36,40901,47],{"class":46},[36,40903,1906],{"class":62},[36,40905,40398],{"class":42},[36,40907,40908],{"class":38,"line":10401},[36,40909,40403],{"class":42},[36,40911,40912,40914,40916,40918,40920,40922,40924,40926,40928,40930,40932,40934,40936],{"class":38,"line":10413},[36,40913,40448],{"class":42},[36,40915,33229],{"class":7598},[36,40917,47],{"class":46},[36,40919,1911],{"class":62},[36,40921,2934],{"class":42},[36,40923,33284],{"class":7598},[36,40925,47],{"class":46},[36,40927,1911],{"class":62},[36,40929,2934],{"class":42},[36,40931,33238],{"class":7598},[36,40933,47],{"class":46},[36,40935,2751],{"class":62},[36,40937,123],{"class":42},[36,40939,40940],{"class":38,"line":10425},[36,40941,2276],{"class":42},[36,40943,40944],{"class":38,"line":10437},[36,40945,40946],{"class":2621},"        # 第五层\n",[36,40948,40949,40951,40954,40956],{"class":38,"line":12095},[36,40950,523],{"class":62},[36,40952,40953],{"class":42},".block5",[36,40955,47],{"class":46},[36,40957,40360],{"class":42},[36,40959,40960,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980,40982,40984,40986,40988,40990,40992],{"class":38,"line":12120},[36,40961,40365],{"class":42},[36,40963,33211],{"class":7598},[36,40965,47],{"class":46},[36,40967,40807],{"class":62},[36,40969,2934],{"class":42},[36,40971,33220],{"class":7598},[36,40973,47],{"class":46},[36,40975,40807],{"class":62},[36,40977,2934],{"class":42},[36,40979,33229],{"class":7598},[36,40981,47],{"class":46},[36,40983,2634],{"class":62},[36,40985,2934],{"class":42},[36,40987,33238],{"class":7598},[36,40989,47],{"class":46},[36,40991,1906],{"class":62},[36,40993,40398],{"class":42},[36,40995,40996],{"class":38,"line":12143},[36,40997,40403],{"class":42},[36,40999,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018,41020,41022,41024,41026,41028,41030,41032],{"class":38,"line":12167},[36,41001,40365],{"class":42},[36,41003,33211],{"class":7598},[36,41005,47],{"class":46},[36,41007,40807],{"class":62},[36,41009,2934],{"class":42},[36,41011,33220],{"class":7598},[36,41013,47],{"class":46},[36,41015,40807],{"class":62},[36,41017,2934],{"class":42},[36,41019,33229],{"class":7598},[36,41021,47],{"class":46},[36,41023,2634],{"class":62},[36,41025,2934],{"class":42},[36,41027,33238],{"class":7598},[36,41029,47],{"class":46},[36,41031,1906],{"class":62},[36,41033,40398],{"class":42},[36,41035,41036],{"class":38,"line":12172},[36,41037,40403],{"class":42},[36,41039,41040,41042,41044,41046,41048,41050,41052,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072],{"class":38,"line":12177},[36,41041,40365],{"class":42},[36,41043,33211],{"class":7598},[36,41045,47],{"class":46},[36,41047,40807],{"class":62},[36,41049,2934],{"class":42},[36,41051,33220],{"class":7598},[36,41053,47],{"class":46},[36,41055,40807],{"class":62},[36,41057,2934],{"class":42},[36,41059,33229],{"class":7598},[36,41061,47],{"class":46},[36,41063,2634],{"class":62},[36,41065,2934],{"class":42},[36,41067,33238],{"class":7598},[36,41069,47],{"class":46},[36,41071,1906],{"class":62},[36,41073,40398],{"class":42},[36,41075,41076],{"class":38,"line":12182},[36,41077,40403],{"class":42},[36,41079,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102,41104],{"class":38,"line":12191},[36,41081,40448],{"class":42},[36,41083,33229],{"class":7598},[36,41085,47],{"class":46},[36,41087,1911],{"class":62},[36,41089,2934],{"class":42},[36,41091,33284],{"class":7598},[36,41093,47],{"class":46},[36,41095,1911],{"class":62},[36,41097,2934],{"class":42},[36,41099,33238],{"class":7598},[36,41101,47],{"class":46},[36,41103,2751],{"class":62},[36,41105,123],{"class":42},[36,41107,41108],{"class":38,"line":12196},[36,41109,2276],{"class":42},[36,41111,41112],{"class":38,"line":12202},[36,41113,41114],{"class":2621},"        # 全连接层\n",[36,41116,41117,41119,41122,41124],{"class":38,"line":12223},[36,41118,523],{"class":62},[36,41120,41121],{"class":42},".block6",[36,41123,47],{"class":46},[36,41125,40360],{"class":42},[36,41127,41128],{"class":38,"line":12229},[36,41129,41130],{"class":2621},"            # 平展操作\n",[36,41132,41133],{"class":38,"line":12243},[36,41134,41135],{"class":2621},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,41137,41138],{"class":38,"line":12249},[36,41139,41140],{"class":42},"            nn.Flatten(),\n",[36,41142,41143,41146,41148,41150,41152,41154,41156,41158,41160],{"class":38,"line":12276},[36,41144,41145],{"class":42},"            nn.Linear(",[36,41147,2925],{"class":62},[36,41149,3011],{"class":46},[36,41151,2925],{"class":62},[36,41153,3011],{"class":46},[36,41155,40807],{"class":62},[36,41157,2934],{"class":42},[36,41159,37221],{"class":62},[36,41161,40398],{"class":42},[36,41163,41164],{"class":38,"line":12285},[36,41165,40403],{"class":42},[36,41167,41168,41170,41172,41174,41176],{"class":38,"line":12291},[36,41169,41145],{"class":42},[36,41171,37221],{"class":62},[36,41173,2934],{"class":42},[36,41175,34423],{"class":62},[36,41177,40398],{"class":42},[36,41179,41180],{"class":38,"line":12299},[36,41181,40403],{"class":42},[36,41183,41184,41186,41188,41190,41192],{"class":38,"line":12304},[36,41185,41145],{"class":42},[36,41187,34423],{"class":62},[36,41189,2934],{"class":42},[36,41191,3002],{"class":62},[36,41193,123],{"class":42},[36,41195,41196],{"class":38,"line":18977},[36,41197,2276],{"class":42},[36,41199,41200],{"class":38,"line":18983},[36,41201,70],{"emptyLinePlaceholder":69},[36,41203,41204],{"class":38,"line":19006},[36,41205,41206],{"class":2621},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,41208,41209],{"class":38,"line":19012},[36,41210,41211],{"class":2621},"        # 循环遍历模型\n",[36,41213,41214,41216,41219,41221,41223],{"class":38,"line":19035},[36,41215,5788],{"class":46},[36,41217,41218],{"class":42}," m ",[36,41220,28413],{"class":46},[36,41222,868],{"class":62},[36,41224,41225],{"class":42},".modules():\n",[36,41227,41228],{"class":38,"line":19049},[36,41229,41230],{"class":2621},"            # print(m)\n",[36,41232,41233,41235,41238],{"class":38,"line":19069},[36,41234,7025],{"class":46},[36,41236,41237],{"class":62}," isinstance",[36,41239,41240],{"class":42},"(m,nn.Conv2d):\n",[36,41242,41243],{"class":38,"line":19075},[36,41244,41245],{"class":2621},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,41247,41248,41251,41254,41256,41259],{"class":38,"line":19086},[36,41249,41250],{"class":42},"                nn.init.kaiming_normal_(m.weight,",[36,41252,41253],{"class":7598},"nonlinearity",[36,41255,47],{"class":46},[36,41257,41258],{"class":50},"'relu'",[36,41260,123],{"class":42},[36,41262,41263],{"class":38,"line":19109},[36,41264,41265],{"class":2621},"                # 判断b参数是否存在\n",[36,41267,41268,41271,41274,41277,41280,41283],{"class":38,"line":19131},[36,41269,41270],{"class":46},"                if",[36,41272,41273],{"class":42}," m.bias ",[36,41275,41276],{"class":46},"is",[36,41278,41279],{"class":46}," not",[36,41281,41282],{"class":62}," None",[36,41284,153],{"class":42},[36,41286,41287],{"class":38,"line":19136},[36,41288,41289],{"class":2621},"                    # 如果参数不存在的化初始化b=0\n",[36,41291,41292,41295,41297],{"class":38,"line":19142},[36,41293,41294],{"class":42},"                    nn.init.constant_(m.bias,",[36,41296,2751],{"class":62},[36,41298,123],{"class":42},[36,41300,41301],{"class":38,"line":19156},[36,41302,41303],{"class":2621},"            # 全连接层初始化\n",[36,41305,41306,41309,41311],{"class":38,"line":19169},[36,41307,41308],{"class":46},"            elif",[36,41310,41237],{"class":62},[36,41312,41313],{"class":42},"(m,nn.Linear):\n",[36,41315,41316],{"class":38,"line":19174},[36,41317,41318],{"class":2621},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,41320,41321],{"class":38,"line":19188},[36,41322,41323],{"class":2621},"                # 均值为0，方差为0.01\n",[36,41325,41326,41329,41331,41333,41336],{"class":38,"line":19193},[36,41327,41328],{"class":42},"                nn.init.normal_(m.weight,",[36,41330,2751],{"class":62},[36,41332,2934],{"class":42},[36,41334,41335],{"class":62},"0.01",[36,41337,123],{"class":42},[36,41339,41340],{"class":38,"line":19199},[36,41341,41342],{"class":2621},"                # 初始化b参数\n",[36,41344,41345,41347,41349,41351,41353,41355],{"class":38,"line":19204},[36,41346,41270],{"class":46},[36,41348,41273],{"class":42},[36,41350,41276],{"class":46},[36,41352,41279],{"class":46},[36,41354,41282],{"class":62},[36,41356,153],{"class":42},[36,41358,41359,41361,41363],{"class":38,"line":19218},[36,41360,41294],{"class":42},[36,41362,2751],{"class":62},[36,41364,123],{"class":42},[36,41366,41367],{"class":38,"line":19223},[36,41368,70],{"emptyLinePlaceholder":69},[36,41370,41371],{"class":38,"line":19228},[36,41372,37516],{"class":2621},[36,41374,41375,41377,41379],{"class":38,"line":19242},[36,41376,158],{"class":46},[36,41378,33448],{"class":79},[36,41380,33451],{"class":42},[36,41382,41383,41385,41387,41389],{"class":38,"line":19254},[36,41384,33456],{"class":42},[36,41386,47],{"class":46},[36,41388,481],{"class":62},[36,41390,41391],{"class":42},".block1(x)\n",[36,41393,41394,41396,41398,41400],{"class":38,"line":19259},[36,41395,33456],{"class":42},[36,41397,47],{"class":46},[36,41399,481],{"class":62},[36,41401,41402],{"class":42},".block2(x)\n",[36,41404,41405,41407,41409,41411],{"class":38,"line":19272},[36,41406,33456],{"class":42},[36,41408,47],{"class":46},[36,41410,481],{"class":62},[36,41412,41413],{"class":42},".block3(x)\n",[36,41415,41416,41418,41420,41422],{"class":38,"line":19277},[36,41417,33456],{"class":42},[36,41419,47],{"class":46},[36,41421,481],{"class":62},[36,41423,41424],{"class":42},".block4(x)\n",[36,41426,41427,41429,41431,41433],{"class":38,"line":19282},[36,41428,33456],{"class":42},[36,41430,47],{"class":46},[36,41432,481],{"class":62},[36,41434,41435],{"class":42},".block5(x)\n",[36,41437,41438,41440,41442,41444],{"class":38,"line":19287},[36,41439,33456],{"class":42},[36,41441,47],{"class":46},[36,41443,481],{"class":62},[36,41445,41446],{"class":42},".block6(x)\n",[36,41448,41449,41451],{"class":38,"line":19300},[36,41450,736],{"class":46},[36,41452,33564],{"class":42},[36,41454,41455],{"class":38,"line":19305},[36,41456,70],{"emptyLinePlaceholder":69},[36,41458,41459],{"class":38,"line":34985},[36,41460,41461],{"class":2621},"# 验证模型\n",[36,41463,41464,41466,41468,41470,41473],{"class":38,"line":34991},[36,41465,3948],{"class":46},[36,41467,33575],{"class":62},[36,41469,5334],{"class":46},[36,41471,41472],{"class":50},"'__main__'",[36,41474,153],{"class":42},[36,41476,41477,41479,41481,41483,41485,41487,41489,41491,41493],{"class":38,"line":34997},[36,41478,33592],{"class":42},[36,41480,47],{"class":46},[36,41482,32816],{"class":42},[36,41484,33599],{"class":50},[36,41486,4108],{"class":46},[36,41488,33604],{"class":42},[36,41490,4105],{"class":46},[36,41492,32841],{"class":50},[36,41494,123],{"class":42},[36,41496,41497,41499],{"class":38,"line":35003},[36,41498,89],{"class":62},[36,41500,32850],{"class":42},[36,41502,41503,41505,41507],{"class":38,"line":35009},[36,41504,33644],{"class":42},[36,41506,47],{"class":46},[36,41508,41509],{"class":42},"VGG16().to(device)\n",[36,41511,41512,41514,41516,41518,41520,41522,41524,41526],{"class":38,"line":35020},[36,41513,89],{"class":62},[36,41515,33656],{"class":42},[36,41517,1906],{"class":62},[36,41519,2934],{"class":42},[36,41521,33855],{"class":62},[36,41523,2934],{"class":42},[36,41525,33855],{"class":62},[36,41527,33669],{"class":42},[650,41529,41530],{"start":54},[653,41531,41532],{},"训练代码",[19,41534,41535],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41537,41538],{},"解决方式:",[19,41540,41541],{},"①权重初始化",[26,41543,41545],{"className":28,"code":41544,"language":30,"meta":31,"style":31},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[33,41546,41547,41552,41557,41569,41574,41582,41587,41600,41605,41619,41624,41633,41638,41647,41652,41657,41670,41675,41689],{"__ignoreMap":31},[36,41548,41549],{"class":38,"line":39},[36,41550,41551],{"class":2621},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,41553,41554],{"class":38,"line":54},[36,41555,41556],{"class":2621},"# 循环遍历模型\n",[36,41558,41559,41561,41563,41565,41567],{"class":38,"line":66},[36,41560,5410],{"class":46},[36,41562,41218],{"class":42},[36,41564,28413],{"class":46},[36,41566,868],{"class":62},[36,41568,41225],{"class":42},[36,41570,41571],{"class":38,"line":73},[36,41572,41573],{"class":2621},"    # print(m)\n",[36,41575,41576,41578,41580],{"class":38,"line":86},[36,41577,5486],{"class":46},[36,41579,41237],{"class":62},[36,41581,41240],{"class":42},[36,41583,41584],{"class":38,"line":126},[36,41585,41586],{"class":2621},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,41588,41589,41592,41594,41596,41598],{"class":38,"line":131},[36,41590,41591],{"class":42},"        nn.init.kaiming_normal_(m.weight,",[36,41593,41253],{"class":7598},[36,41595,47],{"class":46},[36,41597,41258],{"class":50},[36,41599,123],{"class":42},[36,41601,41602],{"class":38,"line":225},[36,41603,41604],{"class":2621},"        # 判断b参数是否存在\n",[36,41606,41607,41609,41611,41613,41615,41617],{"class":38,"line":235},[36,41608,890],{"class":46},[36,41610,41273],{"class":42},[36,41612,41276],{"class":46},[36,41614,41279],{"class":46},[36,41616,41282],{"class":62},[36,41618,153],{"class":42},[36,41620,41621],{"class":38,"line":377},[36,41622,41623],{"class":2621},"            # 如果参数不存在的化初始化b=0\n",[36,41625,41626,41629,41631],{"class":38,"line":617},[36,41627,41628],{"class":42},"            nn.init.constant_(m.bias,",[36,41630,2751],{"class":62},[36,41632,123],{"class":42},[36,41634,41635],{"class":38,"line":643},[36,41636,41637],{"class":2621},"    # 全连接层初始化\n",[36,41639,41640,41643,41645],{"class":38,"line":921},[36,41641,41642],{"class":46},"    elif",[36,41644,41237],{"class":62},[36,41646,41313],{"class":42},[36,41648,41649],{"class":38,"line":934},[36,41650,41651],{"class":2621},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,41653,41654],{"class":38,"line":939},[36,41655,41656],{"class":2621},"        # 均值为0，方差为0.01\n",[36,41658,41659,41662,41664,41666,41668],{"class":38,"line":949},[36,41660,41661],{"class":42},"        nn.init.normal_(m.weight,",[36,41663,2751],{"class":62},[36,41665,2934],{"class":42},[36,41667,41335],{"class":62},[36,41669,123],{"class":42},[36,41671,41672],{"class":38,"line":962},[36,41673,41674],{"class":2621},"        # 初始化b参数\n",[36,41676,41677,41679,41681,41683,41685,41687],{"class":38,"line":974},[36,41678,890],{"class":46},[36,41680,41273],{"class":42},[36,41682,41276],{"class":46},[36,41684,41279],{"class":46},[36,41686,41282],{"class":62},[36,41688,153],{"class":42},[36,41690,41691,41693,41695],{"class":38,"line":979},[36,41692,41628],{"class":42},[36,41694,2751],{"class":62},[36,41696,123],{"class":42},[19,41698,41699],{},"②尽可能地增加批次",[19,41701,41702],{},"训练完整代码：",[26,41704,41705],{"className":28,"code":40250,"language":30,"meta":31,"style":31},[33,41706,41707,41713,41723,41733,41743,41747,41763,41771,41789,41793,41797,41807,41843,41847,41883,41887,41915,41919,41923,41933,41969,41973,42009,42013,42041,42045,42049,42059,42095,42099,42135,42139,42175,42179,42207,42211,42215,42225,42261,42265,42301,42305,42341,42345,42373,42377,42381,42391,42427,42431,42467,42471,42507,42511,42539,42543,42547,42557,42561,42565,42569,42589,42593,42605,42609,42621,42625,42629,42633,42637,42649,42653,42661,42665,42677,42681,42695,42699,42707,42711,42719,42723,42727,42739,42743,42757,42765,42769,42773,42781,42791,42801,42811,42821,42831,42841,42847,42851,42855,42867,42887,42893,42901],{"__ignoreMap":31},[36,41708,41709,41711],{"class":38,"line":39},[36,41710,1943],{"class":46},[36,41712,32761],{"class":42},[36,41714,41715,41717,41719,41721],{"class":38,"line":54},[36,41716,1937],{"class":46},[36,41718,40265],{"class":42},[36,41720,1943],{"class":46},[36,41722,40270],{"class":42},[36,41724,41725,41727,41729,41731],{"class":38,"line":66},[36,41726,1937],{"class":46},[36,41728,33103],{"class":42},[36,41730,1943],{"class":46},[36,41732,33108],{"class":42},[36,41734,41735,41737,41739,41741],{"class":38,"line":73},[36,41736,1937],{"class":46},[36,41738,33120],{"class":42},[36,41740,1943],{"class":46},[36,41742,33125],{"class":42},[36,41744,41745],{"class":38,"line":86},[36,41746,70],{"emptyLinePlaceholder":69},[36,41748,41749,41751,41753,41755,41757,41759,41761],{"class":38,"line":126},[36,41750,147],{"class":46},[36,41752,40301],{"class":79},[36,41754,92],{"class":42},[36,41756,33141],{"class":79},[36,41758,3113],{"class":42},[36,41760,33146],{"class":79},[36,41762,1147],{"class":42},[36,41764,41765,41767,41769],{"class":38,"line":131},[36,41766,158],{"class":46},[36,41768,515],{"class":62},[36,41770,163],{"class":42},[36,41772,41773,41775,41777,41779,41781,41783,41785,41787],{"class":38,"line":225},[36,41774,1432],{"class":62},[36,41776,92],{"class":42},[36,41778,40328],{"class":62},[36,41780,630],{"class":42},[36,41782,481],{"class":62},[36,41784,33183],{"class":42},[36,41786,494],{"class":62},[36,41788,4369],{"class":42},[36,41790,41791],{"class":38,"line":235},[36,41792,40343],{"class":2621},[36,41794,41795],{"class":38,"line":377},[36,41796,40348],{"class":2621},[36,41798,41799,41801,41803,41805],{"class":38,"line":617},[36,41800,523],{"class":62},[36,41802,40355],{"class":42},[36,41804,47],{"class":46},[36,41806,40360],{"class":42},[36,41808,41809,41811,41813,41815,41817,41819,41821,41823,41825,41827,41829,41831,41833,41835,41837,41839,41841],{"class":38,"line":643},[36,41810,40365],{"class":42},[36,41812,33211],{"class":7598},[36,41814,47],{"class":46},[36,41816,1906],{"class":62},[36,41818,2934],{"class":42},[36,41820,33220],{"class":7598},[36,41822,47],{"class":46},[36,41824,2763],{"class":62},[36,41826,2934],{"class":42},[36,41828,33229],{"class":7598},[36,41830,47],{"class":46},[36,41832,2634],{"class":62},[36,41834,2934],{"class":42},[36,41836,33238],{"class":7598},[36,41838,47],{"class":46},[36,41840,1906],{"class":62},[36,41842,40398],{"class":42},[36,41844,41845],{"class":38,"line":921},[36,41846,40403],{"class":42},[36,41848,41849,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881],{"class":38,"line":934},[36,41850,40365],{"class":42},[36,41852,33211],{"class":7598},[36,41854,47],{"class":46},[36,41856,2763],{"class":62},[36,41858,2934],{"class":42},[36,41860,33220],{"class":7598},[36,41862,47],{"class":46},[36,41864,2763],{"class":62},[36,41866,2934],{"class":42},[36,41868,33229],{"class":7598},[36,41870,47],{"class":46},[36,41872,2634],{"class":62},[36,41874,2934],{"class":42},[36,41876,33238],{"class":7598},[36,41878,47],{"class":46},[36,41880,1906],{"class":62},[36,41882,40398],{"class":42},[36,41884,41885],{"class":38,"line":939},[36,41886,40403],{"class":42},[36,41888,41889,41891,41893,41895,41897,41899,41901,41903,41905,41907,41909,41911,41913],{"class":38,"line":949},[36,41890,40448],{"class":42},[36,41892,33229],{"class":7598},[36,41894,47],{"class":46},[36,41896,1911],{"class":62},[36,41898,2934],{"class":42},[36,41900,33284],{"class":7598},[36,41902,47],{"class":46},[36,41904,1911],{"class":62},[36,41906,2934],{"class":42},[36,41908,33238],{"class":7598},[36,41910,47],{"class":46},[36,41912,2751],{"class":62},[36,41914,123],{"class":42},[36,41916,41917],{"class":38,"line":962},[36,41918,2276],{"class":42},[36,41920,41921],{"class":38,"line":974},[36,41922,40481],{"class":2621},[36,41924,41925,41927,41929,41931],{"class":38,"line":979},[36,41926,523],{"class":62},[36,41928,40488],{"class":42},[36,41930,47],{"class":46},[36,41932,40360],{"class":42},[36,41934,41935,41937,41939,41941,41943,41945,41947,41949,41951,41953,41955,41957,41959,41961,41963,41965,41967],{"class":38,"line":994},[36,41936,40365],{"class":42},[36,41938,33211],{"class":7598},[36,41940,47],{"class":46},[36,41942,2763],{"class":62},[36,41944,2934],{"class":42},[36,41946,33220],{"class":7598},[36,41948,47],{"class":46},[36,41950,34423],{"class":62},[36,41952,2934],{"class":42},[36,41954,33229],{"class":7598},[36,41956,47],{"class":46},[36,41958,2634],{"class":62},[36,41960,2934],{"class":42},[36,41962,33238],{"class":7598},[36,41964,47],{"class":46},[36,41966,1906],{"class":62},[36,41968,40398],{"class":42},[36,41970,41971],{"class":38,"line":1006},[36,41972,40403],{"class":42},[36,41974,41975,41977,41979,41981,41983,41985,41987,41989,41991,41993,41995,41997,41999,42001,42003,42005,42007],{"class":38,"line":1011},[36,41976,40365],{"class":42},[36,41978,33211],{"class":7598},[36,41980,47],{"class":46},[36,41982,34423],{"class":62},[36,41984,2934],{"class":42},[36,41986,33220],{"class":7598},[36,41988,47],{"class":46},[36,41990,34423],{"class":62},[36,41992,2934],{"class":42},[36,41994,33229],{"class":7598},[36,41996,47],{"class":46},[36,41998,2634],{"class":62},[36,42000,2934],{"class":42},[36,42002,33238],{"class":7598},[36,42004,47],{"class":46},[36,42006,1906],{"class":62},[36,42008,40398],{"class":42},[36,42010,42011],{"class":38,"line":1023},[36,42012,40403],{"class":42},[36,42014,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039],{"class":38,"line":1028},[36,42016,40448],{"class":42},[36,42018,33229],{"class":7598},[36,42020,47],{"class":46},[36,42022,1911],{"class":62},[36,42024,2934],{"class":42},[36,42026,33284],{"class":7598},[36,42028,47],{"class":46},[36,42030,1911],{"class":62},[36,42032,2934],{"class":42},[36,42034,33238],{"class":7598},[36,42036,47],{"class":46},[36,42038,2751],{"class":62},[36,42040,123],{"class":42},[36,42042,42043],{"class":38,"line":1033},[36,42044,2276],{"class":42},[36,42046,42047],{"class":38,"line":1053},[36,42048,40609],{"class":2621},[36,42050,42051,42053,42055,42057],{"class":38,"line":1064},[36,42052,523],{"class":62},[36,42054,40616],{"class":42},[36,42056,47],{"class":46},[36,42058,40360],{"class":42},[36,42060,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093],{"class":38,"line":1075},[36,42062,40365],{"class":42},[36,42064,33211],{"class":7598},[36,42066,47],{"class":46},[36,42068,34423],{"class":62},[36,42070,2934],{"class":42},[36,42072,33220],{"class":7598},[36,42074,47],{"class":46},[36,42076,37221],{"class":62},[36,42078,2934],{"class":42},[36,42080,33229],{"class":7598},[36,42082,47],{"class":46},[36,42084,2634],{"class":62},[36,42086,2934],{"class":42},[36,42088,33238],{"class":7598},[36,42090,47],{"class":46},[36,42092,1906],{"class":62},[36,42094,40398],{"class":42},[36,42096,42097],{"class":38,"line":2291},[36,42098,40403],{"class":42},[36,42100,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133],{"class":38,"line":2329},[36,42102,40365],{"class":42},[36,42104,33211],{"class":7598},[36,42106,47],{"class":46},[36,42108,37221],{"class":62},[36,42110,2934],{"class":42},[36,42112,33220],{"class":7598},[36,42114,47],{"class":46},[36,42116,37221],{"class":62},[36,42118,2934],{"class":42},[36,42120,33229],{"class":7598},[36,42122,47],{"class":46},[36,42124,2634],{"class":62},[36,42126,2934],{"class":42},[36,42128,33238],{"class":7598},[36,42130,47],{"class":46},[36,42132,1906],{"class":62},[36,42134,40398],{"class":42},[36,42136,42137],{"class":38,"line":2334},[36,42138,40403],{"class":42},[36,42140,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173],{"class":38,"line":2339},[36,42142,40365],{"class":42},[36,42144,33211],{"class":7598},[36,42146,47],{"class":46},[36,42148,37221],{"class":62},[36,42150,2934],{"class":42},[36,42152,33220],{"class":7598},[36,42154,47],{"class":46},[36,42156,37221],{"class":62},[36,42158,2934],{"class":42},[36,42160,33229],{"class":7598},[36,42162,47],{"class":46},[36,42164,2634],{"class":62},[36,42166,2934],{"class":42},[36,42168,33238],{"class":7598},[36,42170,47],{"class":46},[36,42172,1906],{"class":62},[36,42174,40398],{"class":42},[36,42176,42177],{"class":38,"line":2365},[36,42178,40403],{"class":42},[36,42180,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205],{"class":38,"line":2373},[36,42182,40448],{"class":42},[36,42184,33229],{"class":7598},[36,42186,47],{"class":46},[36,42188,1911],{"class":62},[36,42190,2934],{"class":42},[36,42192,33284],{"class":7598},[36,42194,47],{"class":46},[36,42196,1911],{"class":62},[36,42198,2934],{"class":42},[36,42200,33238],{"class":7598},[36,42202,47],{"class":46},[36,42204,2751],{"class":62},[36,42206,123],{"class":42},[36,42208,42209],{"class":38,"line":5001},[36,42210,2276],{"class":42},[36,42212,42213],{"class":38,"line":5006},[36,42214,40777],{"class":2621},[36,42216,42217,42219,42221,42223],{"class":38,"line":10328},[36,42218,523],{"class":62},[36,42220,40784],{"class":42},[36,42222,47],{"class":46},[36,42224,40360],{"class":42},[36,42226,42227,42229,42231,42233,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253,42255,42257,42259],{"class":38,"line":10352},[36,42228,40365],{"class":42},[36,42230,33211],{"class":7598},[36,42232,47],{"class":46},[36,42234,37221],{"class":62},[36,42236,2934],{"class":42},[36,42238,33220],{"class":7598},[36,42240,47],{"class":46},[36,42242,40807],{"class":62},[36,42244,2934],{"class":42},[36,42246,33229],{"class":7598},[36,42248,47],{"class":46},[36,42250,2634],{"class":62},[36,42252,2934],{"class":42},[36,42254,33238],{"class":7598},[36,42256,47],{"class":46},[36,42258,1906],{"class":62},[36,42260,40398],{"class":42},[36,42262,42263],{"class":38,"line":10357},[36,42264,40403],{"class":42},[36,42266,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299],{"class":38,"line":10363},[36,42268,40365],{"class":42},[36,42270,33211],{"class":7598},[36,42272,47],{"class":46},[36,42274,40807],{"class":62},[36,42276,2934],{"class":42},[36,42278,33220],{"class":7598},[36,42280,47],{"class":46},[36,42282,40807],{"class":62},[36,42284,2934],{"class":42},[36,42286,33229],{"class":7598},[36,42288,47],{"class":46},[36,42290,2634],{"class":62},[36,42292,2934],{"class":42},[36,42294,33238],{"class":7598},[36,42296,47],{"class":46},[36,42298,1906],{"class":62},[36,42300,40398],{"class":42},[36,42302,42303],{"class":38,"line":10390},[36,42304,40403],{"class":42},[36,42306,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325,42327,42329,42331,42333,42335,42337,42339],{"class":38,"line":10395},[36,42308,40365],{"class":42},[36,42310,33211],{"class":7598},[36,42312,47],{"class":46},[36,42314,40807],{"class":62},[36,42316,2934],{"class":42},[36,42318,33220],{"class":7598},[36,42320,47],{"class":46},[36,42322,40807],{"class":62},[36,42324,2934],{"class":42},[36,42326,33229],{"class":7598},[36,42328,47],{"class":46},[36,42330,2634],{"class":62},[36,42332,2934],{"class":42},[36,42334,33238],{"class":7598},[36,42336,47],{"class":46},[36,42338,1906],{"class":62},[36,42340,40398],{"class":42},[36,42342,42343],{"class":38,"line":10401},[36,42344,40403],{"class":42},[36,42346,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371],{"class":38,"line":10413},[36,42348,40448],{"class":42},[36,42350,33229],{"class":7598},[36,42352,47],{"class":46},[36,42354,1911],{"class":62},[36,42356,2934],{"class":42},[36,42358,33284],{"class":7598},[36,42360,47],{"class":46},[36,42362,1911],{"class":62},[36,42364,2934],{"class":42},[36,42366,33238],{"class":7598},[36,42368,47],{"class":46},[36,42370,2751],{"class":62},[36,42372,123],{"class":42},[36,42374,42375],{"class":38,"line":10425},[36,42376,2276],{"class":42},[36,42378,42379],{"class":38,"line":10437},[36,42380,40946],{"class":2621},[36,42382,42383,42385,42387,42389],{"class":38,"line":12095},[36,42384,523],{"class":62},[36,42386,40953],{"class":42},[36,42388,47],{"class":46},[36,42390,40360],{"class":42},[36,42392,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425],{"class":38,"line":12120},[36,42394,40365],{"class":42},[36,42396,33211],{"class":7598},[36,42398,47],{"class":46},[36,42400,40807],{"class":62},[36,42402,2934],{"class":42},[36,42404,33220],{"class":7598},[36,42406,47],{"class":46},[36,42408,40807],{"class":62},[36,42410,2934],{"class":42},[36,42412,33229],{"class":7598},[36,42414,47],{"class":46},[36,42416,2634],{"class":62},[36,42418,2934],{"class":42},[36,42420,33238],{"class":7598},[36,42422,47],{"class":46},[36,42424,1906],{"class":62},[36,42426,40398],{"class":42},[36,42428,42429],{"class":38,"line":12143},[36,42430,40403],{"class":42},[36,42432,42433,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465],{"class":38,"line":12167},[36,42434,40365],{"class":42},[36,42436,33211],{"class":7598},[36,42438,47],{"class":46},[36,42440,40807],{"class":62},[36,42442,2934],{"class":42},[36,42444,33220],{"class":7598},[36,42446,47],{"class":46},[36,42448,40807],{"class":62},[36,42450,2934],{"class":42},[36,42452,33229],{"class":7598},[36,42454,47],{"class":46},[36,42456,2634],{"class":62},[36,42458,2934],{"class":42},[36,42460,33238],{"class":7598},[36,42462,47],{"class":46},[36,42464,1906],{"class":62},[36,42466,40398],{"class":42},[36,42468,42469],{"class":38,"line":12172},[36,42470,40403],{"class":42},[36,42472,42473,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505],{"class":38,"line":12177},[36,42474,40365],{"class":42},[36,42476,33211],{"class":7598},[36,42478,47],{"class":46},[36,42480,40807],{"class":62},[36,42482,2934],{"class":42},[36,42484,33220],{"class":7598},[36,42486,47],{"class":46},[36,42488,40807],{"class":62},[36,42490,2934],{"class":42},[36,42492,33229],{"class":7598},[36,42494,47],{"class":46},[36,42496,2634],{"class":62},[36,42498,2934],{"class":42},[36,42500,33238],{"class":7598},[36,42502,47],{"class":46},[36,42504,1906],{"class":62},[36,42506,40398],{"class":42},[36,42508,42509],{"class":38,"line":12182},[36,42510,40403],{"class":42},[36,42512,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537],{"class":38,"line":12191},[36,42514,40448],{"class":42},[36,42516,33229],{"class":7598},[36,42518,47],{"class":46},[36,42520,1911],{"class":62},[36,42522,2934],{"class":42},[36,42524,33284],{"class":7598},[36,42526,47],{"class":46},[36,42528,1911],{"class":62},[36,42530,2934],{"class":42},[36,42532,33238],{"class":7598},[36,42534,47],{"class":46},[36,42536,2751],{"class":62},[36,42538,123],{"class":42},[36,42540,42541],{"class":38,"line":12196},[36,42542,2276],{"class":42},[36,42544,42545],{"class":38,"line":12202},[36,42546,41114],{"class":2621},[36,42548,42549,42551,42553,42555],{"class":38,"line":12223},[36,42550,523],{"class":62},[36,42552,41121],{"class":42},[36,42554,47],{"class":46},[36,42556,40360],{"class":42},[36,42558,42559],{"class":38,"line":12229},[36,42560,41130],{"class":2621},[36,42562,42563],{"class":38,"line":12243},[36,42564,41135],{"class":2621},[36,42566,42567],{"class":38,"line":12249},[36,42568,41140],{"class":42},[36,42570,42571,42573,42575,42577,42579,42581,42583,42585,42587],{"class":38,"line":12276},[36,42572,41145],{"class":42},[36,42574,2925],{"class":62},[36,42576,3011],{"class":46},[36,42578,2925],{"class":62},[36,42580,3011],{"class":46},[36,42582,40807],{"class":62},[36,42584,2934],{"class":42},[36,42586,37221],{"class":62},[36,42588,40398],{"class":42},[36,42590,42591],{"class":38,"line":12285},[36,42592,40403],{"class":42},[36,42594,42595,42597,42599,42601,42603],{"class":38,"line":12291},[36,42596,41145],{"class":42},[36,42598,37221],{"class":62},[36,42600,2934],{"class":42},[36,42602,34423],{"class":62},[36,42604,40398],{"class":42},[36,42606,42607],{"class":38,"line":12299},[36,42608,40403],{"class":42},[36,42610,42611,42613,42615,42617,42619],{"class":38,"line":12304},[36,42612,41145],{"class":42},[36,42614,34423],{"class":62},[36,42616,2934],{"class":42},[36,42618,3002],{"class":62},[36,42620,123],{"class":42},[36,42622,42623],{"class":38,"line":18977},[36,42624,2276],{"class":42},[36,42626,42627],{"class":38,"line":18983},[36,42628,70],{"emptyLinePlaceholder":69},[36,42630,42631],{"class":38,"line":19006},[36,42632,41206],{"class":2621},[36,42634,42635],{"class":38,"line":19012},[36,42636,41211],{"class":2621},[36,42638,42639,42641,42643,42645,42647],{"class":38,"line":19035},[36,42640,5788],{"class":46},[36,42642,41218],{"class":42},[36,42644,28413],{"class":46},[36,42646,868],{"class":62},[36,42648,41225],{"class":42},[36,42650,42651],{"class":38,"line":19049},[36,42652,41230],{"class":2621},[36,42654,42655,42657,42659],{"class":38,"line":19069},[36,42656,7025],{"class":46},[36,42658,41237],{"class":62},[36,42660,41240],{"class":42},[36,42662,42663],{"class":38,"line":19075},[36,42664,41245],{"class":2621},[36,42666,42667,42669,42671,42673,42675],{"class":38,"line":19086},[36,42668,41250],{"class":42},[36,42670,41253],{"class":7598},[36,42672,47],{"class":46},[36,42674,41258],{"class":50},[36,42676,123],{"class":42},[36,42678,42679],{"class":38,"line":19109},[36,42680,41265],{"class":2621},[36,42682,42683,42685,42687,42689,42691,42693],{"class":38,"line":19131},[36,42684,41270],{"class":46},[36,42686,41273],{"class":42},[36,42688,41276],{"class":46},[36,42690,41279],{"class":46},[36,42692,41282],{"class":62},[36,42694,153],{"class":42},[36,42696,42697],{"class":38,"line":19136},[36,42698,41289],{"class":2621},[36,42700,42701,42703,42705],{"class":38,"line":19142},[36,42702,41294],{"class":42},[36,42704,2751],{"class":62},[36,42706,123],{"class":42},[36,42708,42709],{"class":38,"line":19156},[36,42710,41303],{"class":2621},[36,42712,42713,42715,42717],{"class":38,"line":19169},[36,42714,41308],{"class":46},[36,42716,41237],{"class":62},[36,42718,41313],{"class":42},[36,42720,42721],{"class":38,"line":19174},[36,42722,41318],{"class":2621},[36,42724,42725],{"class":38,"line":19188},[36,42726,41323],{"class":2621},[36,42728,42729,42731,42733,42735,42737],{"class":38,"line":19193},[36,42730,41328],{"class":42},[36,42732,2751],{"class":62},[36,42734,2934],{"class":42},[36,42736,41335],{"class":62},[36,42738,123],{"class":42},[36,42740,42741],{"class":38,"line":19199},[36,42742,41342],{"class":2621},[36,42744,42745,42747,42749,42751,42753,42755],{"class":38,"line":19204},[36,42746,41270],{"class":46},[36,42748,41273],{"class":42},[36,42750,41276],{"class":46},[36,42752,41279],{"class":46},[36,42754,41282],{"class":62},[36,42756,153],{"class":42},[36,42758,42759,42761,42763],{"class":38,"line":19218},[36,42760,41294],{"class":42},[36,42762,2751],{"class":62},[36,42764,123],{"class":42},[36,42766,42767],{"class":38,"line":19223},[36,42768,70],{"emptyLinePlaceholder":69},[36,42770,42771],{"class":38,"line":19228},[36,42772,37516],{"class":2621},[36,42774,42775,42777,42779],{"class":38,"line":19242},[36,42776,158],{"class":46},[36,42778,33448],{"class":79},[36,42780,33451],{"class":42},[36,42782,42783,42785,42787,42789],{"class":38,"line":19254},[36,42784,33456],{"class":42},[36,42786,47],{"class":46},[36,42788,481],{"class":62},[36,42790,41391],{"class":42},[36,42792,42793,42795,42797,42799],{"class":38,"line":19259},[36,42794,33456],{"class":42},[36,42796,47],{"class":46},[36,42798,481],{"class":62},[36,42800,41402],{"class":42},[36,42802,42803,42805,42807,42809],{"class":38,"line":19272},[36,42804,33456],{"class":42},[36,42806,47],{"class":46},[36,42808,481],{"class":62},[36,42810,41413],{"class":42},[36,42812,42813,42815,42817,42819],{"class":38,"line":19277},[36,42814,33456],{"class":42},[36,42816,47],{"class":46},[36,42818,481],{"class":62},[36,42820,41424],{"class":42},[36,42822,42823,42825,42827,42829],{"class":38,"line":19282},[36,42824,33456],{"class":42},[36,42826,47],{"class":46},[36,42828,481],{"class":62},[36,42830,41435],{"class":42},[36,42832,42833,42835,42837,42839],{"class":38,"line":19287},[36,42834,33456],{"class":42},[36,42836,47],{"class":46},[36,42838,481],{"class":62},[36,42840,41446],{"class":42},[36,42842,42843,42845],{"class":38,"line":19300},[36,42844,736],{"class":46},[36,42846,33564],{"class":42},[36,42848,42849],{"class":38,"line":19305},[36,42850,70],{"emptyLinePlaceholder":69},[36,42852,42853],{"class":38,"line":34985},[36,42854,41461],{"class":2621},[36,42856,42857,42859,42861,42863,42865],{"class":38,"line":34991},[36,42858,3948],{"class":46},[36,42860,33575],{"class":62},[36,42862,5334],{"class":46},[36,42864,41472],{"class":50},[36,42866,153],{"class":42},[36,42868,42869,42871,42873,42875,42877,42879,42881,42883,42885],{"class":38,"line":34997},[36,42870,33592],{"class":42},[36,42872,47],{"class":46},[36,42874,32816],{"class":42},[36,42876,33599],{"class":50},[36,42878,4108],{"class":46},[36,42880,33604],{"class":42},[36,42882,4105],{"class":46},[36,42884,32841],{"class":50},[36,42886,123],{"class":42},[36,42888,42889,42891],{"class":38,"line":35003},[36,42890,89],{"class":62},[36,42892,32850],{"class":42},[36,42894,42895,42897,42899],{"class":38,"line":35009},[36,42896,33644],{"class":42},[36,42898,47],{"class":46},[36,42900,41509],{"class":42},[36,42902,42903,42905,42907,42909,42911,42913,42915,42917],{"class":38,"line":35020},[36,42904,89],{"class":62},[36,42906,33656],{"class":42},[36,42908,1906],{"class":62},[36,42910,2934],{"class":42},[36,42912,33855],{"class":62},[36,42914,2934],{"class":42},[36,42916,33855],{"class":62},[36,42918,33669],{"class":42},[650,42920,42921],{"start":66},[653,42922,42923],{},"测试代码",[26,42925,42927],{"className":28,"code":42926,"language":30,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,42928,42929,42935,42945,42955,42959,42969,42980,42984,42988,42992,43000,43016,43026,43042,43052,43066,43070,43080,43090,43100,43106,43110,43114,43122,43126,43142,43150,43154,43158,43166,43174,43178,43182,43186,43190,43196,43200,43210,43218,43226,43230,43234,43238,43246,43250,43266,43270,43274,43278,43290,43294,43306,43310,43314,43326,43330,43340,43344,43348,43360,43364,43373,43377,43381,43389,43393,43401,43405,43409,43413,43417,43421,43437,43445,43449,43453,43501,43507,43511,43521,43529,43537,43541,43545,43549,43553,43561,43565,43581,43585,43593,43601],{"__ignoreMap":31},[36,42930,42931,42933],{"class":38,"line":39},[36,42932,1943],{"class":46},[36,42934,32761],{"class":42},[36,42936,42937,42939,42941,42943],{"class":38,"line":54},[36,42938,1943],{"class":46},[36,42940,33769],{"class":42},[36,42942,33737],{"class":46},[36,42944,33774],{"class":42},[36,42946,42947,42949,42951,42953],{"class":38,"line":66},[36,42948,1937],{"class":46},[36,42950,33752],{"class":42},[36,42952,1943],{"class":46},[36,42954,33757],{"class":42},[36,42956,42957],{"class":38,"line":73},[36,42958,36274],{"class":2621},[36,42960,42961,42963,42965,42967],{"class":38,"line":86},[36,42962,1937],{"class":46},[36,42964,33722],{"class":42},[36,42966,1943],{"class":46},[36,42968,33727],{"class":42},[36,42970,42971,42973,42975,42977],{"class":38,"line":126},[36,42972,1937],{"class":46},[36,42974,34268],{"class":42},[36,42976,1943],{"class":46},[36,42978,42979],{"class":62}," VGG16\n",[36,42981,42982],{"class":38,"line":131},[36,42983,70],{"emptyLinePlaceholder":69},[36,42985,42986],{"class":38,"line":225},[36,42987,70],{"emptyLinePlaceholder":69},[36,42989,42990],{"class":38,"line":235},[36,42991,36303],{"class":2621},[36,42993,42994,42996,42998],{"class":38,"line":377},[36,42995,76],{"class":46},[36,42997,36310],{"class":79},[36,42999,34306],{"class":42},[36,43001,43002,43004,43006,43008,43010,43012,43014],{"class":38,"line":617},[36,43003,36317],{"class":42},[36,43005,47],{"class":46},[36,43007,33809],{"class":42},[36,43009,33812],{"class":7598},[36,43011,47],{"class":46},[36,43013,33817],{"class":50},[36,43015,33820],{"class":42},[36,43017,43018,43020,43022,43024],{"class":38,"line":643},[36,43019,36334],{"class":7598},[36,43021,47],{"class":46},[36,43023,36339],{"class":62},[36,43025,33820],{"class":42},[36,43027,43028,43030,43032,43034,43036,43038,43040],{"class":38,"line":921},[36,43029,36346],{"class":7598},[36,43031,47],{"class":46},[36,43033,33847],{"class":42},[36,43035,33850],{"class":7598},[36,43037,47],{"class":46},[36,43039,33855],{"class":62},[36,43041,33858],{"class":42},[36,43043,43044,43046,43048,43050],{"class":38,"line":934},[36,43045,36363],{"class":7598},[36,43047,47],{"class":46},[36,43049,33830],{"class":62},[36,43051,123],{"class":42},[36,43053,43054,43056,43058,43060,43062,43064],{"class":38,"line":939},[36,43055,36374],{"class":42},[36,43057,47],{"class":46},[36,43059,33888],{"class":42},[36,43061,33891],{"class":7598},[36,43063,47],{"class":46},[36,43065,36385],{"class":42},[36,43067,43068],{"class":38,"line":949},[36,43069,36390],{"class":2621},[36,43071,43072,43074,43076,43078],{"class":38,"line":962},[36,43073,36395],{"class":7598},[36,43075,47],{"class":46},[36,43077,1906],{"class":62},[36,43079,33820],{"class":42},[36,43081,43082,43084,43086,43088],{"class":38,"line":974},[36,43083,36406],{"class":7598},[36,43085,47],{"class":46},[36,43087,33830],{"class":62},[36,43089,33820],{"class":42},[36,43091,43092,43094,43096,43098],{"class":38,"line":979},[36,43093,36417],{"class":7598},[36,43095,47],{"class":46},[36,43097,2751],{"class":62},[36,43099,123],{"class":42},[36,43101,43102,43104],{"class":38,"line":994},[36,43103,6474],{"class":46},[36,43105,36430],{"class":42},[36,43107,43108],{"class":38,"line":1006},[36,43109,70],{"emptyLinePlaceholder":69},[36,43111,43112],{"class":38,"line":1011},[36,43113,36439],{"class":2621},[36,43115,43116,43118,43120],{"class":38,"line":1023},[36,43117,76],{"class":46},[36,43119,36446],{"class":79},[36,43121,36449],{"class":42},[36,43123,43124],{"class":38,"line":1028},[36,43125,36454],{"class":2621},[36,43127,43128,43130,43132,43134,43136,43138,43140],{"class":38,"line":1033},[36,43129,33592],{"class":42},[36,43131,47],{"class":46},[36,43133,33599],{"class":50},[36,43135,4108],{"class":46},[36,43137,33604],{"class":42},[36,43139,4105],{"class":46},[36,43141,36471],{"class":50},[36,43143,43144,43146,43148],{"class":38,"line":1053},[36,43145,33644],{"class":42},[36,43147,47],{"class":46},[36,43149,34642],{"class":42},[36,43151,43152],{"class":38,"line":1064},[36,43153,70],{"emptyLinePlaceholder":69},[36,43155,43156],{"class":38,"line":1075},[36,43157,36488],{"class":2621},[36,43159,43160,43162,43164],{"class":38,"line":2291},[36,43161,36493],{"class":42},[36,43163,47],{"class":46},[36,43165,34695],{"class":62},[36,43167,43168,43170,43172],{"class":38,"line":2329},[36,43169,36502],{"class":42},[36,43171,47],{"class":46},[36,43173,5470],{"class":62},[36,43175,43176],{"class":38,"line":2334},[36,43177,70],{"emptyLinePlaceholder":69},[36,43179,43180],{"class":38,"line":2339},[36,43181,36515],{"class":2621},[36,43183,43184],{"class":38,"line":2365},[36,43185,36520],{"class":2621},[36,43187,43188],{"class":38,"line":2373},[36,43189,36525],{"class":2621},[36,43191,43192,43194],{"class":38,"line":5001},[36,43193,36530],{"class":46},[36,43195,35236],{"class":42},[36,43197,43198],{"class":38,"line":5006},[36,43199,36537],{"class":2621},[36,43201,43202,43204,43206,43208],{"class":38,"line":10328},[36,43203,5788],{"class":46},[36,43205,36544],{"class":42},[36,43207,28413],{"class":46},[36,43209,36549],{"class":42},[36,43211,43212,43214,43216],{"class":38,"line":10352},[36,43213,36554],{"class":42},[36,43215,47],{"class":46},[36,43217,36559],{"class":42},[36,43219,43220,43222,43224],{"class":38,"line":10357},[36,43221,36564],{"class":42},[36,43223,47],{"class":46},[36,43225,36569],{"class":42},[36,43227,43228],{"class":38,"line":10363},[36,43229,36574],{"class":2621},[36,43231,43232],{"class":38,"line":10390},[36,43233,35227],{"class":42},[36,43235,43236],{"class":38,"line":10395},[36,43237,36583],{"class":2621},[36,43239,43240,43242,43244],{"class":38,"line":10401},[36,43241,35012],{"class":42},[36,43243,47],{"class":46},[36,43245,36592],{"class":42},[36,43247,43248],{"class":38,"line":10413},[36,43249,36597],{"class":2621},[36,43251,43252,43254,43256,43258,43260,43262,43264],{"class":38,"line":10425},[36,43253,35029],{"class":42},[36,43255,47],{"class":46},[36,43257,35034],{"class":42},[36,43259,35037],{"class":7598},[36,43261,47],{"class":46},[36,43263,1906],{"class":62},[36,43265,123],{"class":42},[36,43267,43268],{"class":38,"line":10437},[36,43269,36618],{"class":2621},[36,43271,43272],{"class":38,"line":12095},[36,43273,36623],{"class":2621},[36,43275,43276],{"class":38,"line":12120},[36,43277,36628],{"class":2621},[36,43279,43280,43282,43284,43286,43288],{"class":38,"line":12143},[36,43281,36633],{"class":42},[36,43283,928],{"class":46},[36,43285,35139],{"class":42},[36,43287,5334],{"class":46},[36,43289,36642],{"class":42},[36,43291,43292],{"class":38,"line":12167},[36,43293,36647],{"class":2621},[36,43295,43296,43298,43300,43302,43304],{"class":38,"line":12172},[36,43297,36652],{"class":42},[36,43299,928],{"class":46},[36,43301,36657],{"class":42},[36,43303,2751],{"class":62},[36,43305,123],{"class":42},[36,43307,43308],{"class":38,"line":12177},[36,43309,70],{"emptyLinePlaceholder":69},[36,43311,43312],{"class":38,"line":12182},[36,43313,36670],{"class":2621},[36,43315,43316,43318,43320,43322,43324],{"class":38,"line":12191},[36,43317,36675],{"class":42},[36,43319,47],{"class":46},[36,43321,36680],{"class":42},[36,43323,3139],{"class":46},[36,43325,36685],{"class":42},[36,43327,43328],{"class":38,"line":12196},[36,43329,36690],{"class":2621},[36,43331,43332,43334,43336,43338],{"class":38,"line":12202},[36,43333,168],{"class":62},[36,43335,92],{"class":42},[36,43337,36699],{"class":50},[36,43339,36702],{"class":42},[36,43341,43342],{"class":38,"line":12223},[36,43343,70],{"emptyLinePlaceholder":69},[36,43345,43346],{"class":38,"line":12229},[36,43347,36711],{"class":2621},[36,43349,43350,43352,43354,43356,43358],{"class":38,"line":12243},[36,43351,3948],{"class":46},[36,43353,33575],{"class":62},[36,43355,5334],{"class":46},[36,43357,33580],{"class":50},[36,43359,153],{"class":42},[36,43361,43362],{"class":38,"line":12249},[36,43363,36728],{"class":2621},[36,43365,43366,43368,43370],{"class":38,"line":12276},[36,43367,33644],{"class":42},[36,43369,47],{"class":46},[36,43371,43372],{"class":42},"VGG16()\n",[36,43374,43375],{"class":38,"line":12285},[36,43376,36741],{"class":2621},[36,43378,43379],{"class":38,"line":12291},[36,43380,36746],{"class":2621},[36,43382,43383,43385,43387],{"class":38,"line":12299},[36,43384,36751],{"class":42},[36,43386,36754],{"class":50},[36,43388,1914],{"class":42},[36,43390,43391],{"class":38,"line":12304},[36,43392,36761],{"class":2621},[36,43394,43395,43397,43399],{"class":38,"line":18977},[36,43396,36374],{"class":42},[36,43398,47],{"class":46},[36,43400,36770],{"class":42},[36,43402,43403],{"class":38,"line":18983},[36,43404,36775],{"class":2621},[36,43406,43407],{"class":38,"line":19006},[36,43408,36780],{"class":42},[36,43410,43411],{"class":38,"line":19012},[36,43412,70],{"emptyLinePlaceholder":69},[36,43414,43415],{"class":38,"line":19035},[36,43416,36789],{"class":2621},[36,43418,43419],{"class":38,"line":19049},[36,43420,36794],{"class":2621},[36,43422,43423,43425,43427,43429,43431,43433,43435],{"class":38,"line":19069},[36,43424,33592],{"class":42},[36,43426,47],{"class":46},[36,43428,33599],{"class":50},[36,43430,4108],{"class":46},[36,43432,33604],{"class":42},[36,43434,4105],{"class":46},[36,43436,36471],{"class":50},[36,43438,43439,43441,43443],{"class":38,"line":19075},[36,43440,33644],{"class":42},[36,43442,47],{"class":46},[36,43444,34642],{"class":42},[36,43446,43447],{"class":38,"line":19086},[36,43448,36823],{"class":2621},[36,43450,43451],{"class":38,"line":19109},[36,43452,36828],{"class":2621},[36,43454,43455,43457,43459,43461,43463,43465,43467,43469,43471,43473,43475,43477,43479,43481,43483,43485,43487,43489,43491,43493,43495,43497,43499],{"class":38,"line":19131},[36,43456,36833],{"class":42},[36,43458,47],{"class":46},[36,43460,3444],{"class":42},[36,43462,36840],{"class":50},[36,43464,2934],{"class":42},[36,43466,36845],{"class":50},[36,43468,2934],{"class":42},[36,43470,36850],{"class":50},[36,43472,2934],{"class":42},[36,43474,36855],{"class":50},[36,43476,2934],{"class":42},[36,43478,36860],{"class":50},[36,43480,2934],{"class":42},[36,43482,36865],{"class":50},[36,43484,2934],{"class":42},[36,43486,36870],{"class":50},[36,43488,2934],{"class":42},[36,43490,36875],{"class":50},[36,43492,2934],{"class":42},[36,43494,36880],{"class":50},[36,43496,2934],{"class":42},[36,43498,36885],{"class":50},[36,43500,35598],{"class":42},[36,43502,43503,43505],{"class":38,"line":19136},[36,43504,36530],{"class":46},[36,43506,35236],{"class":42},[36,43508,43509],{"class":38,"line":19142},[36,43510,36898],{"class":2621},[36,43512,43513,43515,43517,43519],{"class":38,"line":19156},[36,43514,5788],{"class":46},[36,43516,36905],{"class":42},[36,43518,28413],{"class":46},[36,43520,36549],{"class":42},[36,43522,43523,43525,43527],{"class":38,"line":19169},[36,43524,34962],{"class":42},[36,43526,47],{"class":46},[36,43528,34967],{"class":42},[36,43530,43531,43533,43535],{"class":38,"line":19174},[36,43532,34977],{"class":42},[36,43534,47],{"class":46},[36,43536,34982],{"class":42},[36,43538,43539],{"class":38,"line":19188},[36,43540,70],{"emptyLinePlaceholder":69},[36,43542,43543],{"class":38,"line":19193},[36,43544,36934],{"class":2621},[36,43546,43547],{"class":38,"line":19199},[36,43548,35227],{"class":42},[36,43550,43551],{"class":38,"line":19204},[36,43552,36943],{"class":2621},[36,43554,43555,43557,43559],{"class":38,"line":19218},[36,43556,35012],{"class":42},[36,43558,47],{"class":46},[36,43560,35017],{"class":42},[36,43562,43563],{"class":38,"line":19223},[36,43564,36956],{"class":2621},[36,43566,43567,43569,43571,43573,43575,43577,43579],{"class":38,"line":19228},[36,43568,35029],{"class":42},[36,43570,47],{"class":46},[36,43572,35034],{"class":42},[36,43574,35037],{"class":7598},[36,43576,47],{"class":46},[36,43578,1906],{"class":62},[36,43580,123],{"class":42},[36,43582,43583],{"class":38,"line":19242},[36,43584,36977],{"class":2621},[36,43586,43587,43589,43591],{"class":38,"line":19254},[36,43588,36982],{"class":42},[36,43590,47],{"class":46},[36,43592,36987],{"class":42},[36,43594,43595,43597,43599],{"class":38,"line":19259},[36,43596,36992],{"class":42},[36,43598,47],{"class":46},[36,43600,36997],{"class":42},[36,43602,43603,43605,43607,43609,43611,43613,43615,43617],{"class":38,"line":19272},[36,43604,906],{"class":62},[36,43606,92],{"class":42},[36,43608,37006],{"class":50},[36,43610,37009],{"class":42},[36,43612,37012],{"class":50},[36,43614,2934],{"class":42},[36,43616,37017],{"class":50},[36,43618,37020],{"class":42},[1752,43620,43622],{"id":43621},"_23googlenet","2.3.GoogLeNet",[24368,43624,43626],{"id":43625},"_231原理","2.3.1.原理",[650,43628,43629],{},[653,43630,43631],{},"网络结构",[19,43633,43634],{},[3879,43635],{"alt":31,"src":43636},"\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,43638,43639],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43641,43642],{},[3879,43643],{"alt":31,"src":43644},"\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,43646,43647],{},[3879,43648],{"alt":31,"src":43649},"\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,43651,43652],{},[3879,43653],{"alt":31,"src":43654},"\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",[650,43656,43657],{"start":54},[653,43658,43659],{},"1x1卷积的优点",[19,43661,43662],{},[3879,43663],{"alt":31,"src":43664},"\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",[650,43666,43667],{"start":66},[653,43668,43669],{},"全局平均池化层优点",[19,43671,43672],{},[3879,43673],{"alt":31,"src":43674},"\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,43676,43677],{},[3879,43678],{"alt":31,"src":43679},"\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",[650,43681,43682],{"start":73},[653,43683,43684],{},"参数详细描述",[19,43686,43687],{},[3879,43688],{"alt":31,"src":43689},"\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,43691,43692],{},[3879,43693],{"alt":31,"src":43694},"\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,43696,43697],{},[3879,43698],{"alt":31,"src":43699},"\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,43701,43702],{},[3879,43703],{"alt":31,"src":43704},"\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,43706,43707],{},[3879,43708],{"alt":31,"src":43709},"\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,43711,43712],{},[3879,43713],{"alt":31,"src":43714},"\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,43716,43717],{},[3879,43718],{"alt":31,"src":43719},"\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,43721,43722],{},[3879,43723],{"alt":31,"src":43724},"\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,43726,43727],{},[3879,43728],{"alt":31,"src":43729},"\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,43731,43732],{},[3879,43733],{"alt":31,"src":43734},"\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,43736,43737],{},[3879,43738],{"alt":31,"src":43739},"\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,43741,43742],{},[3879,43743],{"alt":31,"src":43744},"\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,43746,43747],{},[3879,43748],{"alt":31,"src":43749},"\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,43751,43752],{},[3879,43753],{"alt":31,"src":43754},"\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,43756,43757],{},[3879,43758],{"alt":31,"src":43759},"\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,43761,43762],{},[3879,43763],{"alt":31,"src":43764},"\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,43766,43767],{},[3879,43768],{"alt":31,"src":43769},"\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,43771,43772],{},[3879,43773],{"alt":31,"src":43774},"\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,43776,43777],{},[3879,43778],{"alt":31,"src":43779},"\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,43781,43782],{},[3879,43783],{"alt":31,"src":43784},"\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,43786,43787],{},[3879,43788],{"alt":31,"src":43789},"\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",[24368,43791,43793],{"id":43792},"_232代码实现","2.3.2.代码实现",[650,43795,43796],{},[653,43797,33075],{},[19,43799,43800],{},"根据原理一步一步搭建即可",[26,43802,43804],{"className":28,"code":43803,"language":30,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[33,43805,43806,43812,43822,43832,43836,43853,43862,43877,43887,43892,43925,43930,43967,44014,44019,44055,44102,44107,44112,44147,44179,44183,44191,44207,44231,44256,44277,44282,44297,44301,44305,44310,44327,44332,44341,44356,44367,44411,44415,44443,44447,44458,44486,44490,44527,44531,44559,44563,44574,44610,44642,44670,44674,44685,44719,44751,44783,44816,44850,44878,44882,44893,44926,44958,44972,44976,44989,44993,44998,45010,45018,45040,45045,45050,45055,45060,45065,45070,45084,45092,45101,45114,45129,45138,45142,45150,45161,45172,45183,45194,45205,45211,45215,45220,45232,45252,45261],{"__ignoreMap":31},[36,43807,43808,43810],{"class":38,"line":39},[36,43809,1943],{"class":46},[36,43811,32761],{"class":42},[36,43813,43814,43816,43818,43820],{"class":38,"line":54},[36,43815,1937],{"class":46},[36,43817,33103],{"class":42},[36,43819,1943],{"class":46},[36,43821,33108],{"class":42},[36,43823,43824,43826,43828,43830],{"class":38,"line":66},[36,43825,1937],{"class":46},[36,43827,33120],{"class":42},[36,43829,1943],{"class":46},[36,43831,33125],{"class":42},[36,43833,43834],{"class":38,"line":73},[36,43835,70],{"emptyLinePlaceholder":69},[36,43837,43838,43840,43843,43845,43847,43849,43851],{"class":38,"line":86},[36,43839,147],{"class":46},[36,43841,43842],{"class":79}," Inception",[36,43844,92],{"class":42},[36,43846,33141],{"class":79},[36,43848,3113],{"class":42},[36,43850,33146],{"class":79},[36,43852,1147],{"class":42},[36,43854,43855,43857,43859],{"class":38,"line":126},[36,43856,158],{"class":46},[36,43858,515],{"class":62},[36,43860,43861],{"class":42},"(self,in_channels,c1,c2,c3,c4):\n",[36,43863,43864,43866,43869,43871,43873,43875],{"class":38,"line":131},[36,43865,1432],{"class":62},[36,43867,43868],{"class":42},"(Inception,",[36,43870,481],{"class":62},[36,43872,33183],{"class":42},[36,43874,494],{"class":62},[36,43876,4369],{"class":42},[36,43878,43879,43881,43883,43885],{"class":38,"line":225},[36,43880,523],{"class":62},[36,43882,37122],{"class":42},[36,43884,47],{"class":46},[36,43886,37127],{"class":42},[36,43888,43889],{"class":38,"line":235},[36,43890,43891],{"class":2621},"        # 路线1：定义1*1卷积\n",[36,43893,43894,43896,43899,43901,43903,43905,43907,43910,43912,43914,43917,43919,43921,43923],{"class":38,"line":377},[36,43895,523],{"class":62},[36,43897,43898],{"class":42},".p1_1",[36,43900,47],{"class":46},[36,43902,33208],{"class":42},[36,43904,33211],{"class":7598},[36,43906,47],{"class":46},[36,43908,43909],{"class":42},"in_channels,",[36,43911,33220],{"class":7598},[36,43913,47],{"class":46},[36,43915,43916],{"class":42},"c1,",[36,43918,33229],{"class":7598},[36,43920,47],{"class":46},[36,43922,1906],{"class":62},[36,43924,123],{"class":42},[36,43926,43927],{"class":38,"line":617},[36,43928,43929],{"class":2621},"        # 路线2：定义1*1卷积和3*3\n",[36,43931,43932,43934,43937,43939,43941,43943,43945,43947,43949,43951,43954,43956,43959,43961,43963,43965],{"class":38,"line":643},[36,43933,523],{"class":62},[36,43935,43936],{"class":42},".p2_1",[36,43938,47],{"class":46},[36,43940,33208],{"class":42},[36,43942,33211],{"class":7598},[36,43944,47],{"class":46},[36,43946,43909],{"class":42},[36,43948,33220],{"class":7598},[36,43950,47],{"class":46},[36,43952,43953],{"class":42},"c2[",[36,43955,2751],{"class":62},[36,43957,43958],{"class":42},"],",[36,43960,33229],{"class":7598},[36,43962,47],{"class":46},[36,43964,1906],{"class":62},[36,43966,123],{"class":42},[36,43968,43969,43971,43974,43976,43978,43980,43982,43984,43986,43988,43990,43992,43994,43996,43998,44000,44002,44004,44006,44008,44010,44012],{"class":38,"line":921},[36,43970,523],{"class":62},[36,43972,43973],{"class":42},".p2_2",[36,43975,47],{"class":46},[36,43977,33208],{"class":42},[36,43979,33211],{"class":7598},[36,43981,47],{"class":46},[36,43983,43953],{"class":42},[36,43985,2751],{"class":62},[36,43987,43958],{"class":42},[36,43989,33220],{"class":7598},[36,43991,47],{"class":46},[36,43993,43953],{"class":42},[36,43995,1906],{"class":62},[36,43997,43958],{"class":42},[36,43999,33229],{"class":7598},[36,44001,47],{"class":46},[36,44003,2634],{"class":62},[36,44005,2934],{"class":42},[36,44007,33238],{"class":7598},[36,44009,47],{"class":46},[36,44011,1906],{"class":62},[36,44013,123],{"class":42},[36,44015,44016],{"class":38,"line":934},[36,44017,44018],{"class":2621},"        # 路线3：定义1*1卷积和5*5\n",[36,44020,44021,44023,44026,44028,44030,44032,44034,44036,44038,44040,44043,44045,44047,44049,44051,44053],{"class":38,"line":939},[36,44022,523],{"class":62},[36,44024,44025],{"class":42},".p3_1",[36,44027,47],{"class":46},[36,44029,33208],{"class":42},[36,44031,33211],{"class":7598},[36,44033,47],{"class":46},[36,44035,43909],{"class":42},[36,44037,33220],{"class":7598},[36,44039,47],{"class":46},[36,44041,44042],{"class":42},"c3[",[36,44044,2751],{"class":62},[36,44046,43958],{"class":42},[36,44048,33229],{"class":7598},[36,44050,47],{"class":46},[36,44052,1906],{"class":62},[36,44054,123],{"class":42},[36,44056,44057,44059,44062,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100],{"class":38,"line":949},[36,44058,523],{"class":62},[36,44060,44061],{"class":42},".p3_2",[36,44063,47],{"class":46},[36,44065,33208],{"class":42},[36,44067,33211],{"class":7598},[36,44069,47],{"class":46},[36,44071,44042],{"class":42},[36,44073,2751],{"class":62},[36,44075,43958],{"class":42},[36,44077,33220],{"class":7598},[36,44079,47],{"class":46},[36,44081,44042],{"class":42},[36,44083,1906],{"class":62},[36,44085,43958],{"class":42},[36,44087,33229],{"class":7598},[36,44089,47],{"class":46},[36,44091,2875],{"class":62},[36,44093,2934],{"class":42},[36,44095,33238],{"class":7598},[36,44097,47],{"class":46},[36,44099,1911],{"class":62},[36,44101,123],{"class":42},[36,44103,44104],{"class":38,"line":962},[36,44105,44106],{"class":2621},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,44108,44109],{"class":38,"line":974},[36,44110,44111],{"class":2621},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,44113,44114,44116,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145],{"class":38,"line":979},[36,44115,523],{"class":62},[36,44117,44118],{"class":42},".p4_1",[36,44120,47],{"class":46},[36,44122,37180],{"class":42},[36,44124,33229],{"class":7598},[36,44126,47],{"class":46},[36,44128,2634],{"class":62},[36,44130,2934],{"class":42},[36,44132,33284],{"class":7598},[36,44134,47],{"class":46},[36,44136,1906],{"class":62},[36,44138,2934],{"class":42},[36,44140,33238],{"class":7598},[36,44142,47],{"class":46},[36,44144,1906],{"class":62},[36,44146,123],{"class":42},[36,44148,44149,44151,44154,44156,44158,44160,44162,44164,44166,44168,44171,44173,44175,44177],{"class":38,"line":994},[36,44150,523],{"class":62},[36,44152,44153],{"class":42},".p4_2",[36,44155,47],{"class":46},[36,44157,33208],{"class":42},[36,44159,33211],{"class":7598},[36,44161,47],{"class":46},[36,44163,43909],{"class":42},[36,44165,33220],{"class":7598},[36,44167,47],{"class":46},[36,44169,44170],{"class":42},"c4,",[36,44172,33229],{"class":7598},[36,44174,47],{"class":46},[36,44176,1906],{"class":62},[36,44178,123],{"class":42},[36,44180,44181],{"class":38,"line":1006},[36,44182,70],{"emptyLinePlaceholder":69},[36,44184,44185,44187,44189],{"class":38,"line":1011},[36,44186,158],{"class":46},[36,44188,33448],{"class":79},[36,44190,33451],{"class":42},[36,44192,44193,44196,44198,44200,44202,44204],{"class":38,"line":1023},[36,44194,44195],{"class":42},"        p1",[36,44197,47],{"class":46},[36,44199,481],{"class":62},[36,44201,37535],{"class":42},[36,44203,481],{"class":62},[36,44205,44206],{"class":42},".p1_1(x))\n",[36,44208,44209,44211,44213,44215,44217,44219,44222,44224,44226,44228],{"class":38,"line":1028},[36,44210,9466],{"class":42},[36,44212,47],{"class":46},[36,44214,481],{"class":62},[36,44216,37535],{"class":42},[36,44218,481],{"class":62},[36,44220,44221],{"class":42},".p2_2(",[36,44223,481],{"class":62},[36,44225,37535],{"class":42},[36,44227,481],{"class":62},[36,44229,44230],{"class":42},".p2_1(x))))\n",[36,44232,44233,44236,44238,44240,44242,44244,44247,44249,44251,44253],{"class":38,"line":1033},[36,44234,44235],{"class":42},"        p3",[36,44237,47],{"class":46},[36,44239,481],{"class":62},[36,44241,37535],{"class":42},[36,44243,481],{"class":62},[36,44245,44246],{"class":42},".p3_2(",[36,44248,481],{"class":62},[36,44250,37535],{"class":42},[36,44252,481],{"class":62},[36,44254,44255],{"class":42},".p3_1(x))))\n",[36,44257,44258,44261,44263,44265,44267,44269,44272,44274],{"class":38,"line":1053},[36,44259,44260],{"class":42},"        p4",[36,44262,47],{"class":46},[36,44264,481],{"class":62},[36,44266,37535],{"class":42},[36,44268,481],{"class":62},[36,44270,44271],{"class":42},".p4_2(",[36,44273,481],{"class":62},[36,44275,44276],{"class":42},".p4_1(x)))\n",[36,44278,44279],{"class":38,"line":1064},[36,44280,44281],{"class":2621},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,44283,44284,44286,44289,44291,44293,44295],{"class":38,"line":1075},[36,44285,736],{"class":46},[36,44287,44288],{"class":42}," torch.cat((p1,p2,p3,p4),",[36,44290,35037],{"class":7598},[36,44292,47],{"class":46},[36,44294,1906],{"class":62},[36,44296,123],{"class":42},[36,44298,44299],{"class":38,"line":2291},[36,44300,70],{"emptyLinePlaceholder":69},[36,44302,44303],{"class":38,"line":2329},[36,44304,70],{"emptyLinePlaceholder":69},[36,44306,44307],{"class":38,"line":2334},[36,44308,44309],{"class":2621},"# 搭建GoogLeNet网络\n",[36,44311,44312,44314,44317,44319,44321,44323,44325],{"class":38,"line":2339},[36,44313,147],{"class":46},[36,44315,44316],{"class":79}," GoogLeNet",[36,44318,92],{"class":42},[36,44320,33141],{"class":79},[36,44322,3113],{"class":42},[36,44324,33146],{"class":79},[36,44326,1147],{"class":42},[36,44328,44329],{"class":38,"line":2365},[36,44330,44331],{"class":2621},"    # 必须把Inception导入到里边\n",[36,44333,44334,44336,44338],{"class":38,"line":2373},[36,44335,158],{"class":46},[36,44337,515],{"class":62},[36,44339,44340],{"class":42},"(self,Inception):\n",[36,44342,44343,44345,44348,44350,44352,44354],{"class":38,"line":5001},[36,44344,1432],{"class":62},[36,44346,44347],{"class":42},"(GoogLeNet,",[36,44349,481],{"class":62},[36,44351,33183],{"class":42},[36,44353,494],{"class":62},[36,44355,4369],{"class":42},[36,44357,44358,44360,44363,44365],{"class":38,"line":5006},[36,44359,523],{"class":62},[36,44361,44362],{"class":42},".b1",[36,44364,47],{"class":46},[36,44366,40360],{"class":42},[36,44368,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401,44403,44405,44407,44409],{"class":38,"line":10328},[36,44370,40365],{"class":42},[36,44372,33211],{"class":7598},[36,44374,47],{"class":46},[36,44376,1906],{"class":62},[36,44378,2934],{"class":42},[36,44380,33220],{"class":7598},[36,44382,47],{"class":46},[36,44384,2763],{"class":62},[36,44386,2934],{"class":42},[36,44388,33229],{"class":7598},[36,44390,47],{"class":46},[36,44392,2925],{"class":62},[36,44394,2934],{"class":42},[36,44396,33284],{"class":7598},[36,44398,47],{"class":46},[36,44400,1911],{"class":62},[36,44402,2934],{"class":42},[36,44404,33238],{"class":7598},[36,44406,47],{"class":46},[36,44408,2634],{"class":62},[36,44410,40398],{"class":42},[36,44412,44413],{"class":38,"line":10352},[36,44414,40403],{"class":42},[36,44416,44417,44419,44421,44423,44425,44427,44429,44431,44433,44435,44437,44439,44441],{"class":38,"line":10357},[36,44418,40448],{"class":42},[36,44420,33229],{"class":7598},[36,44422,47],{"class":46},[36,44424,2634],{"class":62},[36,44426,2934],{"class":42},[36,44428,33284],{"class":7598},[36,44430,47],{"class":46},[36,44432,1911],{"class":62},[36,44434,2934],{"class":42},[36,44436,33238],{"class":7598},[36,44438,47],{"class":46},[36,44440,1906],{"class":62},[36,44442,123],{"class":42},[36,44444,44445],{"class":38,"line":10363},[36,44446,2276],{"class":42},[36,44448,44449,44451,44454,44456],{"class":38,"line":10390},[36,44450,523],{"class":62},[36,44452,44453],{"class":42},".b2",[36,44455,47],{"class":46},[36,44457,40360],{"class":42},[36,44459,44460,44462,44464,44466,44468,44470,44472,44474,44476,44478,44480,44482,44484],{"class":38,"line":10395},[36,44461,40365],{"class":42},[36,44463,33211],{"class":7598},[36,44465,47],{"class":46},[36,44467,2763],{"class":62},[36,44469,2934],{"class":42},[36,44471,33220],{"class":7598},[36,44473,47],{"class":46},[36,44475,2763],{"class":62},[36,44477,2934],{"class":42},[36,44479,33229],{"class":7598},[36,44481,47],{"class":46},[36,44483,1906],{"class":62},[36,44485,40398],{"class":42},[36,44487,44488],{"class":38,"line":10401},[36,44489,40403],{"class":42},[36,44491,44492,44494,44496,44498,44500,44502,44504,44506,44509,44511,44513,44515,44517,44519,44521,44523,44525],{"class":38,"line":10413},[36,44493,40365],{"class":42},[36,44495,33211],{"class":7598},[36,44497,47],{"class":46},[36,44499,2763],{"class":62},[36,44501,2934],{"class":42},[36,44503,33220],{"class":7598},[36,44505,47],{"class":46},[36,44507,44508],{"class":62},"192",[36,44510,2934],{"class":42},[36,44512,33229],{"class":7598},[36,44514,47],{"class":46},[36,44516,2634],{"class":62},[36,44518,2934],{"class":42},[36,44520,33238],{"class":7598},[36,44522,47],{"class":46},[36,44524,1906],{"class":62},[36,44526,40398],{"class":42},[36,44528,44529],{"class":38,"line":10425},[36,44530,40403],{"class":42},[36,44532,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551,44553,44555,44557],{"class":38,"line":10437},[36,44534,40448],{"class":42},[36,44536,33229],{"class":7598},[36,44538,47],{"class":46},[36,44540,2634],{"class":62},[36,44542,2934],{"class":42},[36,44544,33284],{"class":7598},[36,44546,47],{"class":46},[36,44548,1911],{"class":62},[36,44550,2934],{"class":42},[36,44552,33238],{"class":7598},[36,44554,47],{"class":46},[36,44556,1906],{"class":62},[36,44558,123],{"class":42},[36,44560,44561],{"class":38,"line":12095},[36,44562,2276],{"class":42},[36,44564,44565,44567,44570,44572],{"class":38,"line":12120},[36,44566,523],{"class":62},[36,44568,44569],{"class":42},".b3",[36,44571,47],{"class":46},[36,44573,40360],{"class":42},[36,44575,44576,44579,44581,44583,44585,44588,44590,44592,44594,44597,44599,44601,44603,44606,44608],{"class":38,"line":12143},[36,44577,44578],{"class":42},"            Inception(",[36,44580,44508],{"class":62},[36,44582,2934],{"class":42},[36,44584,2763],{"class":62},[36,44586,44587],{"class":42},",(",[36,44589,2769],{"class":62},[36,44591,2934],{"class":42},[36,44593,34423],{"class":62},[36,44595,44596],{"class":42},"),(",[36,44598,3156],{"class":62},[36,44600,2934],{"class":42},[36,44602,2757],{"class":62},[36,44604,44605],{"class":42},"),",[36,44607,2757],{"class":62},[36,44609,40398],{"class":42},[36,44611,44612,44614,44616,44618,44620,44622,44624,44626,44628,44630,44632,44634,44636,44638,44640],{"class":38,"line":12167},[36,44613,44578],{"class":42},[36,44615,37221],{"class":62},[36,44617,2934],{"class":42},[36,44619,34423],{"class":62},[36,44621,44587],{"class":42},[36,44623,34423],{"class":62},[36,44625,2934],{"class":42},[36,44627,44508],{"class":62},[36,44629,44596],{"class":42},[36,44631,2757],{"class":62},[36,44633,2934],{"class":42},[36,44635,2769],{"class":62},[36,44637,44605],{"class":42},[36,44639,2763],{"class":62},[36,44641,40398],{"class":42},[36,44643,44644,44646,44648,44650,44652,44654,44656,44658,44660,44662,44664,44666,44668],{"class":38,"line":12172},[36,44645,40448],{"class":42},[36,44647,33229],{"class":7598},[36,44649,47],{"class":46},[36,44651,2634],{"class":62},[36,44653,2934],{"class":42},[36,44655,33284],{"class":7598},[36,44657,47],{"class":46},[36,44659,1911],{"class":62},[36,44661,2934],{"class":42},[36,44663,33238],{"class":7598},[36,44665,47],{"class":46},[36,44667,1906],{"class":62},[36,44669,123],{"class":42},[36,44671,44672],{"class":38,"line":12177},[36,44673,2276],{"class":42},[36,44675,44676,44678,44681,44683],{"class":38,"line":12182},[36,44677,523],{"class":62},[36,44679,44680],{"class":42},".b4",[36,44682,47],{"class":46},[36,44684,40360],{"class":42},[36,44686,44687,44689,44692,44694,44696,44698,44700,44702,44705,44707,44709,44711,44713,44715,44717],{"class":38,"line":12191},[36,44688,44578],{"class":42},[36,44690,44691],{"class":62},"480",[36,44693,2934],{"class":42},[36,44695,44508],{"class":62},[36,44697,44587],{"class":42},[36,44699,2769],{"class":62},[36,44701,2934],{"class":42},[36,44703,44704],{"class":62},"208",[36,44706,44596],{"class":42},[36,44708,3156],{"class":62},[36,44710,2934],{"class":42},[36,44712,3162],{"class":62},[36,44714,44605],{"class":42},[36,44716,2763],{"class":62},[36,44718,40398],{"class":42},[36,44720,44721,44723,44725,44727,44729,44731,44733,44735,44737,44739,44741,44743,44745,44747,44749],{"class":38,"line":12196},[36,44722,44578],{"class":42},[36,44724,40807],{"class":62},[36,44726,2934],{"class":42},[36,44728,23418],{"class":62},[36,44730,44587],{"class":42},[36,44732,3173],{"class":62},[36,44734,2934],{"class":42},[36,44736,33855],{"class":62},[36,44738,44596],{"class":42},[36,44740,3354],{"class":62},[36,44742,2934],{"class":42},[36,44744,2763],{"class":62},[36,44746,44605],{"class":42},[36,44748,2763],{"class":62},[36,44750,40398],{"class":42},[36,44752,44753,44755,44757,44759,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781],{"class":38,"line":12202},[36,44754,44578],{"class":42},[36,44756,40807],{"class":62},[36,44758,2934],{"class":42},[36,44760,34423],{"class":62},[36,44762,44587],{"class":42},[36,44764,34423],{"class":62},[36,44766,2934],{"class":42},[36,44768,37221],{"class":62},[36,44770,44596],{"class":42},[36,44772,3354],{"class":62},[36,44774,2934],{"class":42},[36,44776,2763],{"class":62},[36,44778,44605],{"class":42},[36,44780,2763],{"class":62},[36,44782,40398],{"class":42},[36,44784,44785,44787,44789,44791,44793,44795,44797,44799,44802,44804,44806,44808,44810,44812,44814],{"class":38,"line":12223},[36,44786,44578],{"class":42},[36,44788,40807],{"class":62},[36,44790,2934],{"class":42},[36,44792,3173],{"class":62},[36,44794,44587],{"class":42},[36,44796,34423],{"class":62},[36,44798,2934],{"class":42},[36,44800,44801],{"class":62},"288",[36,44803,44596],{"class":42},[36,44805,2757],{"class":62},[36,44807,2934],{"class":42},[36,44809,2763],{"class":62},[36,44811,44605],{"class":42},[36,44813,2763],{"class":62},[36,44815,40398],{"class":42},[36,44817,44818,44820,44823,44825,44827,44829,44831,44833,44836,44838,44840,44842,44844,44846,44848],{"class":38,"line":12229},[36,44819,44578],{"class":42},[36,44821,44822],{"class":62},"528",[36,44824,2934],{"class":42},[36,44826,37221],{"class":62},[36,44828,44587],{"class":42},[36,44830,23418],{"class":62},[36,44832,2934],{"class":42},[36,44834,44835],{"class":62},"320",[36,44837,44596],{"class":42},[36,44839,2757],{"class":62},[36,44841,2934],{"class":42},[36,44843,34423],{"class":62},[36,44845,44605],{"class":42},[36,44847,34423],{"class":62},[36,44849,40398],{"class":42},[36,44851,44852,44854,44856,44858,44860,44862,44864,44866,44868,44870,44872,44874,44876],{"class":38,"line":12243},[36,44853,40448],{"class":42},[36,44855,33229],{"class":7598},[36,44857,47],{"class":46},[36,44859,2634],{"class":62},[36,44861,2934],{"class":42},[36,44863,33284],{"class":7598},[36,44865,47],{"class":46},[36,44867,1911],{"class":62},[36,44869,2934],{"class":42},[36,44871,33238],{"class":7598},[36,44873,47],{"class":46},[36,44875,1906],{"class":62},[36,44877,123],{"class":42},[36,44879,44880],{"class":38,"line":12249},[36,44881,2276],{"class":42},[36,44883,44884,44886,44889,44891],{"class":38,"line":12276},[36,44885,523],{"class":62},[36,44887,44888],{"class":42},".b5",[36,44890,47],{"class":46},[36,44892,40360],{"class":42},[36,44894,44895,44897,44900,44902,44904,44906,44908,44910,44912,44914,44916,44918,44920,44922,44924],{"class":38,"line":12285},[36,44896,44578],{"class":42},[36,44898,44899],{"class":62},"832",[36,44901,2934],{"class":42},[36,44903,37221],{"class":62},[36,44905,44587],{"class":42},[36,44907,23418],{"class":62},[36,44909,2934],{"class":42},[36,44911,44835],{"class":62},[36,44913,44596],{"class":42},[36,44915,2757],{"class":62},[36,44917,2934],{"class":42},[36,44919,34423],{"class":62},[36,44921,44605],{"class":42},[36,44923,34423],{"class":62},[36,44925,40398],{"class":42},[36,44927,44928,44930,44932,44934,44936,44938,44940,44942,44944,44946,44948,44950,44952,44954,44956],{"class":38,"line":12291},[36,44929,44578],{"class":42},[36,44931,44899],{"class":62},[36,44933,2934],{"class":42},[36,44935,37291],{"class":62},[36,44937,44587],{"class":42},[36,44939,44508],{"class":62},[36,44941,2934],{"class":42},[36,44943,37291],{"class":62},[36,44945,44596],{"class":42},[36,44947,3162],{"class":62},[36,44949,2934],{"class":42},[36,44951,34423],{"class":62},[36,44953,44605],{"class":42},[36,44955,34423],{"class":62},[36,44957,40398],{"class":42},[36,44959,44960,44963,44965,44967,44969],{"class":38,"line":12299},[36,44961,44962],{"class":42},"            nn.AdaptiveAvgPool2d((",[36,44964,1906],{"class":62},[36,44966,2934],{"class":42},[36,44968,1906],{"class":62},[36,44970,44971],{"class":42},")),\n",[36,44973,44974],{"class":38,"line":12304},[36,44975,41140],{"class":42},[36,44977,44978,44980,44983,44985,44987],{"class":38,"line":18977},[36,44979,41145],{"class":42},[36,44981,44982],{"class":62},"1024",[36,44984,2934],{"class":42},[36,44986,3002],{"class":62},[36,44988,123],{"class":42},[36,44990,44991],{"class":38,"line":18983},[36,44992,2276],{"class":42},[36,44994,44995],{"class":38,"line":19006},[36,44996,44997],{"class":2621},"        # 对模型参数初始化\n",[36,44999,45000,45002,45004,45006,45008],{"class":38,"line":19012},[36,45001,5788],{"class":46},[36,45003,41218],{"class":42},[36,45005,28413],{"class":46},[36,45007,868],{"class":62},[36,45009,41225],{"class":42},[36,45011,45012,45014,45016],{"class":38,"line":19035},[36,45013,7025],{"class":46},[36,45015,41237],{"class":62},[36,45017,41240],{"class":42},[36,45019,45020,45022,45025,45027,45030,45032,45034,45036,45038],{"class":38,"line":19049},[36,45021,41250],{"class":42},[36,45023,45024],{"class":7598},"mode",[36,45026,47],{"class":46},[36,45028,45029],{"class":50},"'fan_out'",[36,45031,2934],{"class":42},[36,45033,41253],{"class":7598},[36,45035,47],{"class":46},[36,45037,41258],{"class":50},[36,45039,123],{"class":42},[36,45041,45042],{"class":38,"line":19069},[36,45043,45044],{"class":2621},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,45046,45047],{"class":38,"line":19075},[36,45048,45049],{"class":2621},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,45051,45052],{"class":38,"line":19086},[36,45053,45054],{"class":2621},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,45056,45057],{"class":38,"line":19109},[36,45058,45059],{"class":2621},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,45061,45062],{"class":38,"line":19131},[36,45063,45064],{"class":2621},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,45066,45067],{"class":38,"line":19136},[36,45068,45069],{"class":2621},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,45071,45072,45074,45076,45078,45080,45082],{"class":38,"line":19142},[36,45073,41270],{"class":46},[36,45075,41273],{"class":42},[36,45077,41276],{"class":46},[36,45079,41279],{"class":46},[36,45081,41282],{"class":62},[36,45083,153],{"class":42},[36,45085,45086,45088,45090],{"class":38,"line":19156},[36,45087,41294],{"class":42},[36,45089,2751],{"class":62},[36,45091,123],{"class":42},[36,45093,45094,45097,45099],{"class":38,"line":19169},[36,45095,45096],{"class":46},"                elif",[36,45098,41237],{"class":62},[36,45100,41313],{"class":42},[36,45102,45103,45106,45108,45110,45112],{"class":38,"line":19174},[36,45104,45105],{"class":42},"                    nn.init.normal_(m.weight,",[36,45107,2751],{"class":62},[36,45109,2934],{"class":42},[36,45111,41335],{"class":62},[36,45113,123],{"class":42},[36,45115,45116,45119,45121,45123,45125,45127],{"class":38,"line":19188},[36,45117,45118],{"class":46},"                    if",[36,45120,41273],{"class":42},[36,45122,41276],{"class":46},[36,45124,41279],{"class":46},[36,45126,41282],{"class":62},[36,45128,153],{"class":42},[36,45130,45131,45134,45136],{"class":38,"line":19193},[36,45132,45133],{"class":42},"                        nn.init.constant_(m.bias,",[36,45135,2751],{"class":62},[36,45137,123],{"class":42},[36,45139,45140],{"class":38,"line":19199},[36,45141,37516],{"class":2621},[36,45143,45144,45146,45148],{"class":38,"line":19204},[36,45145,158],{"class":46},[36,45147,33448],{"class":79},[36,45149,33451],{"class":42},[36,45151,45152,45154,45156,45158],{"class":38,"line":19218},[36,45153,33456],{"class":42},[36,45155,47],{"class":46},[36,45157,481],{"class":62},[36,45159,45160],{"class":42},".b1(x)\n",[36,45162,45163,45165,45167,45169],{"class":38,"line":19223},[36,45164,33456],{"class":42},[36,45166,47],{"class":46},[36,45168,481],{"class":62},[36,45170,45171],{"class":42},".b2(x)\n",[36,45173,45174,45176,45178,45180],{"class":38,"line":19228},[36,45175,33456],{"class":42},[36,45177,47],{"class":46},[36,45179,481],{"class":62},[36,45181,45182],{"class":42},".b3(x)\n",[36,45184,45185,45187,45189,45191],{"class":38,"line":19242},[36,45186,33456],{"class":42},[36,45188,47],{"class":46},[36,45190,481],{"class":62},[36,45192,45193],{"class":42},".b4(x)\n",[36,45195,45196,45198,45200,45202],{"class":38,"line":19254},[36,45197,33456],{"class":42},[36,45199,47],{"class":46},[36,45201,481],{"class":62},[36,45203,45204],{"class":42},".b5(x)\n",[36,45206,45207,45209],{"class":38,"line":19259},[36,45208,736],{"class":46},[36,45210,33564],{"class":42},[36,45212,45213],{"class":38,"line":19272},[36,45214,70],{"emptyLinePlaceholder":69},[36,45216,45217],{"class":38,"line":19277},[36,45218,45219],{"class":2621},"# 模型展示\n",[36,45221,45222,45224,45226,45228,45230],{"class":38,"line":19282},[36,45223,3948],{"class":46},[36,45225,33575],{"class":62},[36,45227,5334],{"class":46},[36,45229,33580],{"class":50},[36,45231,153],{"class":42},[36,45233,45234,45236,45238,45240,45242,45244,45246,45248,45250],{"class":38,"line":19287},[36,45235,33592],{"class":42},[36,45237,47],{"class":46},[36,45239,32816],{"class":42},[36,45241,33599],{"class":50},[36,45243,4108],{"class":46},[36,45245,33604],{"class":42},[36,45247,4105],{"class":46},[36,45249,32841],{"class":50},[36,45251,123],{"class":42},[36,45253,45254,45256,45258],{"class":38,"line":19300},[36,45255,33644],{"class":42},[36,45257,47],{"class":46},[36,45259,45260],{"class":42},"GoogLeNet(Inception).to(device)\n",[36,45262,45263,45265,45267,45269,45271,45273,45275,45277],{"class":38,"line":19305},[36,45264,89],{"class":62},[36,45266,33656],{"class":42},[36,45268,1906],{"class":62},[36,45270,2934],{"class":42},[36,45272,33855],{"class":62},[36,45274,2934],{"class":42},[36,45276,33855],{"class":62},[36,45278,33669],{"class":42},[650,45280,45281],{"start":54},[653,45282,41532],{},[26,45284,45286],{"className":28,"code":45285,"language":30,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[33,45287,45288,45294,45300,45310,45316,45326,45336,45346,45356,45366,45370,45381,45391,45395,45399,45403,45411,45423,45433,45449,45459,45491,45505,45515,45525,45529,45539,45553,45563,45573,45583,45589,45593,45597,45601,45605,45609,45617,45637,45641,45645,45649,45653,45657,45673,45677,45681,45689,45693,45697,45705,45709,45713,45717,45725,45729,45733,45737,45741,45749,45753,45761,45765,45773,45777,45785,45789,45797,45801,45805,45813,45817,45821,45825,45837,45861,45875,45879,45883,45887,45895,45899,45907,45911,45919,45923,45931,45935,45943,45947,45955,45959,45971,45975,45983,45987,45995,45999,46003,46007,46011,46019,46023,46039,46043,46051,46055,46059,46063,46067,46071,46075,46079,46095,46099,46111,46115,46127,46131,46143,46147,46155,46159,46167,46171,46175,46179,46185,46189,46197,46201,46217,46221,46229,46233,46249,46261,46265,46277,46281,46285,46293,46297,46301,46309,46313,46321,46325,46333,46337,46341,46383,46425,46429,46433,46449,46453,46469,46473,46477,46485,46489,46493,46505,46543,46547,46551,46559,46563,46577,46587,46593,46599,46605,46611,46615,46619,46625,46629,46633,46641,46645,46663,46667,46671,46675,46691,46695,46699,46703,46707,46711,46731,46751,46755,46759,46763,46771,46779,46783,46799,46819,46839,46843,46847,46855,46863,46867,46871,46875,46887,46891,46901,46909,46926],{"__ignoreMap":31},[36,45289,45290,45292],{"class":38,"line":39},[36,45291,1943],{"class":46},[36,45293,34176],{"class":42},[36,45295,45296,45298],{"class":38,"line":54},[36,45297,1943],{"class":46},[36,45299,34183],{"class":42},[36,45301,45302,45304,45306,45308],{"class":38,"line":66},[36,45303,1943],{"class":46},[36,45305,34194],{"class":42},[36,45307,33737],{"class":46},[36,45309,34199],{"class":42},[36,45311,45312,45314],{"class":38,"line":73},[36,45313,1943],{"class":46},[36,45315,32761],{"class":42},[36,45317,45318,45320,45322,45324],{"class":38,"line":86},[36,45319,1937],{"class":46},[36,45321,33769],{"class":42},[36,45323,1943],{"class":46},[36,45325,34216],{"class":42},[36,45327,45328,45330,45332,45334],{"class":38,"line":126},[36,45329,1937],{"class":46},[36,45331,33722],{"class":42},[36,45333,1943],{"class":46},[36,45335,33727],{"class":42},[36,45337,45338,45340,45342,45344],{"class":38,"line":131},[36,45339,1937],{"class":46},[36,45341,33752],{"class":42},[36,45343,1943],{"class":46},[36,45345,33757],{"class":42},[36,45347,45348,45350,45352,45354],{"class":38,"line":225},[36,45349,1943],{"class":46},[36,45351,33769],{"class":42},[36,45353,33737],{"class":46},[36,45355,33774],{"class":42},[36,45357,45358,45360,45362,45364],{"class":38,"line":235},[36,45359,1943],{"class":46},[36,45361,33786],{"class":42},[36,45363,33737],{"class":46},[36,45365,33791],{"class":42},[36,45367,45368],{"class":38,"line":377},[36,45369,34261],{"class":2621},[36,45371,45372,45374,45376,45378],{"class":38,"line":617},[36,45373,1937],{"class":46},[36,45375,34268],{"class":42},[36,45377,1943],{"class":46},[36,45379,45380],{"class":42}," GoogLeNet, Inception\n",[36,45382,45383,45385,45387,45389],{"class":38,"line":643},[36,45384,1937],{"class":46},[36,45386,33103],{"class":42},[36,45388,1943],{"class":46},[36,45390,33108],{"class":42},[36,45392,45393],{"class":38,"line":921},[36,45394,70],{"emptyLinePlaceholder":69},[36,45396,45397],{"class":38,"line":934},[36,45398,70],{"emptyLinePlaceholder":69},[36,45400,45401],{"class":38,"line":939},[36,45402,34296],{"class":2621},[36,45404,45405,45407,45409],{"class":38,"line":949},[36,45406,76],{"class":46},[36,45408,34303],{"class":79},[36,45410,34306],{"class":42},[36,45412,45413,45415,45417,45419,45421],{"class":38,"line":962},[36,45414,34311],{"class":42},[36,45416,47],{"class":46},[36,45418,33809],{"class":42},[36,45420,33817],{"class":50},[36,45422,33820],{"class":42},[36,45424,45425,45427,45429,45431],{"class":38,"line":974},[36,45426,34324],{"class":7598},[36,45428,47],{"class":46},[36,45430,33830],{"class":62},[36,45432,33820],{"class":42},[36,45434,45435,45437,45439,45441,45443,45445,45447],{"class":38,"line":979},[36,45436,34335],{"class":7598},[36,45438,47],{"class":46},[36,45440,33847],{"class":42},[36,45442,33850],{"class":7598},[36,45444,47],{"class":46},[36,45446,37800],{"class":62},[36,45448,33858],{"class":42},[36,45450,45451,45453,45455,45457],{"class":38,"line":994},[36,45452,34352],{"class":7598},[36,45454,47],{"class":46},[36,45456,33830],{"class":62},[36,45458,123],{"class":42},[36,45460,45461,45463,45465,45467,45469,45471,45473,45475,45477,45479,45481,45483,45485,45487,45489],{"class":38,"line":1006},[36,45462,34363],{"class":42},[36,45464,47],{"class":46},[36,45466,34368],{"class":42},[36,45468,34371],{"class":62},[36,45470,92],{"class":42},[36,45472,34376],{"class":62},[36,45474,3011],{"class":46},[36,45476,9739],{"class":62},[36,45478,34383],{"class":42},[36,45480,34371],{"class":62},[36,45482,92],{"class":42},[36,45484,34390],{"class":62},[36,45486,3011],{"class":46},[36,45488,9739],{"class":62},[36,45490,34397],{"class":42},[36,45492,45493,45495,45497,45499,45501,45503],{"class":38,"line":1011},[36,45494,34402],{"class":42},[36,45496,47],{"class":46},[36,45498,34407],{"class":42},[36,45500,33891],{"class":7598},[36,45502,47],{"class":46},[36,45504,33896],{"class":42},[36,45506,45507,45509,45511,45513],{"class":38,"line":1023},[36,45508,34418],{"class":7598},[36,45510,47],{"class":46},[36,45512,2757],{"class":62},[36,45514,33820],{"class":42},[36,45516,45517,45519,45521,45523],{"class":38,"line":1028},[36,45518,34430],{"class":7598},[36,45520,47],{"class":46},[36,45522,33830],{"class":62},[36,45524,33820],{"class":42},[36,45526,45527],{"class":38,"line":1033},[36,45528,34441],{"class":2621},[36,45530,45531,45533,45535,45537],{"class":38,"line":1053},[36,45532,34446],{"class":7598},[36,45534,47],{"class":46},[36,45536,2951],{"class":62},[36,45538,123],{"class":42},[36,45540,45541,45543,45545,45547,45549,45551],{"class":38,"line":1064},[36,45542,34457],{"class":42},[36,45544,47],{"class":46},[36,45546,33888],{"class":42},[36,45548,33891],{"class":7598},[36,45550,47],{"class":46},[36,45552,34468],{"class":42},[36,45554,45555,45557,45559,45561],{"class":38,"line":1075},[36,45556,34473],{"class":7598},[36,45558,47],{"class":46},[36,45560,2757],{"class":62},[36,45562,33820],{"class":42},[36,45564,45565,45567,45569,45571],{"class":38,"line":2291},[36,45566,34484],{"class":7598},[36,45568,47],{"class":46},[36,45570,33830],{"class":62},[36,45572,33820],{"class":42},[36,45574,45575,45577,45579,45581],{"class":38,"line":2329},[36,45576,34495],{"class":7598},[36,45578,47],{"class":46},[36,45580,2951],{"class":62},[36,45582,123],{"class":42},[36,45584,45585,45587],{"class":38,"line":2334},[36,45586,6474],{"class":46},[36,45588,34508],{"class":42},[36,45590,45591],{"class":38,"line":2339},[36,45592,70],{"emptyLinePlaceholder":69},[36,45594,45595],{"class":38,"line":2365},[36,45596,34517],{"class":2621},[36,45598,45599],{"class":38,"line":2373},[36,45600,34522],{"class":2621},[36,45602,45603],{"class":38,"line":5001},[36,45604,70],{"emptyLinePlaceholder":69},[36,45606,45607],{"class":38,"line":5006},[36,45608,34531],{"class":2621},[36,45610,45611,45613,45615],{"class":38,"line":10328},[36,45612,76],{"class":46},[36,45614,34538],{"class":79},[36,45616,34541],{"class":42},[36,45618,45619,45621,45623,45625,45627,45629,45631,45633,45635],{"class":38,"line":10352},[36,45620,33592],{"class":42},[36,45622,47],{"class":46},[36,45624,32816],{"class":42},[36,45626,33599],{"class":50},[36,45628,4108],{"class":46},[36,45630,33604],{"class":42},[36,45632,4105],{"class":46},[36,45634,34560],{"class":50},[36,45636,123],{"class":42},[36,45638,45639],{"class":38,"line":10357},[36,45640,70],{"emptyLinePlaceholder":69},[36,45642,45643],{"class":38,"line":10363},[36,45644,70],{"emptyLinePlaceholder":69},[36,45646,45647],{"class":38,"line":10390},[36,45648,34575],{"class":2621},[36,45650,45651],{"class":38,"line":10395},[36,45652,34580],{"class":2621},[36,45654,45655],{"class":38,"line":10401},[36,45656,34585],{"class":2621},[36,45658,45659,45661,45663,45665,45667,45669,45671],{"class":38,"line":10413},[36,45660,34590],{"class":42},[36,45662,47],{"class":46},[36,45664,34595],{"class":42},[36,45666,34598],{"class":7598},[36,45668,47],{"class":46},[36,45670,34603],{"class":62},[36,45672,123],{"class":42},[36,45674,45675],{"class":38,"line":10425},[36,45676,70],{"emptyLinePlaceholder":69},[36,45678,45679],{"class":38,"line":10437},[36,45680,34614],{"class":2621},[36,45682,45683,45685,45687],{"class":38,"line":12095},[36,45684,34619],{"class":42},[36,45686,47],{"class":46},[36,45688,34624],{"class":42},[36,45690,45691],{"class":38,"line":12120},[36,45692,70],{"emptyLinePlaceholder":69},[36,45694,45695],{"class":38,"line":12143},[36,45696,34633],{"class":2621},[36,45698,45699,45701,45703],{"class":38,"line":12167},[36,45700,33644],{"class":42},[36,45702,47],{"class":46},[36,45704,34642],{"class":42},[36,45706,45707],{"class":38,"line":12172},[36,45708,34647],{"class":2621},[36,45710,45711],{"class":38,"line":12177},[36,45712,34652],{"class":2621},[36,45714,45715],{"class":38,"line":12182},[36,45716,34657],{"class":2621},[36,45718,45719,45721,45723],{"class":38,"line":12191},[36,45720,34662],{"class":42},[36,45722,47],{"class":46},[36,45724,34667],{"class":42},[36,45726,45727],{"class":38,"line":12196},[36,45728,70],{"emptyLinePlaceholder":69},[36,45730,45731],{"class":38,"line":12202},[36,45732,70],{"emptyLinePlaceholder":69},[36,45734,45735],{"class":38,"line":12223},[36,45736,34680],{"class":2621},[36,45738,45739],{"class":38,"line":12229},[36,45740,34685],{"class":2621},[36,45742,45743,45745,45747],{"class":38,"line":12243},[36,45744,34690],{"class":42},[36,45746,47],{"class":46},[36,45748,34695],{"class":62},[36,45750,45751],{"class":38,"line":12249},[36,45752,34700],{"class":2621},[36,45754,45755,45757,45759],{"class":38,"line":12276},[36,45756,34705],{"class":42},[36,45758,47],{"class":46},[36,45760,34710],{"class":42},[36,45762,45763],{"class":38,"line":12285},[36,45764,34715],{"class":2621},[36,45766,45767,45769,45771],{"class":38,"line":12291},[36,45768,34720],{"class":42},[36,45770,47],{"class":46},[36,45772,34710],{"class":42},[36,45774,45775],{"class":38,"line":12299},[36,45776,34729],{"class":2621},[36,45778,45779,45781,45783],{"class":38,"line":12304},[36,45780,34734],{"class":42},[36,45782,47],{"class":46},[36,45784,34710],{"class":42},[36,45786,45787],{"class":38,"line":18977},[36,45788,34743],{"class":2621},[36,45790,45791,45793,45795],{"class":38,"line":18983},[36,45792,34748],{"class":42},[36,45794,47],{"class":46},[36,45796,34710],{"class":42},[36,45798,45799],{"class":38,"line":19006},[36,45800,70],{"emptyLinePlaceholder":69},[36,45802,45803],{"class":38,"line":19012},[36,45804,34761],{"class":2621},[36,45806,45807,45809,45811],{"class":38,"line":19035},[36,45808,34766],{"class":42},[36,45810,47],{"class":46},[36,45812,34771],{"class":42},[36,45814,45815],{"class":38,"line":19049},[36,45816,70],{"emptyLinePlaceholder":69},[36,45818,45819],{"class":38,"line":19069},[36,45820,70],{"emptyLinePlaceholder":69},[36,45822,45823],{"class":38,"line":19075},[36,45824,34784],{"class":2621},[36,45826,45827,45829,45831,45833,45835],{"class":38,"line":19086},[36,45828,5586],{"class":46},[36,45830,34791],{"class":42},[36,45832,28413],{"class":46},[36,45834,34796],{"class":62},[36,45836,34799],{"class":42},[36,45838,45839,45841,45843,45845,45847,45849,45851,45853,45855,45857,45859],{"class":38,"line":19109},[36,45840,168],{"class":62},[36,45842,92],{"class":42},[36,45844,34808],{"class":50},[36,45846,34811],{"class":62},[36,45848,3139],{"class":50},[36,45850,34811],{"class":62},[36,45852,604],{"class":50},[36,45854,34820],{"class":42},[36,45856,3087],{"class":46},[36,45858,1906],{"class":62},[36,45860,1914],{"class":42},[36,45862,45863,45865,45867,45869,45871,45873],{"class":38,"line":19131},[36,45864,168],{"class":62},[36,45866,92],{"class":42},[36,45868,34835],{"class":50},[36,45870,3011],{"class":46},[36,45872,3002],{"class":62},[36,45874,123],{"class":42},[36,45876,45877],{"class":38,"line":19136},[36,45878,70],{"emptyLinePlaceholder":69},[36,45880,45881],{"class":38,"line":19142},[36,45882,34850],{"class":2621},[36,45884,45885],{"class":38,"line":19156},[36,45886,34855],{"class":2621},[36,45888,45889,45891,45893],{"class":38,"line":19169},[36,45890,34860],{"class":42},[36,45892,47],{"class":46},[36,45894,34695],{"class":62},[36,45896,45897],{"class":38,"line":19174},[36,45898,34869],{"class":2621},[36,45900,45901,45903,45905],{"class":38,"line":19188},[36,45902,34874],{"class":42},[36,45904,47],{"class":46},[36,45906,5470],{"class":62},[36,45908,45909],{"class":38,"line":19193},[36,45910,34883],{"class":2621},[36,45912,45913,45915,45917],{"class":38,"line":19199},[36,45914,34888],{"class":42},[36,45916,47],{"class":46},[36,45918,34695],{"class":62},[36,45920,45921],{"class":38,"line":19204},[36,45922,34897],{"class":2621},[36,45924,45925,45927,45929],{"class":38,"line":19218},[36,45926,34902],{"class":42},[36,45928,47],{"class":46},[36,45930,5470],{"class":62},[36,45932,45933],{"class":38,"line":19223},[36,45934,34911],{"class":2621},[36,45936,45937,45939,45941],{"class":38,"line":19228},[36,45938,34916],{"class":42},[36,45940,47],{"class":46},[36,45942,5470],{"class":62},[36,45944,45945],{"class":38,"line":19242},[36,45946,34925],{"class":2621},[36,45948,45949,45951,45953],{"class":38,"line":19254},[36,45950,34930],{"class":42},[36,45952,47],{"class":46},[36,45954,5470],{"class":62},[36,45956,45957],{"class":38,"line":19259},[36,45958,34939],{"class":2621},[36,45960,45961,45963,45965,45967,45969],{"class":38,"line":19272},[36,45962,5788],{"class":46},[36,45964,33955],{"class":42},[36,45966,28413],{"class":46},[36,45968,33960],{"class":62},[36,45970,34952],{"class":42},[36,45972,45973],{"class":38,"line":19277},[36,45974,34957],{"class":2621},[36,45976,45977,45979,45981],{"class":38,"line":19282},[36,45978,34962],{"class":42},[36,45980,47],{"class":46},[36,45982,34967],{"class":42},[36,45984,45985],{"class":38,"line":19287},[36,45986,34972],{"class":2621},[36,45988,45989,45991,45993],{"class":38,"line":19300},[36,45990,34977],{"class":42},[36,45992,47],{"class":46},[36,45994,34982],{"class":42},[36,45996,45997],{"class":38,"line":19305},[36,45998,34988],{"class":2621},[36,46000,46001],{"class":38,"line":34985},[36,46002,34994],{"class":42},[36,46004,46005],{"class":38,"line":34991},[36,46006,35000],{"class":2621},[36,46008,46009],{"class":38,"line":34997},[36,46010,35006],{"class":2621},[36,46012,46013,46015,46017],{"class":38,"line":35003},[36,46014,35012],{"class":42},[36,46016,47],{"class":46},[36,46018,35017],{"class":42},[36,46020,46021],{"class":38,"line":35009},[36,46022,35023],{"class":2621},[36,46024,46025,46027,46029,46031,46033,46035,46037],{"class":38,"line":35020},[36,46026,35029],{"class":42},[36,46028,47],{"class":46},[36,46030,35034],{"class":42},[36,46032,35037],{"class":7598},[36,46034,47],{"class":46},[36,46036,1906],{"class":62},[36,46038,123],{"class":42},[36,46040,46041],{"class":38,"line":35026},[36,46042,35049],{"class":2621},[36,46044,46045,46047,46049],{"class":38,"line":35046},[36,46046,35055],{"class":42},[36,46048,47],{"class":46},[36,46050,35060],{"class":42},[36,46052,46053],{"class":38,"line":35052},[36,46054,35066],{"class":2621},[36,46056,46057],{"class":38,"line":35063},[36,46058,35072],{"class":42},[36,46060,46061],{"class":38,"line":35069},[36,46062,35078],{"class":2621},[36,46064,46065],{"class":38,"line":35075},[36,46066,35084],{"class":42},[36,46068,46069],{"class":38,"line":35081},[36,46070,35090],{"class":2621},[36,46072,46073],{"class":38,"line":35087},[36,46074,35096],{"class":42},[36,46076,46077],{"class":38,"line":35093},[36,46078,35102],{"class":2621},[36,46080,46081,46083,46085,46087,46089,46091,46093],{"class":38,"line":35099},[36,46082,35108],{"class":42},[36,46084,928],{"class":46},[36,46086,35113],{"class":42},[36,46088,3011],{"class":46},[36,46090,35118],{"class":42},[36,46092,2751],{"class":62},[36,46094,123],{"class":42},[36,46096,46097],{"class":38,"line":35105},[36,46098,35128],{"class":2621},[36,46100,46101,46103,46105,46107,46109],{"class":38,"line":35125},[36,46102,35134],{"class":42},[36,46104,928],{"class":46},[36,46106,35139],{"class":42},[36,46108,5334],{"class":46},[36,46110,35144],{"class":42},[36,46112,46113],{"class":38,"line":35131},[36,46114,35150],{"class":2621},[36,46116,46117,46119,46121,46123,46125],{"class":38,"line":35147},[36,46118,35156],{"class":42},[36,46120,928],{"class":46},[36,46122,35118],{"class":42},[36,46124,2751],{"class":62},[36,46126,123],{"class":42},[36,46128,46129],{"class":38,"line":35153},[36,46130,35170],{"class":2621},[36,46132,46133,46135,46137,46139,46141],{"class":38,"line":35167},[36,46134,5788],{"class":46},[36,46136,35178],{"class":42},[36,46138,28413],{"class":46},[36,46140,33960],{"class":62},[36,46142,35185],{"class":42},[36,46144,46145],{"class":38,"line":35173},[36,46146,35191],{"class":2621},[36,46148,46149,46151,46153],{"class":38,"line":35188},[36,46150,34962],{"class":42},[36,46152,47],{"class":46},[36,46154,34967],{"class":42},[36,46156,46157],{"class":38,"line":35194},[36,46158,35206],{"class":2621},[36,46160,46161,46163,46165],{"class":38,"line":35203},[36,46162,34977],{"class":42},[36,46164,47],{"class":46},[36,46166,34982],{"class":42},[36,46168,46169],{"class":38,"line":35209},[36,46170,35221],{"class":2621},[36,46172,46173],{"class":38,"line":35218},[36,46174,35227],{"class":42},[36,46176,46177],{"class":38,"line":35224},[36,46178,38707],{"class":2621},[36,46180,46181,46183],{"class":38,"line":35230},[36,46182,35233],{"class":46},[36,46184,35236],{"class":42},[36,46186,46187],{"class":38,"line":35239},[36,46188,35242],{"class":2621},[36,46190,46191,46193,46195],{"class":38,"line":35245},[36,46192,38722],{"class":42},[36,46194,47],{"class":46},[36,46196,35017],{"class":42},[36,46198,46199],{"class":38,"line":35256},[36,46200,35259],{"class":2621},[36,46202,46203,46205,46207,46209,46211,46213,46215],{"class":38,"line":35262},[36,46204,38735],{"class":42},[36,46206,47],{"class":46},[36,46208,35034],{"class":42},[36,46210,35037],{"class":7598},[36,46212,47],{"class":46},[36,46214,1906],{"class":62},[36,46216,123],{"class":42},[36,46218,46219],{"class":38,"line":35281},[36,46220,35284],{"class":2621},[36,46222,46223,46225,46227],{"class":38,"line":35287},[36,46224,38756],{"class":42},[36,46226,47],{"class":46},[36,46228,35060],{"class":42},[36,46230,46231],{"class":38,"line":35298},[36,46232,35301],{"class":2621},[36,46234,46235,46237,46239,46241,46243,46245,46247],{"class":38,"line":35304},[36,46236,38769],{"class":42},[36,46238,928],{"class":46},[36,46240,38774],{"class":42},[36,46242,3011],{"class":46},[36,46244,35118],{"class":42},[36,46246,2751],{"class":62},[36,46248,123],{"class":42},[36,46250,46251,46253,46255,46257,46259],{"class":38,"line":35324},[36,46252,38787],{"class":42},[36,46254,928],{"class":46},[36,46256,35139],{"class":42},[36,46258,5334],{"class":46},[36,46260,35144],{"class":42},[36,46262,46263],{"class":38,"line":35340},[36,46264,38800],{"class":2621},[36,46266,46267,46269,46271,46273,46275],{"class":38,"line":35346},[36,46268,38805],{"class":42},[36,46270,928],{"class":46},[36,46272,35118],{"class":42},[36,46274,2751],{"class":62},[36,46276,123],{"class":42},[36,46278,46279],{"class":38,"line":35360},[36,46280,35363],{"class":2621},[36,46282,46283],{"class":38,"line":35366},[36,46284,35369],{"class":2621},[36,46286,46287,46289,46291],{"class":38,"line":35372},[36,46288,35375],{"class":42},[36,46290,3139],{"class":46},[36,46292,35380],{"class":42},[36,46294,46295],{"class":38,"line":35383},[36,46296,35386],{"class":2621},[36,46298,46299],{"class":38,"line":35389},[36,46300,35392],{"class":2621},[36,46302,46303,46305,46307],{"class":38,"line":35395},[36,46304,35398],{"class":42},[36,46306,3139],{"class":46},[36,46308,35380],{"class":42},[36,46310,46311],{"class":38,"line":35405},[36,46312,35408],{"class":2621},[36,46314,46315,46317,46319],{"class":38,"line":35411},[36,46316,35414],{"class":42},[36,46318,3139],{"class":46},[36,46320,35419],{"class":42},[36,46322,46323],{"class":38,"line":35422},[36,46324,35425],{"class":2621},[36,46326,46327,46329,46331],{"class":38,"line":35428},[36,46328,35431],{"class":42},[36,46330,3139],{"class":46},[36,46332,35419],{"class":42},[36,46334,46335],{"class":38,"line":35438},[36,46336,70],{"emptyLinePlaceholder":69},[36,46338,46339],{"class":38,"line":35443},[36,46340,35446],{"class":2621},[36,46342,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381],{"class":38,"line":35449},[36,46344,168],{"class":62},[36,46346,92],{"class":42},[36,46348,5977],{"class":50},[36,46350,34811],{"class":62},[36,46352,35460],{"class":50},[36,46354,101],{"class":62},[36,46356,35465],{"class":46},[36,46358,107],{"class":62},[36,46360,35470],{"class":50},[36,46362,101],{"class":62},[36,46364,35465],{"class":46},[36,46366,107],{"class":62},[36,46368,5977],{"class":50},[36,46370,35481],{"class":42},[36,46372,3087],{"class":46},[36,46374,1906],{"class":62},[36,46376,35488],{"class":42},[36,46378,3087],{"class":46},[36,46380,1906],{"class":62},[36,46382,35495],{"class":42},[36,46384,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423],{"class":38,"line":35498},[36,46386,168],{"class":62},[36,46388,92],{"class":42},[36,46390,5977],{"class":50},[36,46392,34811],{"class":62},[36,46394,35509],{"class":50},[36,46396,101],{"class":62},[36,46398,35465],{"class":46},[36,46400,107],{"class":62},[36,46402,35518],{"class":50},[36,46404,101],{"class":62},[36,46406,35465],{"class":46},[36,46408,107],{"class":62},[36,46410,5977],{"class":50},[36,46412,35529],{"class":42},[36,46414,3087],{"class":46},[36,46416,1906],{"class":62},[36,46418,35536],{"class":42},[36,46420,3087],{"class":46},[36,46422,1906],{"class":62},[36,46424,35495],{"class":42},[36,46426,46427],{"class":38,"line":35545},[36,46428,70],{"emptyLinePlaceholder":69},[36,46430,46431],{"class":38,"line":35550},[36,46432,35553],{"class":2621},[36,46434,46435,46437,46439,46441,46443,46445,46447],{"class":38,"line":35556},[36,46436,890],{"class":46},[36,46438,35561],{"class":42},[36,46440,3087],{"class":46},[36,46442,1906],{"class":62},[36,46444,3493],{"class":42},[36,46446,986],{"class":46},[36,46448,35572],{"class":42},[36,46450,46451],{"class":38,"line":35575},[36,46452,35578],{"class":2621},[36,46454,46455,46457,46459,46461,46463,46465,46467],{"class":38,"line":35581},[36,46456,35584],{"class":42},[36,46458,2605],{"class":62},[36,46460,47],{"class":46},[36,46462,35591],{"class":42},[36,46464,3087],{"class":46},[36,46466,1906],{"class":62},[36,46468,35598],{"class":42},[36,46470,46471],{"class":38,"line":35601},[36,46472,35604],{"class":2621},[36,46474,46475],{"class":38,"line":35607},[36,46476,35610],{"class":2621},[36,46478,46479,46481,46483],{"class":38,"line":35613},[36,46480,35616],{"class":42},[36,46482,47],{"class":46},[36,46484,34667],{"class":42},[36,46486,46487],{"class":38,"line":35623},[36,46488,70],{"emptyLinePlaceholder":69},[36,46490,46491],{"class":38,"line":35628},[36,46492,35631],{"class":2621},[36,46494,46495,46497,46499,46501,46503],{"class":38,"line":35634},[36,46496,35637],{"class":42},[36,46498,47],{"class":46},[36,46500,35642],{"class":42},[36,46502,3087],{"class":46},[36,46504,35647],{"class":42},[36,46506,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541],{"class":38,"line":35650},[36,46508,168],{"class":62},[36,46510,92],{"class":42},[36,46512,35657],{"class":50},[36,46514,101],{"class":62},[36,46516,35662],{"class":46},[36,46518,107],{"class":62},[36,46520,3099],{"class":50},[36,46522,101],{"class":62},[36,46524,35662],{"class":46},[36,46526,107],{"class":62},[36,46528,35675],{"class":50},[36,46530,35678],{"class":42},[36,46532,35681],{"class":46},[36,46534,3460],{"class":62},[36,46536,35686],{"class":42},[36,46538,2884],{"class":46},[36,46540,3460],{"class":62},[36,46542,1914],{"class":42},[36,46544,46545],{"class":38,"line":35695},[36,46546,39084],{"class":2621},[36,46548,46549],{"class":38,"line":35701},[36,46550,39089],{"class":2621},[36,46552,46553,46555,46557],{"class":38,"line":35707},[36,46554,39094],{"class":42},[36,46556,35719],{"class":50},[36,46558,123],{"class":42},[36,46560,46561],{"class":38,"line":35713},[36,46562,35739],{"class":2621},[36,46564,46565,46567,46569,46571,46573,46575],{"class":38,"line":35724},[36,46566,35745],{"class":42},[36,46568,47],{"class":46},[36,46570,35750],{"class":42},[36,46572,35753],{"class":7598},[36,46574,47],{"class":46},[36,46576,3963],{"class":42},[36,46578,46579,46581,46583,46585],{"class":38,"line":35730},[36,46580,35763],{"class":50},[36,46582,3413],{"class":42},[36,46584,35768],{"class":62},[36,46586,35771],{"class":42},[36,46588,46589,46591],{"class":38,"line":35736},[36,46590,35777],{"class":50},[36,46592,35780],{"class":42},[36,46594,46595,46597],{"class":38,"line":35742},[36,46596,35786],{"class":50},[36,46598,35789],{"class":42},[36,46600,46601,46603],{"class":38,"line":35760},[36,46602,35795],{"class":50},[36,46604,35798],{"class":42},[36,46606,46607,46609],{"class":38,"line":35774},[36,46608,35804],{"class":50},[36,46610,35807],{"class":42},[36,46612,46613],{"class":38,"line":35783},[36,46614,35813],{"class":42},[36,46616,46617],{"class":38,"line":35792},[36,46618,35819],{"class":2621},[36,46620,46621,46623],{"class":38,"line":35801},[36,46622,6474],{"class":46},[36,46624,35827],{"class":42},[36,46626,46627],{"class":38,"line":35810},[36,46628,70],{"emptyLinePlaceholder":69},[36,46630,46631],{"class":38,"line":35816},[36,46632,35838],{"class":2621},[36,46634,46635,46637,46639],{"class":38,"line":35822},[36,46636,76],{"class":46},[36,46638,35846],{"class":79},[36,46640,35849],{"class":42},[36,46642,46643],{"class":38,"line":35830},[36,46644,35855],{"class":2621},[36,46646,46647,46649,46651,46653,46655,46657,46659,46661],{"class":38,"line":35835},[36,46648,35861],{"class":42},[36,46650,34047],{"class":7598},[36,46652,47],{"class":46},[36,46654,92],{"class":42},[36,46656,3053],{"class":62},[36,46658,2934],{"class":42},[36,46660,2850],{"class":62},[36,46662,1914],{"class":42},[36,46664,46665],{"class":38,"line":35841},[36,46666,35881],{"class":2621},[36,46668,46669],{"class":38,"line":35852},[36,46670,35887],{"class":2621},[36,46672,46673],{"class":38,"line":35858},[36,46674,35893],{"class":2621},[36,46676,46677,46679,46681,46683,46685,46687,46689],{"class":38,"line":35878},[36,46678,34081],{"class":42},[36,46680,1906],{"class":62},[36,46682,2934],{"class":42},[36,46684,1911],{"class":62},[36,46686,2934],{"class":42},[36,46688,1906],{"class":62},[36,46690,123],{"class":42},[36,46692,46693],{"class":38,"line":35884},[36,46694,35916],{"class":2621},[36,46696,46697],{"class":38,"line":35890},[36,46698,35922],{"class":2621},[36,46700,46701],{"class":38,"line":35896},[36,46702,35928],{"class":2621},[36,46704,46705],{"class":38,"line":35913},[36,46706,35934],{"class":2621},[36,46708,46709],{"class":38,"line":35919},[36,46710,35940],{"class":2621},[36,46712,46713,46715,46717,46719,46721,46723,46725,46727,46729],{"class":38,"line":35925},[36,46714,35946],{"class":42},[36,46716,35949],{"class":50},[36,46718,35952],{"class":42},[36,46720,35955],{"class":50},[36,46722,2934],{"class":42},[36,46724,35960],{"class":7598},[36,46726,47],{"class":46},[36,46728,35965],{"class":50},[36,46730,123],{"class":42},[36,46732,46733,46735,46737,46739,46741,46743,46745,46747,46749],{"class":38,"line":35931},[36,46734,35946],{"class":42},[36,46736,35949],{"class":50},[36,46738,35977],{"class":42},[36,46740,35980],{"class":50},[36,46742,2934],{"class":42},[36,46744,35960],{"class":7598},[36,46746,47],{"class":46},[36,46748,35989],{"class":50},[36,46750,123],{"class":42},[36,46752,46753],{"class":38,"line":35937},[36,46754,35997],{"class":2621},[36,46756,46757],{"class":38,"line":35943},[36,46758,36003],{"class":42},[36,46760,46761],{"class":38,"line":35970},[36,46762,36009],{"class":2621},[36,46764,46765,46767,46769],{"class":38,"line":35994},[36,46766,36015],{"class":42},[36,46768,36018],{"class":50},[36,46770,123],{"class":42},[36,46772,46773,46775,46777],{"class":38,"line":36000},[36,46774,36026],{"class":42},[36,46776,36029],{"class":50},[36,46778,123],{"class":42},[36,46780,46781],{"class":38,"line":36006},[36,46782,36037],{"class":2621},[36,46784,46785,46787,46789,46791,46793,46795,46797],{"class":38,"line":36012},[36,46786,34081],{"class":42},[36,46788,1906],{"class":62},[36,46790,2934],{"class":42},[36,46792,1911],{"class":62},[36,46794,2934],{"class":42},[36,46796,1911],{"class":62},[36,46798,123],{"class":42},[36,46800,46801,46803,46805,46807,46809,46811,46813,46815,46817],{"class":38,"line":36023},[36,46802,35946],{"class":42},[36,46804,35949],{"class":50},[36,46806,36064],{"class":42},[36,46808,35955],{"class":50},[36,46810,2934],{"class":42},[36,46812,35960],{"class":7598},[36,46814,47],{"class":46},[36,46816,36075],{"class":50},[36,46818,123],{"class":42},[36,46820,46821,46823,46825,46827,46829,46831,46833,46835,46837],{"class":38,"line":36034},[36,46822,35946],{"class":42},[36,46824,35949],{"class":50},[36,46826,36087],{"class":42},[36,46828,35980],{"class":50},[36,46830,2934],{"class":42},[36,46832,35960],{"class":7598},[36,46834,47],{"class":46},[36,46836,36098],{"class":50},[36,46838,123],{"class":42},[36,46840,46841],{"class":38,"line":36040},[36,46842,36106],{"class":2621},[36,46844,46845],{"class":38,"line":36057},[36,46846,36003],{"class":42},[36,46848,46849,46851,46853],{"class":38,"line":36080},[36,46850,36015],{"class":42},[36,46852,35949],{"class":50},[36,46854,123],{"class":42},[36,46856,46857,46859,46861],{"class":38,"line":36103},[36,46858,36026],{"class":42},[36,46860,36128],{"class":50},[36,46862,123],{"class":42},[36,46864,46865],{"class":38,"line":36109},[36,46866,36136],{"class":42},[36,46868,46869],{"class":38,"line":36114},[36,46870,70],{"emptyLinePlaceholder":69},[36,46872,46873],{"class":38,"line":36123},[36,46874,36147],{"class":2621},[36,46876,46877,46879,46881,46883,46885],{"class":38,"line":36133},[36,46878,3948],{"class":46},[36,46880,33575],{"class":62},[36,46882,5334],{"class":46},[36,46884,33580],{"class":50},[36,46886,153],{"class":42},[36,46888,46889],{"class":38,"line":36139},[36,46890,36166],{"class":2621},[36,46892,46893,46896,46898],{"class":38,"line":36144},[36,46894,46895],{"class":42},"    GoogLeNet",[36,46897,47],{"class":46},[36,46899,46900],{"class":42},"GoogLeNet(Inception)\n",[36,46902,46903,46905,46907],{"class":38,"line":36150},[36,46904,36183],{"class":42},[36,46906,47],{"class":46},[36,46908,36188],{"class":42},[36,46910,46911,46913,46915,46918,46920,46922,46924],{"class":38,"line":36163},[36,46912,35745],{"class":42},[36,46914,47],{"class":46},[36,46916,46917],{"class":42},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,46919,36201],{"class":7598},[36,46921,47],{"class":46},[36,46923,3503],{"class":62},[36,46925,123],{"class":42},[36,46927,46928],{"class":38,"line":36169},[36,46929,36213],{"class":42},[650,46931,46932],{"start":66},[653,46933,42923],{},[26,46935,46937],{"className":28,"code":46936,"language":30,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,46938,46939,46945,46955,46965,46969,46979,46990,46994,46998,47002,47010,47026,47036,47052,47062,47076,47080,47090,47100,47110,47116,47120,47124,47132,47136,47152,47160,47164,47168,47176,47184,47188,47192,47196,47200,47206,47210,47220,47228,47236,47240,47244,47248,47256,47260,47276,47280,47284,47288,47300,47304,47316,47320,47324,47336,47340,47350,47354,47358,47370,47374,47382,47386,47390,47398,47402,47410,47414,47418,47422,47426,47430,47446,47454,47458,47462,47510,47516,47520,47530,47538,47546,47550,47554,47558,47562,47570,47574,47590,47594,47602,47610],{"__ignoreMap":31},[36,46940,46941,46943],{"class":38,"line":39},[36,46942,1943],{"class":46},[36,46944,32761],{"class":42},[36,46946,46947,46949,46951,46953],{"class":38,"line":54},[36,46948,1943],{"class":46},[36,46950,33769],{"class":42},[36,46952,33737],{"class":46},[36,46954,33774],{"class":42},[36,46956,46957,46959,46961,46963],{"class":38,"line":66},[36,46958,1937],{"class":46},[36,46960,33752],{"class":42},[36,46962,1943],{"class":46},[36,46964,33757],{"class":42},[36,46966,46967],{"class":38,"line":73},[36,46968,36274],{"class":2621},[36,46970,46971,46973,46975,46977],{"class":38,"line":86},[36,46972,1937],{"class":46},[36,46974,33722],{"class":42},[36,46976,1943],{"class":46},[36,46978,33727],{"class":42},[36,46980,46981,46983,46985,46987],{"class":38,"line":126},[36,46982,1937],{"class":46},[36,46984,34268],{"class":42},[36,46986,1943],{"class":46},[36,46988,46989],{"class":42}," GoogLeNet,Inception\n",[36,46991,46992],{"class":38,"line":131},[36,46993,70],{"emptyLinePlaceholder":69},[36,46995,46996],{"class":38,"line":225},[36,46997,70],{"emptyLinePlaceholder":69},[36,46999,47000],{"class":38,"line":235},[36,47001,36303],{"class":2621},[36,47003,47004,47006,47008],{"class":38,"line":377},[36,47005,76],{"class":46},[36,47007,36310],{"class":79},[36,47009,34306],{"class":42},[36,47011,47012,47014,47016,47018,47020,47022,47024],{"class":38,"line":617},[36,47013,36317],{"class":42},[36,47015,47],{"class":46},[36,47017,33809],{"class":42},[36,47019,33812],{"class":7598},[36,47021,47],{"class":46},[36,47023,33817],{"class":50},[36,47025,33820],{"class":42},[36,47027,47028,47030,47032,47034],{"class":38,"line":643},[36,47029,36334],{"class":7598},[36,47031,47],{"class":46},[36,47033,36339],{"class":62},[36,47035,33820],{"class":42},[36,47037,47038,47040,47042,47044,47046,47048,47050],{"class":38,"line":921},[36,47039,36346],{"class":7598},[36,47041,47],{"class":46},[36,47043,33847],{"class":42},[36,47045,33850],{"class":7598},[36,47047,47],{"class":46},[36,47049,37800],{"class":62},[36,47051,33858],{"class":42},[36,47053,47054,47056,47058,47060],{"class":38,"line":934},[36,47055,36363],{"class":7598},[36,47057,47],{"class":46},[36,47059,33830],{"class":62},[36,47061,123],{"class":42},[36,47063,47064,47066,47068,47070,47072,47074],{"class":38,"line":939},[36,47065,36374],{"class":42},[36,47067,47],{"class":46},[36,47069,33888],{"class":42},[36,47071,33891],{"class":7598},[36,47073,47],{"class":46},[36,47075,36385],{"class":42},[36,47077,47078],{"class":38,"line":949},[36,47079,36390],{"class":2621},[36,47081,47082,47084,47086,47088],{"class":38,"line":962},[36,47083,36395],{"class":7598},[36,47085,47],{"class":46},[36,47087,1906],{"class":62},[36,47089,33820],{"class":42},[36,47091,47092,47094,47096,47098],{"class":38,"line":974},[36,47093,36406],{"class":7598},[36,47095,47],{"class":46},[36,47097,33830],{"class":62},[36,47099,33820],{"class":42},[36,47101,47102,47104,47106,47108],{"class":38,"line":979},[36,47103,36417],{"class":7598},[36,47105,47],{"class":46},[36,47107,2751],{"class":62},[36,47109,123],{"class":42},[36,47111,47112,47114],{"class":38,"line":994},[36,47113,6474],{"class":46},[36,47115,36430],{"class":42},[36,47117,47118],{"class":38,"line":1006},[36,47119,70],{"emptyLinePlaceholder":69},[36,47121,47122],{"class":38,"line":1011},[36,47123,36439],{"class":2621},[36,47125,47126,47128,47130],{"class":38,"line":1023},[36,47127,76],{"class":46},[36,47129,36446],{"class":79},[36,47131,36449],{"class":42},[36,47133,47134],{"class":38,"line":1028},[36,47135,36454],{"class":2621},[36,47137,47138,47140,47142,47144,47146,47148,47150],{"class":38,"line":1033},[36,47139,33592],{"class":42},[36,47141,47],{"class":46},[36,47143,33599],{"class":50},[36,47145,4108],{"class":46},[36,47147,33604],{"class":42},[36,47149,4105],{"class":46},[36,47151,36471],{"class":50},[36,47153,47154,47156,47158],{"class":38,"line":1053},[36,47155,33644],{"class":42},[36,47157,47],{"class":46},[36,47159,34642],{"class":42},[36,47161,47162],{"class":38,"line":1064},[36,47163,70],{"emptyLinePlaceholder":69},[36,47165,47166],{"class":38,"line":1075},[36,47167,36488],{"class":2621},[36,47169,47170,47172,47174],{"class":38,"line":2291},[36,47171,36493],{"class":42},[36,47173,47],{"class":46},[36,47175,34695],{"class":62},[36,47177,47178,47180,47182],{"class":38,"line":2329},[36,47179,36502],{"class":42},[36,47181,47],{"class":46},[36,47183,5470],{"class":62},[36,47185,47186],{"class":38,"line":2334},[36,47187,70],{"emptyLinePlaceholder":69},[36,47189,47190],{"class":38,"line":2339},[36,47191,36515],{"class":2621},[36,47193,47194],{"class":38,"line":2365},[36,47195,36520],{"class":2621},[36,47197,47198],{"class":38,"line":2373},[36,47199,36525],{"class":2621},[36,47201,47202,47204],{"class":38,"line":5001},[36,47203,36530],{"class":46},[36,47205,35236],{"class":42},[36,47207,47208],{"class":38,"line":5006},[36,47209,36537],{"class":2621},[36,47211,47212,47214,47216,47218],{"class":38,"line":10328},[36,47213,5788],{"class":46},[36,47215,36544],{"class":42},[36,47217,28413],{"class":46},[36,47219,36549],{"class":42},[36,47221,47222,47224,47226],{"class":38,"line":10352},[36,47223,36554],{"class":42},[36,47225,47],{"class":46},[36,47227,36559],{"class":42},[36,47229,47230,47232,47234],{"class":38,"line":10357},[36,47231,36564],{"class":42},[36,47233,47],{"class":46},[36,47235,36569],{"class":42},[36,47237,47238],{"class":38,"line":10363},[36,47239,36574],{"class":2621},[36,47241,47242],{"class":38,"line":10390},[36,47243,35227],{"class":42},[36,47245,47246],{"class":38,"line":10395},[36,47247,36583],{"class":2621},[36,47249,47250,47252,47254],{"class":38,"line":10401},[36,47251,35012],{"class":42},[36,47253,47],{"class":46},[36,47255,36592],{"class":42},[36,47257,47258],{"class":38,"line":10413},[36,47259,36597],{"class":2621},[36,47261,47262,47264,47266,47268,47270,47272,47274],{"class":38,"line":10425},[36,47263,35029],{"class":42},[36,47265,47],{"class":46},[36,47267,35034],{"class":42},[36,47269,35037],{"class":7598},[36,47271,47],{"class":46},[36,47273,1906],{"class":62},[36,47275,123],{"class":42},[36,47277,47278],{"class":38,"line":10437},[36,47279,36618],{"class":2621},[36,47281,47282],{"class":38,"line":12095},[36,47283,36623],{"class":2621},[36,47285,47286],{"class":38,"line":12120},[36,47287,36628],{"class":2621},[36,47289,47290,47292,47294,47296,47298],{"class":38,"line":12143},[36,47291,36633],{"class":42},[36,47293,928],{"class":46},[36,47295,35139],{"class":42},[36,47297,5334],{"class":46},[36,47299,36642],{"class":42},[36,47301,47302],{"class":38,"line":12167},[36,47303,36647],{"class":2621},[36,47305,47306,47308,47310,47312,47314],{"class":38,"line":12172},[36,47307,36652],{"class":42},[36,47309,928],{"class":46},[36,47311,36657],{"class":42},[36,47313,2751],{"class":62},[36,47315,123],{"class":42},[36,47317,47318],{"class":38,"line":12177},[36,47319,70],{"emptyLinePlaceholder":69},[36,47321,47322],{"class":38,"line":12182},[36,47323,36670],{"class":2621},[36,47325,47326,47328,47330,47332,47334],{"class":38,"line":12191},[36,47327,36675],{"class":42},[36,47329,47],{"class":46},[36,47331,36680],{"class":42},[36,47333,3139],{"class":46},[36,47335,36685],{"class":42},[36,47337,47338],{"class":38,"line":12196},[36,47339,36690],{"class":2621},[36,47341,47342,47344,47346,47348],{"class":38,"line":12202},[36,47343,168],{"class":62},[36,47345,92],{"class":42},[36,47347,36699],{"class":50},[36,47349,36702],{"class":42},[36,47351,47352],{"class":38,"line":12223},[36,47353,70],{"emptyLinePlaceholder":69},[36,47355,47356],{"class":38,"line":12229},[36,47357,36711],{"class":2621},[36,47359,47360,47362,47364,47366,47368],{"class":38,"line":12243},[36,47361,3948],{"class":46},[36,47363,33575],{"class":62},[36,47365,5334],{"class":46},[36,47367,33580],{"class":50},[36,47369,153],{"class":42},[36,47371,47372],{"class":38,"line":12249},[36,47373,36728],{"class":2621},[36,47375,47376,47378,47380],{"class":38,"line":12276},[36,47377,33644],{"class":42},[36,47379,47],{"class":46},[36,47381,46900],{"class":42},[36,47383,47384],{"class":38,"line":12285},[36,47385,36741],{"class":2621},[36,47387,47388],{"class":38,"line":12291},[36,47389,36746],{"class":2621},[36,47391,47392,47394,47396],{"class":38,"line":12299},[36,47393,36751],{"class":42},[36,47395,36754],{"class":50},[36,47397,1914],{"class":42},[36,47399,47400],{"class":38,"line":12304},[36,47401,36761],{"class":2621},[36,47403,47404,47406,47408],{"class":38,"line":18977},[36,47405,36374],{"class":42},[36,47407,47],{"class":46},[36,47409,36770],{"class":42},[36,47411,47412],{"class":38,"line":18983},[36,47413,36775],{"class":2621},[36,47415,47416],{"class":38,"line":19006},[36,47417,36780],{"class":42},[36,47419,47420],{"class":38,"line":19012},[36,47421,70],{"emptyLinePlaceholder":69},[36,47423,47424],{"class":38,"line":19035},[36,47425,36789],{"class":2621},[36,47427,47428],{"class":38,"line":19049},[36,47429,36794],{"class":2621},[36,47431,47432,47434,47436,47438,47440,47442,47444],{"class":38,"line":19069},[36,47433,33592],{"class":42},[36,47435,47],{"class":46},[36,47437,33599],{"class":50},[36,47439,4108],{"class":46},[36,47441,33604],{"class":42},[36,47443,4105],{"class":46},[36,47445,36471],{"class":50},[36,47447,47448,47450,47452],{"class":38,"line":19075},[36,47449,33644],{"class":42},[36,47451,47],{"class":46},[36,47453,34642],{"class":42},[36,47455,47456],{"class":38,"line":19086},[36,47457,36823],{"class":2621},[36,47459,47460],{"class":38,"line":19109},[36,47461,36828],{"class":2621},[36,47463,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482,47484,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504,47506,47508],{"class":38,"line":19131},[36,47465,36833],{"class":42},[36,47467,47],{"class":46},[36,47469,3444],{"class":42},[36,47471,36840],{"class":50},[36,47473,2934],{"class":42},[36,47475,36845],{"class":50},[36,47477,2934],{"class":42},[36,47479,36850],{"class":50},[36,47481,2934],{"class":42},[36,47483,36855],{"class":50},[36,47485,2934],{"class":42},[36,47487,36860],{"class":50},[36,47489,2934],{"class":42},[36,47491,36865],{"class":50},[36,47493,2934],{"class":42},[36,47495,36870],{"class":50},[36,47497,2934],{"class":42},[36,47499,36875],{"class":50},[36,47501,2934],{"class":42},[36,47503,36880],{"class":50},[36,47505,2934],{"class":42},[36,47507,36885],{"class":50},[36,47509,35598],{"class":42},[36,47511,47512,47514],{"class":38,"line":19136},[36,47513,36530],{"class":46},[36,47515,35236],{"class":42},[36,47517,47518],{"class":38,"line":19142},[36,47519,36898],{"class":2621},[36,47521,47522,47524,47526,47528],{"class":38,"line":19156},[36,47523,5788],{"class":46},[36,47525,36905],{"class":42},[36,47527,28413],{"class":46},[36,47529,36549],{"class":42},[36,47531,47532,47534,47536],{"class":38,"line":19169},[36,47533,34962],{"class":42},[36,47535,47],{"class":46},[36,47537,34967],{"class":42},[36,47539,47540,47542,47544],{"class":38,"line":19174},[36,47541,34977],{"class":42},[36,47543,47],{"class":46},[36,47545,34982],{"class":42},[36,47547,47548],{"class":38,"line":19188},[36,47549,70],{"emptyLinePlaceholder":69},[36,47551,47552],{"class":38,"line":19193},[36,47553,36934],{"class":2621},[36,47555,47556],{"class":38,"line":19199},[36,47557,35227],{"class":42},[36,47559,47560],{"class":38,"line":19204},[36,47561,36943],{"class":2621},[36,47563,47564,47566,47568],{"class":38,"line":19218},[36,47565,35012],{"class":42},[36,47567,47],{"class":46},[36,47569,35017],{"class":42},[36,47571,47572],{"class":38,"line":19223},[36,47573,36956],{"class":2621},[36,47575,47576,47578,47580,47582,47584,47586,47588],{"class":38,"line":19228},[36,47577,35029],{"class":42},[36,47579,47],{"class":46},[36,47581,35034],{"class":42},[36,47583,35037],{"class":7598},[36,47585,47],{"class":46},[36,47587,1906],{"class":62},[36,47589,123],{"class":42},[36,47591,47592],{"class":38,"line":19242},[36,47593,36977],{"class":2621},[36,47595,47596,47598,47600],{"class":38,"line":19254},[36,47597,36982],{"class":42},[36,47599,47],{"class":46},[36,47601,36987],{"class":42},[36,47603,47604,47606,47608],{"class":38,"line":19259},[36,47605,36992],{"class":42},[36,47607,47],{"class":46},[36,47609,36997],{"class":42},[36,47611,47612,47614,47616,47618,47620,47622,47624,47626],{"class":38,"line":19272},[36,47613,906],{"class":62},[36,47615,92],{"class":42},[36,47617,37006],{"class":50},[36,47619,37009],{"class":42},[36,47621,37012],{"class":50},[36,47623,2934],{"class":42},[36,47625,37017],{"class":50},[36,47627,37020],{"class":42},[1752,47629,47631],{"id":47630},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47633,47634],{},"猫狗分类任务",[19,47636,47637],{},"划分数据集和验证集",[26,47639,47641],{"className":28,"code":47640,"language":30,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[33,47642,47643,47648,47655,47660,47671,47678,47682,47692,47706,47715,47719,47724,47734,47754,47758,47763,47773,47784,47797,47801,47806,47815,47825,47836,47840,47845,47855,47859,47864,47869,47874,47879,47884,47888,47898,47925,47938,47950,47977,47982,47987,48001,48006,48018,48033,48048,48056,48060,48065,48071,48083,48096,48101,48106,48111,48161,48167,48171],{"__ignoreMap":31},[36,47644,47645],{"class":38,"line":39},[36,47646,47647],{"class":2621},"# 创建脚本，用于划分数据集和验证集\n",[36,47649,47650,47652],{"class":38,"line":54},[36,47651,1943],{"class":46},[36,47653,47654],{"class":42}," os\n",[36,47656,47657],{"class":38,"line":66},[36,47658,47659],{"class":2621},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,47661,47662,47664,47667,47669],{"class":38,"line":73},[36,47663,1937],{"class":46},[36,47665,47666],{"class":42}," shutil ",[36,47668,1943],{"class":46},[36,47670,34176],{"class":42},[36,47672,47673,47675],{"class":38,"line":86},[36,47674,1943],{"class":46},[36,47676,47677],{"class":42}," random\n",[36,47679,47680],{"class":38,"line":126},[36,47681,70],{"emptyLinePlaceholder":69},[36,47683,47684,47686,47689],{"class":38,"line":131},[36,47685,76],{"class":46},[36,47687,47688],{"class":79}," mkfile",[36,47690,47691],{"class":42},"(file):\n",[36,47693,47694,47696,47698,47701,47704],{"class":38,"line":225},[36,47695,5486],{"class":46},[36,47697,41279],{"class":46},[36,47699,47700],{"class":42}," os.path.exists(",[36,47702,47703],{"class":7598},"file",[36,47705,1147],{"class":42},[36,47707,47708,47711,47713],{"class":38,"line":235},[36,47709,47710],{"class":42},"        os.makedirs(",[36,47712,47703],{"class":7598},[36,47714,123],{"class":42},[36,47716,47717],{"class":38,"line":377},[36,47718,70],{"emptyLinePlaceholder":69},[36,47720,47721],{"class":38,"line":617},[36,47722,47723],{"class":2621},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,47725,47726,47729,47731],{"class":38,"line":643},[36,47727,47728],{"class":42},"file_path",[36,47730,47],{"class":46},[36,47732,47733],{"class":50},"'data_cat_dog'\n",[36,47735,47736,47739,47741,47744,47746,47749,47751],{"class":38,"line":921},[36,47737,47738],{"class":42},"flower_class",[36,47740,47],{"class":46},[36,47742,47743],{"class":42},"[cla ",[36,47745,5410],{"class":46},[36,47747,47748],{"class":42}," cla ",[36,47750,28413],{"class":46},[36,47752,47753],{"class":42}," os.listdir(file_path)]\n",[36,47755,47756],{"class":38,"line":934},[36,47757,70],{"emptyLinePlaceholder":69},[36,47759,47760],{"class":38,"line":939},[36,47761,47762],{"class":2621},"# 创建训练集train文件夹\n",[36,47764,47765,47768,47771],{"class":38,"line":949},[36,47766,47767],{"class":42},"mkfile(",[36,47769,47770],{"class":50},"'data\u002Ftrain'",[36,47772,123],{"class":42},[36,47774,47775,47777,47779,47781],{"class":38,"line":962},[36,47776,5410],{"class":46},[36,47778,47748],{"class":42},[36,47780,28413],{"class":46},[36,47782,47783],{"class":42}," flower_class:\n",[36,47785,47786,47789,47792,47794],{"class":38,"line":974},[36,47787,47788],{"class":42},"    mkfile(",[36,47790,47791],{"class":50},"'data\u002Ftrain\u002F'",[36,47793,1885],{"class":46},[36,47795,47796],{"class":42},"cla)\n",[36,47798,47799],{"class":38,"line":979},[36,47800,70],{"emptyLinePlaceholder":69},[36,47802,47803],{"class":38,"line":994},[36,47804,47805],{"class":2621},"# 创建验证集val文件夹\n",[36,47807,47808,47810,47813],{"class":38,"line":1006},[36,47809,47767],{"class":42},[36,47811,47812],{"class":50},"'data\u002Ftest'",[36,47814,123],{"class":42},[36,47816,47817,47819,47821,47823],{"class":38,"line":1011},[36,47818,5410],{"class":46},[36,47820,47748],{"class":42},[36,47822,28413],{"class":46},[36,47824,47783],{"class":42},[36,47826,47827,47829,47832,47834],{"class":38,"line":1023},[36,47828,47788],{"class":42},[36,47830,47831],{"class":50},"'data\u002Ftest\u002F'",[36,47833,1885],{"class":46},[36,47835,47796],{"class":42},[36,47837,47838],{"class":38,"line":1028},[36,47839,70],{"emptyLinePlaceholder":69},[36,47841,47842],{"class":38,"line":1033},[36,47843,47844],{"class":2621},"# 划分比例，训练集：测试集=9：1\n",[36,47846,47847,47850,47852],{"class":38,"line":1053},[36,47848,47849],{"class":42},"split_rate",[36,47851,47],{"class":46},[36,47853,47854],{"class":62},"0.1\n",[36,47856,47857],{"class":38,"line":1064},[36,47858,70],{"emptyLinePlaceholder":69},[36,47860,47861],{"class":38,"line":1075},[36,47862,47863],{"class":2621},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,47865,47866],{"class":38,"line":2291},[36,47867,47868],{"class":2621},"# cla_path：当前类别的原始图片路径\n",[36,47870,47871],{"class":38,"line":2329},[36,47872,47873],{"class":2621},"# images：当前类别下所有图片的文件名列表\n",[36,47875,47876],{"class":38,"line":2334},[36,47877,47878],{"class":2621},"# num：该类别图片总数\n",[36,47880,47881],{"class":38,"line":2339},[36,47882,47883],{"class":2621},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,47885,47886],{"class":38,"line":2365},[36,47887,70],{"emptyLinePlaceholder":69},[36,47889,47890,47892,47894,47896],{"class":38,"line":2373},[36,47891,5410],{"class":46},[36,47893,47748],{"class":42},[36,47895,28413],{"class":46},[36,47897,47783],{"class":42},[36,47899,47900,47903,47905,47908,47910,47913,47916,47918,47920,47922],{"class":38,"line":5001},[36,47901,47902],{"class":42},"    cla_path ",[36,47904,47],{"class":46},[36,47906,47907],{"class":42}," file_path ",[36,47909,1885],{"class":46},[36,47911,47912],{"class":50}," '\u002F'",[36,47914,47915],{"class":46}," +",[36,47917,47748],{"class":42},[36,47919,1885],{"class":46},[36,47921,47912],{"class":50},[36,47923,47924],{"class":2621},"  # 某一类别的子目录\n",[36,47926,47927,47930,47932,47935],{"class":38,"line":5006},[36,47928,47929],{"class":42},"    images ",[36,47931,47],{"class":46},[36,47933,47934],{"class":42}," os.listdir(cla_path)  ",[36,47936,47937],{"class":2621},"# iamges 列表存储了该目录下所有图像的名称\n",[36,47939,47940,47943,47945,47947],{"class":38,"line":10328},[36,47941,47942],{"class":42},"    num ",[36,47944,47],{"class":46},[36,47946,9712],{"class":62},[36,47948,47949],{"class":42},"(images)\n",[36,47951,47952,47955,47957,47960,47962,47964,47966,47969,47971,47974],{"class":38,"line":10352},[36,47953,47954],{"class":42},"    eval_index ",[36,47956,47],{"class":46},[36,47958,47959],{"class":42}," random.sample(images, ",[36,47961,3048],{"class":7598},[36,47963,47],{"class":46},[36,47965,2570],{"class":62},[36,47967,47968],{"class":42},"(num ",[36,47970,3011],{"class":46},[36,47972,47973],{"class":42}," split_rate))  ",[36,47975,47976],{"class":2621},"# 从images列表中随机抽取 k 个图像名称\n",[36,47978,47979],{"class":38,"line":10357},[36,47980,47981],{"class":2621},"    # 遍历该类别下的所有图片\n",[36,47983,47984],{"class":38,"line":10363},[36,47985,47986],{"class":2621},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,47988,47989,47991,47994,47996,47998],{"class":38,"line":10390},[36,47990,5586],{"class":46},[36,47992,47993],{"class":42}," index, image ",[36,47995,28413],{"class":46},[36,47997,33960],{"class":62},[36,47999,48000],{"class":42},"(images):\n",[36,48002,48003],{"class":38,"line":10395},[36,48004,48005],{"class":2621},"        # eval_index 中保存验证集val的图像名称\n",[36,48007,48008,48010,48013,48015],{"class":38,"line":10401},[36,48009,890],{"class":46},[36,48011,48012],{"class":42}," image ",[36,48014,28413],{"class":46},[36,48016,48017],{"class":42}," eval_index:\n",[36,48019,48020,48023,48025,48028,48030],{"class":38,"line":10413},[36,48021,48022],{"class":42},"            image_path ",[36,48024,47],{"class":46},[36,48026,48027],{"class":42}," cla_path ",[36,48029,1885],{"class":46},[36,48031,48032],{"class":42}," image\n",[36,48034,48035,48038,48040,48043,48045],{"class":38,"line":10425},[36,48036,48037],{"class":42},"            new_path ",[36,48039,47],{"class":46},[36,48041,48042],{"class":50}," 'data\u002Ftest\u002F'",[36,48044,47915],{"class":46},[36,48046,48047],{"class":42}," cla\n",[36,48049,48050,48053],{"class":38,"line":10437},[36,48051,48052],{"class":42},"            copy(image_path, new_path)  ",[36,48054,48055],{"class":2621},"# 将选中的图像复制到新路径\n",[36,48057,48058],{"class":38,"line":12095},[36,48059,70],{"emptyLinePlaceholder":69},[36,48061,48062],{"class":38,"line":12120},[36,48063,48064],{"class":2621},"        # 其余的图像保存在训练集train中\n",[36,48066,48067,48069],{"class":38,"line":12143},[36,48068,4924],{"class":46},[36,48070,153],{"class":42},[36,48072,48073,48075,48077,48079,48081],{"class":38,"line":12167},[36,48074,48022],{"class":42},[36,48076,47],{"class":46},[36,48078,48027],{"class":42},[36,48080,1885],{"class":46},[36,48082,48032],{"class":42},[36,48084,48085,48087,48089,48092,48094],{"class":38,"line":12172},[36,48086,48037],{"class":42},[36,48088,47],{"class":46},[36,48090,48091],{"class":50}," 'data\u002Ftrain\u002F'",[36,48093,47915],{"class":46},[36,48095,48047],{"class":42},[36,48097,48098],{"class":38,"line":12177},[36,48099,48100],{"class":42},"            copy(image_path, new_path)\n",[36,48102,48103],{"class":38,"line":12182},[36,48104,48105],{"class":2621},"            # 打印进度条信息\n",[36,48107,48108],{"class":38,"line":12191},[36,48109,48110],{"class":2621},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,48112,48113,48115,48117,48119,48122,48124,48126,48129,48131,48133,48135,48138,48141,48143,48145,48148,48151,48153,48155,48158],{"class":38,"line":12196},[36,48114,168],{"class":62},[36,48116,92],{"class":42},[36,48118,604],{"class":50},[36,48120,48121],{"class":62},"\\r",[36,48123,3444],{"class":50},[36,48125,34811],{"class":62},[36,48127,48128],{"class":50},"] processing [",[36,48130,34811],{"class":62},[36,48132,3139],{"class":50},[36,48134,34811],{"class":62},[36,48136,48137],{"class":50},"]\"",[36,48139,48140],{"class":42},".format(cla, index ",[36,48142,1885],{"class":46},[36,48144,27489],{"class":62},[36,48146,48147],{"class":42},", num), ",[36,48149,48150],{"class":7598},"end",[36,48152,47],{"class":46},[36,48154,10033],{"class":50},[36,48156,48157],{"class":42},")  ",[36,48159,48160],{"class":2621},"# processing bar\n",[36,48162,48163,48165],{"class":38,"line":12202},[36,48164,89],{"class":62},[36,48166,4369],{"class":42},[36,48168,48169],{"class":38,"line":12223},[36,48170,70],{"emptyLinePlaceholder":69},[36,48172,48173,48175,48177,48180],{"class":38,"line":12229},[36,48174,371],{"class":62},[36,48176,92],{"class":42},[36,48178,48179],{"class":50},"\"processing done!\"",[36,48181,123],{"class":42},[19,48183,48184],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24368,48186,48188],{"id":48187},"_242模型代码","2.4.2.模型代码",[19,48190,48191],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,48193,48195],{"className":28,"code":48194,"language":30,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[33,48196,48197,48203,48213,48223,48227,48243,48251,48265,48275,48279,48309,48313,48347,48393,48397,48431,48477,48481,48485,48519,48549,48553,48561,48575,48597,48619,48637,48641,48655,48659,48663,48679,48683,48691,48705,48715,48759,48763,48791,48795,48805,48833,48837,48873,48877,48905,48909,48919,48951,48983,49011,49015,49025,49057,49089,49121,49153,49185,49213,49217,49227,49259,49291,49303,49307,49319,49323,49327,49339,49347,49367,49371,49375,49379,49383,49387,49391,49405,49413,49421,49433,49447,49455,49459,49467,49477,49487,49497,49507,49517,49523,49527,49531,49543,49563,49571],{"__ignoreMap":31},[36,48198,48199,48201],{"class":38,"line":39},[36,48200,1943],{"class":46},[36,48202,32761],{"class":42},[36,48204,48205,48207,48209,48211],{"class":38,"line":54},[36,48206,1937],{"class":46},[36,48208,33103],{"class":42},[36,48210,1943],{"class":46},[36,48212,33108],{"class":42},[36,48214,48215,48217,48219,48221],{"class":38,"line":66},[36,48216,1937],{"class":46},[36,48218,33120],{"class":42},[36,48220,1943],{"class":46},[36,48222,33125],{"class":42},[36,48224,48225],{"class":38,"line":73},[36,48226,70],{"emptyLinePlaceholder":69},[36,48228,48229,48231,48233,48235,48237,48239,48241],{"class":38,"line":86},[36,48230,147],{"class":46},[36,48232,43842],{"class":79},[36,48234,92],{"class":42},[36,48236,33141],{"class":79},[36,48238,3113],{"class":42},[36,48240,33146],{"class":79},[36,48242,1147],{"class":42},[36,48244,48245,48247,48249],{"class":38,"line":126},[36,48246,158],{"class":46},[36,48248,515],{"class":62},[36,48250,43861],{"class":42},[36,48252,48253,48255,48257,48259,48261,48263],{"class":38,"line":131},[36,48254,1432],{"class":62},[36,48256,43868],{"class":42},[36,48258,481],{"class":62},[36,48260,33183],{"class":42},[36,48262,494],{"class":62},[36,48264,4369],{"class":42},[36,48266,48267,48269,48271,48273],{"class":38,"line":225},[36,48268,523],{"class":62},[36,48270,37122],{"class":42},[36,48272,47],{"class":46},[36,48274,37127],{"class":42},[36,48276,48277],{"class":38,"line":235},[36,48278,43891],{"class":2621},[36,48280,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305,48307],{"class":38,"line":377},[36,48282,523],{"class":62},[36,48284,43898],{"class":42},[36,48286,47],{"class":46},[36,48288,33208],{"class":42},[36,48290,33211],{"class":7598},[36,48292,47],{"class":46},[36,48294,43909],{"class":42},[36,48296,33220],{"class":7598},[36,48298,47],{"class":46},[36,48300,43916],{"class":42},[36,48302,33229],{"class":7598},[36,48304,47],{"class":46},[36,48306,1906],{"class":62},[36,48308,123],{"class":42},[36,48310,48311],{"class":38,"line":617},[36,48312,43929],{"class":2621},[36,48314,48315,48317,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345],{"class":38,"line":643},[36,48316,523],{"class":62},[36,48318,43936],{"class":42},[36,48320,47],{"class":46},[36,48322,33208],{"class":42},[36,48324,33211],{"class":7598},[36,48326,47],{"class":46},[36,48328,43909],{"class":42},[36,48330,33220],{"class":7598},[36,48332,47],{"class":46},[36,48334,43953],{"class":42},[36,48336,2751],{"class":62},[36,48338,43958],{"class":42},[36,48340,33229],{"class":7598},[36,48342,47],{"class":46},[36,48344,1906],{"class":62},[36,48346,123],{"class":42},[36,48348,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391],{"class":38,"line":921},[36,48350,523],{"class":62},[36,48352,43973],{"class":42},[36,48354,47],{"class":46},[36,48356,33208],{"class":42},[36,48358,33211],{"class":7598},[36,48360,47],{"class":46},[36,48362,43953],{"class":42},[36,48364,2751],{"class":62},[36,48366,43958],{"class":42},[36,48368,33220],{"class":7598},[36,48370,47],{"class":46},[36,48372,43953],{"class":42},[36,48374,1906],{"class":62},[36,48376,43958],{"class":42},[36,48378,33229],{"class":7598},[36,48380,47],{"class":46},[36,48382,2634],{"class":62},[36,48384,2934],{"class":42},[36,48386,33238],{"class":7598},[36,48388,47],{"class":46},[36,48390,1906],{"class":62},[36,48392,123],{"class":42},[36,48394,48395],{"class":38,"line":934},[36,48396,44018],{"class":2621},[36,48398,48399,48401,48403,48405,48407,48409,48411,48413,48415,48417,48419,48421,48423,48425,48427,48429],{"class":38,"line":939},[36,48400,523],{"class":62},[36,48402,44025],{"class":42},[36,48404,47],{"class":46},[36,48406,33208],{"class":42},[36,48408,33211],{"class":7598},[36,48410,47],{"class":46},[36,48412,43909],{"class":42},[36,48414,33220],{"class":7598},[36,48416,47],{"class":46},[36,48418,44042],{"class":42},[36,48420,2751],{"class":62},[36,48422,43958],{"class":42},[36,48424,33229],{"class":7598},[36,48426,47],{"class":46},[36,48428,1906],{"class":62},[36,48430,123],{"class":42},[36,48432,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453,48455,48457,48459,48461,48463,48465,48467,48469,48471,48473,48475],{"class":38,"line":949},[36,48434,523],{"class":62},[36,48436,44061],{"class":42},[36,48438,47],{"class":46},[36,48440,33208],{"class":42},[36,48442,33211],{"class":7598},[36,48444,47],{"class":46},[36,48446,44042],{"class":42},[36,48448,2751],{"class":62},[36,48450,43958],{"class":42},[36,48452,33220],{"class":7598},[36,48454,47],{"class":46},[36,48456,44042],{"class":42},[36,48458,1906],{"class":62},[36,48460,43958],{"class":42},[36,48462,33229],{"class":7598},[36,48464,47],{"class":46},[36,48466,2875],{"class":62},[36,48468,2934],{"class":42},[36,48470,33238],{"class":7598},[36,48472,47],{"class":46},[36,48474,1911],{"class":62},[36,48476,123],{"class":42},[36,48478,48479],{"class":38,"line":962},[36,48480,44106],{"class":2621},[36,48482,48483],{"class":38,"line":974},[36,48484,44111],{"class":2621},[36,48486,48487,48489,48491,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517],{"class":38,"line":979},[36,48488,523],{"class":62},[36,48490,44118],{"class":42},[36,48492,47],{"class":46},[36,48494,37180],{"class":42},[36,48496,33229],{"class":7598},[36,48498,47],{"class":46},[36,48500,2634],{"class":62},[36,48502,2934],{"class":42},[36,48504,33284],{"class":7598},[36,48506,47],{"class":46},[36,48508,1906],{"class":62},[36,48510,2934],{"class":42},[36,48512,33238],{"class":7598},[36,48514,47],{"class":46},[36,48516,1906],{"class":62},[36,48518,123],{"class":42},[36,48520,48521,48523,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545,48547],{"class":38,"line":994},[36,48522,523],{"class":62},[36,48524,44153],{"class":42},[36,48526,47],{"class":46},[36,48528,33208],{"class":42},[36,48530,33211],{"class":7598},[36,48532,47],{"class":46},[36,48534,43909],{"class":42},[36,48536,33220],{"class":7598},[36,48538,47],{"class":46},[36,48540,44170],{"class":42},[36,48542,33229],{"class":7598},[36,48544,47],{"class":46},[36,48546,1906],{"class":62},[36,48548,123],{"class":42},[36,48550,48551],{"class":38,"line":1006},[36,48552,70],{"emptyLinePlaceholder":69},[36,48554,48555,48557,48559],{"class":38,"line":1011},[36,48556,158],{"class":46},[36,48558,33448],{"class":79},[36,48560,33451],{"class":42},[36,48562,48563,48565,48567,48569,48571,48573],{"class":38,"line":1023},[36,48564,44195],{"class":42},[36,48566,47],{"class":46},[36,48568,481],{"class":62},[36,48570,37535],{"class":42},[36,48572,481],{"class":62},[36,48574,44206],{"class":42},[36,48576,48577,48579,48581,48583,48585,48587,48589,48591,48593,48595],{"class":38,"line":1028},[36,48578,9466],{"class":42},[36,48580,47],{"class":46},[36,48582,481],{"class":62},[36,48584,37535],{"class":42},[36,48586,481],{"class":62},[36,48588,44221],{"class":42},[36,48590,481],{"class":62},[36,48592,37535],{"class":42},[36,48594,481],{"class":62},[36,48596,44230],{"class":42},[36,48598,48599,48601,48603,48605,48607,48609,48611,48613,48615,48617],{"class":38,"line":1033},[36,48600,44235],{"class":42},[36,48602,47],{"class":46},[36,48604,481],{"class":62},[36,48606,37535],{"class":42},[36,48608,481],{"class":62},[36,48610,44246],{"class":42},[36,48612,481],{"class":62},[36,48614,37535],{"class":42},[36,48616,481],{"class":62},[36,48618,44255],{"class":42},[36,48620,48621,48623,48625,48627,48629,48631,48633,48635],{"class":38,"line":1053},[36,48622,44260],{"class":42},[36,48624,47],{"class":46},[36,48626,481],{"class":62},[36,48628,37535],{"class":42},[36,48630,481],{"class":62},[36,48632,44271],{"class":42},[36,48634,481],{"class":62},[36,48636,44276],{"class":42},[36,48638,48639],{"class":38,"line":1064},[36,48640,44281],{"class":2621},[36,48642,48643,48645,48647,48649,48651,48653],{"class":38,"line":1075},[36,48644,736],{"class":46},[36,48646,44288],{"class":42},[36,48648,35037],{"class":7598},[36,48650,47],{"class":46},[36,48652,1906],{"class":62},[36,48654,123],{"class":42},[36,48656,48657],{"class":38,"line":2291},[36,48658,70],{"emptyLinePlaceholder":69},[36,48660,48661],{"class":38,"line":2329},[36,48662,44309],{"class":2621},[36,48664,48665,48667,48669,48671,48673,48675,48677],{"class":38,"line":2334},[36,48666,147],{"class":46},[36,48668,44316],{"class":79},[36,48670,92],{"class":42},[36,48672,33141],{"class":79},[36,48674,3113],{"class":42},[36,48676,33146],{"class":79},[36,48678,1147],{"class":42},[36,48680,48681],{"class":38,"line":2339},[36,48682,44331],{"class":2621},[36,48684,48685,48687,48689],{"class":38,"line":2365},[36,48686,158],{"class":46},[36,48688,515],{"class":62},[36,48690,44340],{"class":42},[36,48692,48693,48695,48697,48699,48701,48703],{"class":38,"line":2373},[36,48694,1432],{"class":62},[36,48696,44347],{"class":42},[36,48698,481],{"class":62},[36,48700,33183],{"class":42},[36,48702,494],{"class":62},[36,48704,4369],{"class":42},[36,48706,48707,48709,48711,48713],{"class":38,"line":5001},[36,48708,523],{"class":62},[36,48710,44362],{"class":42},[36,48712,47],{"class":46},[36,48714,40360],{"class":42},[36,48716,48717,48719,48721,48723,48725,48727,48729,48731,48733,48735,48737,48739,48741,48743,48745,48747,48749,48751,48753,48755,48757],{"class":38,"line":5006},[36,48718,40365],{"class":42},[36,48720,33211],{"class":7598},[36,48722,47],{"class":46},[36,48724,2634],{"class":62},[36,48726,2934],{"class":42},[36,48728,33220],{"class":7598},[36,48730,47],{"class":46},[36,48732,2763],{"class":62},[36,48734,2934],{"class":42},[36,48736,33229],{"class":7598},[36,48738,47],{"class":46},[36,48740,2925],{"class":62},[36,48742,2934],{"class":42},[36,48744,33284],{"class":7598},[36,48746,47],{"class":46},[36,48748,1911],{"class":62},[36,48750,2934],{"class":42},[36,48752,33238],{"class":7598},[36,48754,47],{"class":46},[36,48756,2634],{"class":62},[36,48758,40398],{"class":42},[36,48760,48761],{"class":38,"line":10328},[36,48762,40403],{"class":42},[36,48764,48765,48767,48769,48771,48773,48775,48777,48779,48781,48783,48785,48787,48789],{"class":38,"line":10352},[36,48766,40448],{"class":42},[36,48768,33229],{"class":7598},[36,48770,47],{"class":46},[36,48772,2634],{"class":62},[36,48774,2934],{"class":42},[36,48776,33284],{"class":7598},[36,48778,47],{"class":46},[36,48780,1911],{"class":62},[36,48782,2934],{"class":42},[36,48784,33238],{"class":7598},[36,48786,47],{"class":46},[36,48788,1906],{"class":62},[36,48790,123],{"class":42},[36,48792,48793],{"class":38,"line":10357},[36,48794,2276],{"class":42},[36,48796,48797,48799,48801,48803],{"class":38,"line":10363},[36,48798,523],{"class":62},[36,48800,44453],{"class":42},[36,48802,47],{"class":46},[36,48804,40360],{"class":42},[36,48806,48807,48809,48811,48813,48815,48817,48819,48821,48823,48825,48827,48829,48831],{"class":38,"line":10390},[36,48808,40365],{"class":42},[36,48810,33211],{"class":7598},[36,48812,47],{"class":46},[36,48814,2763],{"class":62},[36,48816,2934],{"class":42},[36,48818,33220],{"class":7598},[36,48820,47],{"class":46},[36,48822,2763],{"class":62},[36,48824,2934],{"class":42},[36,48826,33229],{"class":7598},[36,48828,47],{"class":46},[36,48830,1906],{"class":62},[36,48832,40398],{"class":42},[36,48834,48835],{"class":38,"line":10395},[36,48836,40403],{"class":42},[36,48838,48839,48841,48843,48845,48847,48849,48851,48853,48855,48857,48859,48861,48863,48865,48867,48869,48871],{"class":38,"line":10401},[36,48840,40365],{"class":42},[36,48842,33211],{"class":7598},[36,48844,47],{"class":46},[36,48846,2763],{"class":62},[36,48848,2934],{"class":42},[36,48850,33220],{"class":7598},[36,48852,47],{"class":46},[36,48854,44508],{"class":62},[36,48856,2934],{"class":42},[36,48858,33229],{"class":7598},[36,48860,47],{"class":46},[36,48862,2634],{"class":62},[36,48864,2934],{"class":42},[36,48866,33238],{"class":7598},[36,48868,47],{"class":46},[36,48870,1906],{"class":62},[36,48872,40398],{"class":42},[36,48874,48875],{"class":38,"line":10413},[36,48876,40403],{"class":42},[36,48878,48879,48881,48883,48885,48887,48889,48891,48893,48895,48897,48899,48901,48903],{"class":38,"line":10425},[36,48880,40448],{"class":42},[36,48882,33229],{"class":7598},[36,48884,47],{"class":46},[36,48886,2634],{"class":62},[36,48888,2934],{"class":42},[36,48890,33284],{"class":7598},[36,48892,47],{"class":46},[36,48894,1911],{"class":62},[36,48896,2934],{"class":42},[36,48898,33238],{"class":7598},[36,48900,47],{"class":46},[36,48902,1906],{"class":62},[36,48904,123],{"class":42},[36,48906,48907],{"class":38,"line":10437},[36,48908,2276],{"class":42},[36,48910,48911,48913,48915,48917],{"class":38,"line":12095},[36,48912,523],{"class":62},[36,48914,44569],{"class":42},[36,48916,47],{"class":46},[36,48918,40360],{"class":42},[36,48920,48921,48923,48925,48927,48929,48931,48933,48935,48937,48939,48941,48943,48945,48947,48949],{"class":38,"line":12120},[36,48922,44578],{"class":42},[36,48924,44508],{"class":62},[36,48926,2934],{"class":42},[36,48928,2763],{"class":62},[36,48930,44587],{"class":42},[36,48932,2769],{"class":62},[36,48934,2934],{"class":42},[36,48936,34423],{"class":62},[36,48938,44596],{"class":42},[36,48940,3156],{"class":62},[36,48942,2934],{"class":42},[36,48944,2757],{"class":62},[36,48946,44605],{"class":42},[36,48948,2757],{"class":62},[36,48950,40398],{"class":42},[36,48952,48953,48955,48957,48959,48961,48963,48965,48967,48969,48971,48973,48975,48977,48979,48981],{"class":38,"line":12143},[36,48954,44578],{"class":42},[36,48956,37221],{"class":62},[36,48958,2934],{"class":42},[36,48960,34423],{"class":62},[36,48962,44587],{"class":42},[36,48964,34423],{"class":62},[36,48966,2934],{"class":42},[36,48968,44508],{"class":62},[36,48970,44596],{"class":42},[36,48972,2757],{"class":62},[36,48974,2934],{"class":42},[36,48976,2769],{"class":62},[36,48978,44605],{"class":42},[36,48980,2763],{"class":62},[36,48982,40398],{"class":42},[36,48984,48985,48987,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009],{"class":38,"line":12167},[36,48986,40448],{"class":42},[36,48988,33229],{"class":7598},[36,48990,47],{"class":46},[36,48992,2634],{"class":62},[36,48994,2934],{"class":42},[36,48996,33284],{"class":7598},[36,48998,47],{"class":46},[36,49000,1911],{"class":62},[36,49002,2934],{"class":42},[36,49004,33238],{"class":7598},[36,49006,47],{"class":46},[36,49008,1906],{"class":62},[36,49010,123],{"class":42},[36,49012,49013],{"class":38,"line":12172},[36,49014,2276],{"class":42},[36,49016,49017,49019,49021,49023],{"class":38,"line":12177},[36,49018,523],{"class":62},[36,49020,44680],{"class":42},[36,49022,47],{"class":46},[36,49024,40360],{"class":42},[36,49026,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055],{"class":38,"line":12182},[36,49028,44578],{"class":42},[36,49030,44691],{"class":62},[36,49032,2934],{"class":42},[36,49034,44508],{"class":62},[36,49036,44587],{"class":42},[36,49038,2769],{"class":62},[36,49040,2934],{"class":42},[36,49042,44704],{"class":62},[36,49044,44596],{"class":42},[36,49046,3156],{"class":62},[36,49048,2934],{"class":42},[36,49050,3162],{"class":62},[36,49052,44605],{"class":42},[36,49054,2763],{"class":62},[36,49056,40398],{"class":42},[36,49058,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087],{"class":38,"line":12191},[36,49060,44578],{"class":42},[36,49062,40807],{"class":62},[36,49064,2934],{"class":42},[36,49066,23418],{"class":62},[36,49068,44587],{"class":42},[36,49070,3173],{"class":62},[36,49072,2934],{"class":42},[36,49074,33855],{"class":62},[36,49076,44596],{"class":42},[36,49078,3354],{"class":62},[36,49080,2934],{"class":42},[36,49082,2763],{"class":62},[36,49084,44605],{"class":42},[36,49086,2763],{"class":62},[36,49088,40398],{"class":42},[36,49090,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119],{"class":38,"line":12196},[36,49092,44578],{"class":42},[36,49094,40807],{"class":62},[36,49096,2934],{"class":42},[36,49098,34423],{"class":62},[36,49100,44587],{"class":42},[36,49102,34423],{"class":62},[36,49104,2934],{"class":42},[36,49106,37221],{"class":62},[36,49108,44596],{"class":42},[36,49110,3354],{"class":62},[36,49112,2934],{"class":42},[36,49114,2763],{"class":62},[36,49116,44605],{"class":42},[36,49118,2763],{"class":62},[36,49120,40398],{"class":42},[36,49122,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151],{"class":38,"line":12202},[36,49124,44578],{"class":42},[36,49126,40807],{"class":62},[36,49128,2934],{"class":42},[36,49130,3173],{"class":62},[36,49132,44587],{"class":42},[36,49134,34423],{"class":62},[36,49136,2934],{"class":42},[36,49138,44801],{"class":62},[36,49140,44596],{"class":42},[36,49142,2757],{"class":62},[36,49144,2934],{"class":42},[36,49146,2763],{"class":62},[36,49148,44605],{"class":42},[36,49150,2763],{"class":62},[36,49152,40398],{"class":42},[36,49154,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183],{"class":38,"line":12223},[36,49156,44578],{"class":42},[36,49158,44822],{"class":62},[36,49160,2934],{"class":42},[36,49162,37221],{"class":62},[36,49164,44587],{"class":42},[36,49166,23418],{"class":62},[36,49168,2934],{"class":42},[36,49170,44835],{"class":62},[36,49172,44596],{"class":42},[36,49174,2757],{"class":62},[36,49176,2934],{"class":42},[36,49178,34423],{"class":62},[36,49180,44605],{"class":42},[36,49182,34423],{"class":62},[36,49184,40398],{"class":42},[36,49186,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211],{"class":38,"line":12229},[36,49188,40448],{"class":42},[36,49190,33229],{"class":7598},[36,49192,47],{"class":46},[36,49194,2634],{"class":62},[36,49196,2934],{"class":42},[36,49198,33284],{"class":7598},[36,49200,47],{"class":46},[36,49202,1911],{"class":62},[36,49204,2934],{"class":42},[36,49206,33238],{"class":7598},[36,49208,47],{"class":46},[36,49210,1906],{"class":62},[36,49212,123],{"class":42},[36,49214,49215],{"class":38,"line":12243},[36,49216,2276],{"class":42},[36,49218,49219,49221,49223,49225],{"class":38,"line":12249},[36,49220,523],{"class":62},[36,49222,44888],{"class":42},[36,49224,47],{"class":46},[36,49226,40360],{"class":42},[36,49228,49229,49231,49233,49235,49237,49239,49241,49243,49245,49247,49249,49251,49253,49255,49257],{"class":38,"line":12276},[36,49230,44578],{"class":42},[36,49232,44899],{"class":62},[36,49234,2934],{"class":42},[36,49236,37221],{"class":62},[36,49238,44587],{"class":42},[36,49240,23418],{"class":62},[36,49242,2934],{"class":42},[36,49244,44835],{"class":62},[36,49246,44596],{"class":42},[36,49248,2757],{"class":62},[36,49250,2934],{"class":42},[36,49252,34423],{"class":62},[36,49254,44605],{"class":42},[36,49256,34423],{"class":62},[36,49258,40398],{"class":42},[36,49260,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289],{"class":38,"line":12285},[36,49262,44578],{"class":42},[36,49264,44899],{"class":62},[36,49266,2934],{"class":42},[36,49268,37291],{"class":62},[36,49270,44587],{"class":42},[36,49272,44508],{"class":62},[36,49274,2934],{"class":42},[36,49276,37291],{"class":62},[36,49278,44596],{"class":42},[36,49280,3162],{"class":62},[36,49282,2934],{"class":42},[36,49284,34423],{"class":62},[36,49286,44605],{"class":42},[36,49288,34423],{"class":62},[36,49290,40398],{"class":42},[36,49292,49293,49295,49297,49299,49301],{"class":38,"line":12291},[36,49294,44962],{"class":42},[36,49296,1906],{"class":62},[36,49298,2934],{"class":42},[36,49300,1906],{"class":62},[36,49302,44971],{"class":42},[36,49304,49305],{"class":38,"line":12299},[36,49306,41140],{"class":42},[36,49308,49309,49311,49313,49315,49317],{"class":38,"line":12304},[36,49310,41145],{"class":42},[36,49312,44982],{"class":62},[36,49314,2934],{"class":42},[36,49316,1911],{"class":62},[36,49318,123],{"class":42},[36,49320,49321],{"class":38,"line":18977},[36,49322,2276],{"class":42},[36,49324,49325],{"class":38,"line":18983},[36,49326,44997],{"class":2621},[36,49328,49329,49331,49333,49335,49337],{"class":38,"line":19006},[36,49330,5788],{"class":46},[36,49332,41218],{"class":42},[36,49334,28413],{"class":46},[36,49336,868],{"class":62},[36,49338,41225],{"class":42},[36,49340,49341,49343,49345],{"class":38,"line":19012},[36,49342,7025],{"class":46},[36,49344,41237],{"class":62},[36,49346,41240],{"class":42},[36,49348,49349,49351,49353,49355,49357,49359,49361,49363,49365],{"class":38,"line":19035},[36,49350,41250],{"class":42},[36,49352,45024],{"class":7598},[36,49354,47],{"class":46},[36,49356,45029],{"class":50},[36,49358,2934],{"class":42},[36,49360,41253],{"class":7598},[36,49362,47],{"class":46},[36,49364,41258],{"class":50},[36,49366,123],{"class":42},[36,49368,49369],{"class":38,"line":19049},[36,49370,45044],{"class":2621},[36,49372,49373],{"class":38,"line":19069},[36,49374,45049],{"class":2621},[36,49376,49377],{"class":38,"line":19075},[36,49378,45054],{"class":2621},[36,49380,49381],{"class":38,"line":19086},[36,49382,45059],{"class":2621},[36,49384,49385],{"class":38,"line":19109},[36,49386,45064],{"class":2621},[36,49388,49389],{"class":38,"line":19131},[36,49390,45069],{"class":2621},[36,49392,49393,49395,49397,49399,49401,49403],{"class":38,"line":19136},[36,49394,41270],{"class":46},[36,49396,41273],{"class":42},[36,49398,41276],{"class":46},[36,49400,41279],{"class":46},[36,49402,41282],{"class":62},[36,49404,153],{"class":42},[36,49406,49407,49409,49411],{"class":38,"line":19142},[36,49408,41294],{"class":42},[36,49410,2751],{"class":62},[36,49412,123],{"class":42},[36,49414,49415,49417,49419],{"class":38,"line":19156},[36,49416,45096],{"class":46},[36,49418,41237],{"class":62},[36,49420,41313],{"class":42},[36,49422,49423,49425,49427,49429,49431],{"class":38,"line":19169},[36,49424,45105],{"class":42},[36,49426,2751],{"class":62},[36,49428,2934],{"class":42},[36,49430,41335],{"class":62},[36,49432,123],{"class":42},[36,49434,49435,49437,49439,49441,49443,49445],{"class":38,"line":19174},[36,49436,45118],{"class":46},[36,49438,41273],{"class":42},[36,49440,41276],{"class":46},[36,49442,41279],{"class":46},[36,49444,41282],{"class":62},[36,49446,153],{"class":42},[36,49448,49449,49451,49453],{"class":38,"line":19188},[36,49450,45133],{"class":42},[36,49452,2751],{"class":62},[36,49454,123],{"class":42},[36,49456,49457],{"class":38,"line":19193},[36,49458,37516],{"class":2621},[36,49460,49461,49463,49465],{"class":38,"line":19199},[36,49462,158],{"class":46},[36,49464,33448],{"class":79},[36,49466,33451],{"class":42},[36,49468,49469,49471,49473,49475],{"class":38,"line":19204},[36,49470,33456],{"class":42},[36,49472,47],{"class":46},[36,49474,481],{"class":62},[36,49476,45160],{"class":42},[36,49478,49479,49481,49483,49485],{"class":38,"line":19218},[36,49480,33456],{"class":42},[36,49482,47],{"class":46},[36,49484,481],{"class":62},[36,49486,45171],{"class":42},[36,49488,49489,49491,49493,49495],{"class":38,"line":19223},[36,49490,33456],{"class":42},[36,49492,47],{"class":46},[36,49494,481],{"class":62},[36,49496,45182],{"class":42},[36,49498,49499,49501,49503,49505],{"class":38,"line":19228},[36,49500,33456],{"class":42},[36,49502,47],{"class":46},[36,49504,481],{"class":62},[36,49506,45193],{"class":42},[36,49508,49509,49511,49513,49515],{"class":38,"line":19242},[36,49510,33456],{"class":42},[36,49512,47],{"class":46},[36,49514,481],{"class":62},[36,49516,45204],{"class":42},[36,49518,49519,49521],{"class":38,"line":19254},[36,49520,736],{"class":46},[36,49522,33564],{"class":42},[36,49524,49525],{"class":38,"line":19259},[36,49526,70],{"emptyLinePlaceholder":69},[36,49528,49529],{"class":38,"line":19272},[36,49530,45219],{"class":2621},[36,49532,49533,49535,49537,49539,49541],{"class":38,"line":19277},[36,49534,3948],{"class":46},[36,49536,33575],{"class":62},[36,49538,5334],{"class":46},[36,49540,33580],{"class":50},[36,49542,153],{"class":42},[36,49544,49545,49547,49549,49551,49553,49555,49557,49559,49561],{"class":38,"line":19282},[36,49546,33592],{"class":42},[36,49548,47],{"class":46},[36,49550,32816],{"class":42},[36,49552,33599],{"class":50},[36,49554,4108],{"class":46},[36,49556,33604],{"class":42},[36,49558,4105],{"class":46},[36,49560,32841],{"class":50},[36,49562,123],{"class":42},[36,49564,49565,49567,49569],{"class":38,"line":19287},[36,49566,33644],{"class":42},[36,49568,47],{"class":46},[36,49570,45260],{"class":42},[36,49572,49573,49575,49577,49579,49581,49583,49585,49587],{"class":38,"line":19300},[36,49574,89],{"class":62},[36,49576,33656],{"class":42},[36,49578,1906],{"class":62},[36,49580,2934],{"class":42},[36,49582,33855],{"class":62},[36,49584,2934],{"class":42},[36,49586,33855],{"class":62},[36,49588,33669],{"class":42},[24368,49590,49592],{"id":49591},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49594,49595],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,49597,49599],{"className":28,"code":49598,"language":30,"meta":31,"style":31},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[33,49600,49601,49606,49619,49624,49630,49635,49645,49649,49654,49664,49668,49673,49683,49700,49704,49709,49721,49733,49764,49773,49783,49793,49797,49802,49817,49821,49826,49831,49836,49846,49851,49876,49880,49885,49900,49904,49917,49921,49926,49931,49936,49941,49946,49956,49966,49989,49997,50005,50013,50017,50029,50033,50038,50042,50046,50053,50073,50097,50104,50118,50123,50128,50132,50146,50150,50162],{"__ignoreMap":31},[36,49602,49603],{"class":38,"line":39},[36,49604,49605],{"class":2621},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,49607,49608,49610,49613,49616],{"class":38,"line":54},[36,49609,1937],{"class":46},[36,49611,49612],{"class":62}," PIL",[36,49614,49615],{"class":46}," import",[36,49617,49618],{"class":42}," Image\n",[36,49620,49621],{"class":38,"line":66},[36,49622,49623],{"class":2621},"# os 用来处理文件夹和文件路径\n",[36,49625,49626,49628],{"class":38,"line":73},[36,49627,1943],{"class":46},[36,49629,47654],{"class":42},[36,49631,49632],{"class":38,"line":86},[36,49633,49634],{"class":2621},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,49636,49637,49639,49641,49643],{"class":38,"line":126},[36,49638,1943],{"class":46},[36,49640,33734],{"class":42},[36,49642,33737],{"class":46},[36,49644,33740],{"class":42},[36,49646,49647],{"class":38,"line":131},[36,49648,70],{"emptyLinePlaceholder":69},[36,49650,49651],{"class":38,"line":225},[36,49652,49653],{"class":2621},"# 文件夹路径，包含所有图片文件\n",[36,49655,49656,49659,49661],{"class":38,"line":235},[36,49657,49658],{"class":42},"folder_path ",[36,49660,47],{"class":46},[36,49662,49663],{"class":50}," 'data_cat_dog'\n",[36,49665,49666],{"class":38,"line":377},[36,49667,70],{"emptyLinePlaceholder":69},[36,49669,49670],{"class":38,"line":617},[36,49671,49672],{"class":2621},"# 初始化累积变量\n",[36,49674,49675,49678,49680],{"class":38,"line":643},[36,49676,49677],{"class":42},"total_pixels ",[36,49679,47],{"class":46},[36,49681,49682],{"class":62}," 0\n",[36,49684,49685,49688,49690,49693,49695,49697],{"class":38,"line":921},[36,49686,49687],{"class":42},"sum_normalized_pixel_values ",[36,49689,47],{"class":46},[36,49691,49692],{"class":42}," np.zeros(",[36,49694,2634],{"class":62},[36,49696,48157],{"class":42},[36,49698,49699],{"class":2621},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,49701,49702],{"class":38,"line":934},[36,49703,70],{"emptyLinePlaceholder":69},[36,49705,49706],{"class":38,"line":939},[36,49707,49708],{"class":2621},"# 遍历文件夹中的图片文件\n",[36,49710,49711,49713,49716,49718],{"class":38,"line":949},[36,49712,5410],{"class":46},[36,49714,49715],{"class":42}," root, dirs, files ",[36,49717,28413],{"class":46},[36,49719,49720],{"class":42}," os.walk(folder_path):\n",[36,49722,49723,49725,49728,49730],{"class":38,"line":962},[36,49724,5586],{"class":46},[36,49726,49727],{"class":42}," filename ",[36,49729,28413],{"class":46},[36,49731,49732],{"class":42}," files:\n",[36,49734,49735,49737,49740,49743,49745,49748,49750,49753,49755,49758,49761],{"class":38,"line":974},[36,49736,890],{"class":46},[36,49738,49739],{"class":42}," filename.endswith((",[36,49741,49742],{"class":50},"'.jpg'",[36,49744,630],{"class":42},[36,49746,49747],{"class":50},"'.jpeg'",[36,49749,630],{"class":42},[36,49751,49752],{"class":50},"'.png'",[36,49754,630],{"class":42},[36,49756,49757],{"class":50},"'.bmp'",[36,49759,49760],{"class":42},")):  ",[36,49762,49763],{"class":2621},"# 可根据实际情况添加其他格式\n",[36,49765,49766,49768,49770],{"class":38,"line":979},[36,49767,48022],{"class":42},[36,49769,47],{"class":46},[36,49771,49772],{"class":42}," os.path.join(root, filename)\n",[36,49774,49775,49778,49780],{"class":38,"line":994},[36,49776,49777],{"class":42},"            image ",[36,49779,47],{"class":46},[36,49781,49782],{"class":42}," Image.open(image_path)\n",[36,49784,49785,49788,49790],{"class":38,"line":1006},[36,49786,49787],{"class":42},"            image_array ",[36,49789,47],{"class":46},[36,49791,49792],{"class":42}," np.array(image)\n",[36,49794,49795],{"class":38,"line":1011},[36,49796,70],{"emptyLinePlaceholder":69},[36,49798,49799],{"class":38,"line":1023},[36,49800,49801],{"class":2621},"            # 归一化像素值到0-1之间\n",[36,49803,49804,49807,49809,49812,49814],{"class":38,"line":1028},[36,49805,49806],{"class":42},"            normalized_image_array ",[36,49808,47],{"class":46},[36,49810,49811],{"class":42}," image_array ",[36,49813,3139],{"class":46},[36,49815,49816],{"class":62}," 255.0\n",[36,49818,49819],{"class":38,"line":1033},[36,49820,70],{"emptyLinePlaceholder":69},[36,49822,49823],{"class":38,"line":1053},[36,49824,49825],{"class":2621},"            # print(image_path)\n",[36,49827,49828],{"class":38,"line":1064},[36,49829,49830],{"class":2621},"            # print(normalized_image_array.shape)\n",[36,49832,49833],{"class":38,"line":1075},[36,49834,49835],{"class":2621},"            # 累积归一化后的像素值和像素数量\n",[36,49837,49838,49841,49843],{"class":38,"line":2291},[36,49839,49840],{"class":42},"            total_pixels ",[36,49842,928],{"class":46},[36,49844,49845],{"class":42}," normalized_image_array.size\n",[36,49847,49848],{"class":38,"line":2329},[36,49849,49850],{"class":2621},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,49852,49853,49856,49858,49861,49864,49866,49868,49870,49872,49874],{"class":38,"line":2334},[36,49854,49855],{"class":42},"            sum_normalized_pixel_values ",[36,49857,928],{"class":46},[36,49859,49860],{"class":42}," np.sum(normalized_image_array, ",[36,49862,49863],{"class":7598},"axis",[36,49865,47],{"class":46},[36,49867,92],{"class":42},[36,49869,2751],{"class":62},[36,49871,630],{"class":42},[36,49873,1906],{"class":62},[36,49875,1914],{"class":42},[36,49877,49878],{"class":38,"line":2339},[36,49879,70],{"emptyLinePlaceholder":69},[36,49881,49882],{"class":38,"line":2365},[36,49883,49884],{"class":2621},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,49886,49887,49890,49892,49895,49897],{"class":38,"line":2373},[36,49888,49889],{"class":42},"mean ",[36,49891,47],{"class":46},[36,49893,49894],{"class":42}," sum_normalized_pixel_values ",[36,49896,3139],{"class":46},[36,49898,49899],{"class":42}," total_pixels\n",[36,49901,49902],{"class":38,"line":5001},[36,49903,70],{"emptyLinePlaceholder":69},[36,49905,49906,49909,49911,49913,49915],{"class":38,"line":5006},[36,49907,49908],{"class":42},"sum_squared_diff ",[36,49910,47],{"class":46},[36,49912,49692],{"class":42},[36,49914,2634],{"class":62},[36,49916,123],{"class":42},[36,49918,49919],{"class":38,"line":10328},[36,49920,70],{"emptyLinePlaceholder":69},[36,49922,49923],{"class":38,"line":10352},[36,49924,49925],{"class":2621},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,49927,49928],{"class":38,"line":10357},[36,49929,49930],{"class":2621},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,49932,49933],{"class":38,"line":10363},[36,49934,49935],{"class":2621},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,49937,49938],{"class":38,"line":10390},[36,49939,49940],{"class":2621},"# Image.open(image_path)：打开图片\n",[36,49942,49943],{"class":38,"line":10395},[36,49944,49945],{"class":2621},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,49947,49948,49950,49952,49954],{"class":38,"line":10401},[36,49949,5410],{"class":46},[36,49951,49715],{"class":42},[36,49953,28413],{"class":46},[36,49955,49720],{"class":42},[36,49957,49958,49960,49962,49964],{"class":38,"line":10413},[36,49959,5586],{"class":46},[36,49961,49727],{"class":42},[36,49963,28413],{"class":46},[36,49965,49732],{"class":42},[36,49967,49968,49970,49972,49974,49976,49978,49980,49982,49984,49986],{"class":38,"line":10425},[36,49969,890],{"class":46},[36,49971,49739],{"class":42},[36,49973,49742],{"class":50},[36,49975,630],{"class":42},[36,49977,49747],{"class":50},[36,49979,630],{"class":42},[36,49981,49752],{"class":50},[36,49983,630],{"class":42},[36,49985,49757],{"class":50},[36,49987,49988],{"class":42},")):\n",[36,49990,49991,49993,49995],{"class":38,"line":10437},[36,49992,48022],{"class":42},[36,49994,47],{"class":46},[36,49996,49772],{"class":42},[36,49998,49999,50001,50003],{"class":38,"line":12095},[36,50000,49777],{"class":42},[36,50002,47],{"class":46},[36,50004,49782],{"class":42},[36,50006,50007,50009,50011],{"class":38,"line":12120},[36,50008,49787],{"class":42},[36,50010,47],{"class":46},[36,50012,49792],{"class":42},[36,50014,50015],{"class":38,"line":12143},[36,50016,49801],{"class":2621},[36,50018,50019,50021,50023,50025,50027],{"class":38,"line":12167},[36,50020,49806],{"class":42},[36,50022,47],{"class":46},[36,50024,49811],{"class":42},[36,50026,3139],{"class":46},[36,50028,49816],{"class":62},[36,50030,50031],{"class":38,"line":12172},[36,50032,49830],{"class":2621},[36,50034,50035],{"class":38,"line":12177},[36,50036,50037],{"class":2621},"            # print(mean.shape)\n",[36,50039,50040],{"class":38,"line":12182},[36,50041,49825],{"class":2621},[36,50043,50044],{"class":38,"line":12191},[36,50045,70],{"emptyLinePlaceholder":69},[36,50047,50048,50051],{"class":38,"line":12196},[36,50049,50050],{"class":46},"            try",[36,50052,153],{"class":42},[36,50054,50055,50058,50060,50063,50065,50068,50070],{"class":38,"line":12202},[36,50056,50057],{"class":42},"                diff ",[36,50059,47],{"class":46},[36,50061,50062],{"class":42}," (normalized_image_array ",[36,50064,3087],{"class":46},[36,50066,50067],{"class":42}," mean) ",[36,50069,13040],{"class":46},[36,50071,50072],{"class":62}," 2\n",[36,50074,50075,50078,50080,50083,50085,50087,50089,50091,50093,50095],{"class":38,"line":12223},[36,50076,50077],{"class":42},"                sum_squared_diff ",[36,50079,928],{"class":46},[36,50081,50082],{"class":42}," np.sum(diff, ",[36,50084,49863],{"class":7598},[36,50086,47],{"class":46},[36,50088,92],{"class":42},[36,50090,2751],{"class":62},[36,50092,630],{"class":42},[36,50094,1906],{"class":62},[36,50096,1914],{"class":42},[36,50098,50099,50102],{"class":38,"line":12229},[36,50100,50101],{"class":46},"            except",[36,50103,153],{"class":42},[36,50105,50106,50109,50111,50113,50116],{"class":38,"line":12243},[36,50107,50108],{"class":62},"                print",[36,50110,92],{"class":42},[36,50112,95],{"class":46},[36,50114,50115],{"class":50},"\"捕获到自定义异常\"",[36,50117,123],{"class":42},[36,50119,50120],{"class":38,"line":12249},[36,50121,50122],{"class":2621},"            # diff = (normalized_image_array - mean) ** 2\n",[36,50124,50125],{"class":38,"line":12276},[36,50126,50127],{"class":2621},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,50129,50130],{"class":38,"line":12285},[36,50131,70],{"emptyLinePlaceholder":69},[36,50133,50134,50137,50139,50142,50144],{"class":38,"line":12291},[36,50135,50136],{"class":42},"variance ",[36,50138,47],{"class":46},[36,50140,50141],{"class":42}," sum_squared_diff ",[36,50143,3139],{"class":46},[36,50145,49899],{"class":42},[36,50147,50148],{"class":38,"line":12299},[36,50149,70],{"emptyLinePlaceholder":69},[36,50151,50152,50154,50156,50159],{"class":38,"line":12304},[36,50153,371],{"class":62},[36,50155,92],{"class":42},[36,50157,50158],{"class":50},"\"Mean:\"",[36,50160,50161],{"class":42},", mean)\n",[36,50163,50164,50166,50168,50171],{"class":38,"line":18977},[36,50165,371],{"class":62},[36,50167,92],{"class":42},[36,50169,50170],{"class":50},"\"Variance:\"",[36,50172,50173],{"class":42},", variance)\n",[26,50175,50177],{"className":28,"code":50176,"language":30,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[33,50178,50179,50185,50191,50201,50207,50217,50231,50241,50251,50261,50265,50275,50285,50289,50293,50301,50306,50311,50330,50334,50339,50344,50349,50354,50395,50400,50410,50415,50428,50433,50438,50443,50448,50453,50457,50462,50467,50489,50493,50525,50539,50549,50559,50563,50573,50587,50597,50607,50617,50623,50627,50631,50635,50639,50643,50651,50671,50675,50679,50683,50687,50703,50707,50711,50719,50723,50727,50735,50739,50743,50747,50755,50759,50763,50767,50775,50779,50787,50791,50799,50803,50811,50815,50823,50827,50831,50839,50843,50847,50859,50883,50897,50901,50905,50909,50917,50921,50929,50933,50941,50945,50953,50957,50965,50969,50977,50981,50993,50997,51005,51009,51017,51021,51025,51029,51033,51041,51045,51061,51065,51073,51077,51081,51085,51089,51093,51097,51101,51117,51121,51133,51137,51149,51153,51165,51169,51177,51181,51189,51193,51197,51201,51207,51211,51219,51223,51239,51243,51251,51255,51271,51283,51287,51299,51303,51307,51315,51319,51323,51331,51335,51343,51347,51355,51359,51363,51405,51447,51451,51455,51471,51475,51491,51495,51499,51507,51511,51515,51527,51565,51569,51573,51581,51585,51599,51609,51615,51621,51627,51633,51637,51641,51647,51651,51655,51663,51667,51685,51689,51693,51697,51713,51717,51721,51725,51729,51733,51753,51773,51777,51781,51785,51793,51801,51805,51821,51841,51861,51865,51870,51879,51888,51893,51898,51903,51916,51921,51930,51939,51956],{"__ignoreMap":31},[36,50180,50181,50183],{"class":38,"line":39},[36,50182,1943],{"class":46},[36,50184,34176],{"class":42},[36,50186,50187,50189],{"class":38,"line":54},[36,50188,1943],{"class":46},[36,50190,34183],{"class":42},[36,50192,50193,50195,50197,50199],{"class":38,"line":66},[36,50194,1943],{"class":46},[36,50196,34194],{"class":42},[36,50198,33737],{"class":46},[36,50200,34199],{"class":42},[36,50202,50203,50205],{"class":38,"line":73},[36,50204,1943],{"class":46},[36,50206,32761],{"class":42},[36,50208,50209,50211,50213,50215],{"class":38,"line":86},[36,50210,1937],{"class":46},[36,50212,33769],{"class":42},[36,50214,1943],{"class":46},[36,50216,34216],{"class":42},[36,50218,50219,50221,50223,50225,50228],{"class":38,"line":126},[36,50220,1937],{"class":46},[36,50222,33722],{"class":42},[36,50224,1943],{"class":46},[36,50226,50227],{"class":42}," ImageFolder ",[36,50229,50230],{"class":2621},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,50232,50233,50235,50237,50239],{"class":38,"line":131},[36,50234,1937],{"class":46},[36,50236,33752],{"class":42},[36,50238,1943],{"class":46},[36,50240,33757],{"class":42},[36,50242,50243,50245,50247,50249],{"class":38,"line":225},[36,50244,1943],{"class":46},[36,50246,33769],{"class":42},[36,50248,33737],{"class":46},[36,50250,33774],{"class":42},[36,50252,50253,50255,50257,50259],{"class":38,"line":235},[36,50254,1943],{"class":46},[36,50256,33786],{"class":42},[36,50258,33737],{"class":46},[36,50260,33791],{"class":42},[36,50262,50263],{"class":38,"line":377},[36,50264,34261],{"class":2621},[36,50266,50267,50269,50271,50273],{"class":38,"line":617},[36,50268,1937],{"class":46},[36,50270,34268],{"class":42},[36,50272,1943],{"class":46},[36,50274,45380],{"class":42},[36,50276,50277,50279,50281,50283],{"class":38,"line":643},[36,50278,1937],{"class":46},[36,50280,33103],{"class":42},[36,50282,1943],{"class":46},[36,50284,33108],{"class":42},[36,50286,50287],{"class":38,"line":921},[36,50288,70],{"emptyLinePlaceholder":69},[36,50290,50291],{"class":38,"line":934},[36,50292,34296],{"class":2621},[36,50294,50295,50297,50299],{"class":38,"line":939},[36,50296,76],{"class":46},[36,50298,34303],{"class":79},[36,50300,34306],{"class":42},[36,50302,50303],{"class":38,"line":949},[36,50304,50305],{"class":2621},"    # 导入自己的数据集，并进行数据处理\n",[36,50307,50308],{"class":38,"line":962},[36,50309,50310],{"class":2621},"    # 定义数据集的路径\n",[36,50312,50313,50316,50318,50320,50322,50324,50328],{"class":38,"line":974},[36,50314,50315],{"class":62},"    ROOT_PATH",[36,50317,47],{"class":46},[36,50319,3224],{"class":46},[36,50321,604],{"class":50},[36,50323,3113],{"class":62},[36,50325,50327],{"class":50326},"sA_wV","\u002Fdata\u002Ftrain",[36,50329,2326],{"class":50},[36,50331,50332],{"class":38,"line":979},[36,50333,70],{"emptyLinePlaceholder":69},[36,50335,50336],{"class":38,"line":994},[36,50337,50338],{"class":2621},"    # 定义归一化方法\n",[36,50340,50341],{"class":38,"line":1006},[36,50342,50343],{"class":2621},"    # 这里需要先计算一下数据集的均值和方差\n",[36,50345,50346],{"class":38,"line":1011},[36,50347,50348],{"class":2621},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,50350,50351],{"class":38,"line":1023},[36,50352,50353],{"class":2621},"    # 第一个参数是均值，第二个参数是方差\n",[36,50355,50356,50359,50361,50364,50367,50369,50372,50374,50377,50380,50383,50385,50388,50390,50393],{"class":38,"line":1028},[36,50357,50358],{"class":42},"    normalize",[36,50360,47],{"class":46},[36,50362,50363],{"class":42},"transforms.Normalize([",[36,50365,50366],{"class":62},"0.162",[36,50368,2934],{"class":42},[36,50370,50371],{"class":62},"0.151",[36,50373,2934],{"class":42},[36,50375,50376],{"class":62},"0.138",[36,50378,50379],{"class":42},"],[",[36,50381,50382],{"class":62},"0.058",[36,50384,2934],{"class":42},[36,50386,50387],{"class":62},"0.052",[36,50389,2934],{"class":42},[36,50391,50392],{"class":62},"0.048",[36,50394,7040],{"class":42},[36,50396,50397],{"class":38,"line":1033},[36,50398,50399],{"class":2621},"    # 定义数据集处理方法变量\n",[36,50401,50402,50405,50407],{"class":38,"line":1053},[36,50403,50404],{"class":42},"    train_transform",[36,50406,47],{"class":46},[36,50408,50409],{"class":42},"transforms.Compose([\n",[36,50411,50412],{"class":38,"line":1064},[36,50413,50414],{"class":2621},"        # 调整图像大小为224*224\n",[36,50416,50417,50420,50422,50424,50426],{"class":38,"line":1075},[36,50418,50419],{"class":42},"        transforms.Resize((",[36,50421,33855],{"class":62},[36,50423,2934],{"class":42},[36,50425,33855],{"class":62},[36,50427,44971],{"class":42},[36,50429,50430],{"class":38,"line":2291},[36,50431,50432],{"class":2621},"        # 将图像转换为张量\n",[36,50434,50435],{"class":38,"line":2329},[36,50436,50437],{"class":42},"        transforms.ToTensor(),\n",[36,50439,50440],{"class":38,"line":2334},[36,50441,50442],{"class":42},"        normalize])\n",[36,50444,50445],{"class":38,"line":2339},[36,50446,50447],{"class":2621},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,50449,50450],{"class":38,"line":2365},[36,50451,50452],{"class":2621},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,50454,50455],{"class":38,"line":2373},[36,50456,70],{"emptyLinePlaceholder":69},[36,50458,50459],{"class":38,"line":5001},[36,50460,50461],{"class":2621},"    # 加载数据集\n",[36,50463,50464],{"class":38,"line":5006},[36,50465,50466],{"class":2621},"    # 传入数据集路径与处理方法\n",[36,50468,50469,50471,50473,50476,50479,50481,50484,50486],{"class":38,"line":10328},[36,50470,34311],{"class":42},[36,50472,47],{"class":46},[36,50474,50475],{"class":42},"ImageFolder(",[36,50477,50478],{"class":62},"ROOT_PATH",[36,50480,2934],{"class":42},[36,50482,50483],{"class":7598},"transform",[36,50485,47],{"class":46},[36,50487,50488],{"class":42},"train_transform)\n",[36,50490,50491],{"class":38,"line":10352},[36,50492,70],{"emptyLinePlaceholder":69},[36,50494,50495,50497,50499,50501,50503,50505,50507,50509,50511,50513,50515,50517,50519,50521,50523],{"class":38,"line":10357},[36,50496,34363],{"class":42},[36,50498,47],{"class":46},[36,50500,34368],{"class":42},[36,50502,34371],{"class":62},[36,50504,92],{"class":42},[36,50506,34376],{"class":62},[36,50508,3011],{"class":46},[36,50510,9739],{"class":62},[36,50512,34383],{"class":42},[36,50514,34371],{"class":62},[36,50516,92],{"class":42},[36,50518,34390],{"class":62},[36,50520,3011],{"class":46},[36,50522,9739],{"class":62},[36,50524,34397],{"class":42},[36,50526,50527,50529,50531,50533,50535,50537],{"class":38,"line":10363},[36,50528,34402],{"class":42},[36,50530,47],{"class":46},[36,50532,34407],{"class":42},[36,50534,33891],{"class":7598},[36,50536,47],{"class":46},[36,50538,33896],{"class":42},[36,50540,50541,50543,50545,50547],{"class":38,"line":10390},[36,50542,34418],{"class":7598},[36,50544,47],{"class":46},[36,50546,2757],{"class":62},[36,50548,33820],{"class":42},[36,50550,50551,50553,50555,50557],{"class":38,"line":10395},[36,50552,34430],{"class":7598},[36,50554,47],{"class":46},[36,50556,33830],{"class":62},[36,50558,33820],{"class":42},[36,50560,50561],{"class":38,"line":10401},[36,50562,34441],{"class":2621},[36,50564,50565,50567,50569,50571],{"class":38,"line":10413},[36,50566,34446],{"class":7598},[36,50568,47],{"class":46},[36,50570,2951],{"class":62},[36,50572,123],{"class":42},[36,50574,50575,50577,50579,50581,50583,50585],{"class":38,"line":10425},[36,50576,34457],{"class":42},[36,50578,47],{"class":46},[36,50580,33888],{"class":42},[36,50582,33891],{"class":7598},[36,50584,47],{"class":46},[36,50586,34468],{"class":42},[36,50588,50589,50591,50593,50595],{"class":38,"line":10437},[36,50590,34473],{"class":7598},[36,50592,47],{"class":46},[36,50594,2757],{"class":62},[36,50596,33820],{"class":42},[36,50598,50599,50601,50603,50605],{"class":38,"line":12095},[36,50600,34484],{"class":7598},[36,50602,47],{"class":46},[36,50604,33830],{"class":62},[36,50606,33820],{"class":42},[36,50608,50609,50611,50613,50615],{"class":38,"line":12120},[36,50610,34495],{"class":7598},[36,50612,47],{"class":46},[36,50614,2951],{"class":62},[36,50616,123],{"class":42},[36,50618,50619,50621],{"class":38,"line":12143},[36,50620,6474],{"class":46},[36,50622,34508],{"class":42},[36,50624,50625],{"class":38,"line":12167},[36,50626,70],{"emptyLinePlaceholder":69},[36,50628,50629],{"class":38,"line":12172},[36,50630,34517],{"class":2621},[36,50632,50633],{"class":38,"line":12177},[36,50634,34522],{"class":2621},[36,50636,50637],{"class":38,"line":12182},[36,50638,70],{"emptyLinePlaceholder":69},[36,50640,50641],{"class":38,"line":12191},[36,50642,34531],{"class":2621},[36,50644,50645,50647,50649],{"class":38,"line":12196},[36,50646,76],{"class":46},[36,50648,34538],{"class":79},[36,50650,34541],{"class":42},[36,50652,50653,50655,50657,50659,50661,50663,50665,50667,50669],{"class":38,"line":12202},[36,50654,33592],{"class":42},[36,50656,47],{"class":46},[36,50658,32816],{"class":42},[36,50660,33599],{"class":50},[36,50662,4108],{"class":46},[36,50664,33604],{"class":42},[36,50666,4105],{"class":46},[36,50668,34560],{"class":50},[36,50670,123],{"class":42},[36,50672,50673],{"class":38,"line":12223},[36,50674,70],{"emptyLinePlaceholder":69},[36,50676,50677],{"class":38,"line":12229},[36,50678,34575],{"class":2621},[36,50680,50681],{"class":38,"line":12243},[36,50682,34580],{"class":2621},[36,50684,50685],{"class":38,"line":12249},[36,50686,34585],{"class":2621},[36,50688,50689,50691,50693,50695,50697,50699,50701],{"class":38,"line":12276},[36,50690,34590],{"class":42},[36,50692,47],{"class":46},[36,50694,34595],{"class":42},[36,50696,34598],{"class":7598},[36,50698,47],{"class":46},[36,50700,34603],{"class":62},[36,50702,123],{"class":42},[36,50704,50705],{"class":38,"line":12285},[36,50706,70],{"emptyLinePlaceholder":69},[36,50708,50709],{"class":38,"line":12291},[36,50710,34614],{"class":2621},[36,50712,50713,50715,50717],{"class":38,"line":12299},[36,50714,34619],{"class":42},[36,50716,47],{"class":46},[36,50718,34624],{"class":42},[36,50720,50721],{"class":38,"line":12304},[36,50722,70],{"emptyLinePlaceholder":69},[36,50724,50725],{"class":38,"line":18977},[36,50726,34633],{"class":2621},[36,50728,50729,50731,50733],{"class":38,"line":18983},[36,50730,33644],{"class":42},[36,50732,47],{"class":46},[36,50734,34642],{"class":42},[36,50736,50737],{"class":38,"line":19006},[36,50738,34647],{"class":2621},[36,50740,50741],{"class":38,"line":19012},[36,50742,34652],{"class":2621},[36,50744,50745],{"class":38,"line":19035},[36,50746,34657],{"class":2621},[36,50748,50749,50751,50753],{"class":38,"line":19049},[36,50750,34662],{"class":42},[36,50752,47],{"class":46},[36,50754,34667],{"class":42},[36,50756,50757],{"class":38,"line":19069},[36,50758,70],{"emptyLinePlaceholder":69},[36,50760,50761],{"class":38,"line":19075},[36,50762,34680],{"class":2621},[36,50764,50765],{"class":38,"line":19086},[36,50766,34685],{"class":2621},[36,50768,50769,50771,50773],{"class":38,"line":19109},[36,50770,34690],{"class":42},[36,50772,47],{"class":46},[36,50774,34695],{"class":62},[36,50776,50777],{"class":38,"line":19131},[36,50778,34700],{"class":2621},[36,50780,50781,50783,50785],{"class":38,"line":19136},[36,50782,34705],{"class":42},[36,50784,47],{"class":46},[36,50786,34710],{"class":42},[36,50788,50789],{"class":38,"line":19142},[36,50790,34715],{"class":2621},[36,50792,50793,50795,50797],{"class":38,"line":19156},[36,50794,34720],{"class":42},[36,50796,47],{"class":46},[36,50798,34710],{"class":42},[36,50800,50801],{"class":38,"line":19169},[36,50802,34729],{"class":2621},[36,50804,50805,50807,50809],{"class":38,"line":19174},[36,50806,34734],{"class":42},[36,50808,47],{"class":46},[36,50810,34710],{"class":42},[36,50812,50813],{"class":38,"line":19188},[36,50814,34743],{"class":2621},[36,50816,50817,50819,50821],{"class":38,"line":19193},[36,50818,34748],{"class":42},[36,50820,47],{"class":46},[36,50822,34710],{"class":42},[36,50824,50825],{"class":38,"line":19199},[36,50826,70],{"emptyLinePlaceholder":69},[36,50828,50829],{"class":38,"line":19204},[36,50830,34761],{"class":2621},[36,50832,50833,50835,50837],{"class":38,"line":19218},[36,50834,34766],{"class":42},[36,50836,47],{"class":46},[36,50838,34771],{"class":42},[36,50840,50841],{"class":38,"line":19223},[36,50842,70],{"emptyLinePlaceholder":69},[36,50844,50845],{"class":38,"line":19228},[36,50846,34784],{"class":2621},[36,50848,50849,50851,50853,50855,50857],{"class":38,"line":19242},[36,50850,5586],{"class":46},[36,50852,34791],{"class":42},[36,50854,28413],{"class":46},[36,50856,34796],{"class":62},[36,50858,34799],{"class":42},[36,50860,50861,50863,50865,50867,50869,50871,50873,50875,50877,50879,50881],{"class":38,"line":19254},[36,50862,168],{"class":62},[36,50864,92],{"class":42},[36,50866,34808],{"class":50},[36,50868,34811],{"class":62},[36,50870,3139],{"class":50},[36,50872,34811],{"class":62},[36,50874,604],{"class":50},[36,50876,34820],{"class":42},[36,50878,3087],{"class":46},[36,50880,1906],{"class":62},[36,50882,1914],{"class":42},[36,50884,50885,50887,50889,50891,50893,50895],{"class":38,"line":19259},[36,50886,168],{"class":62},[36,50888,92],{"class":42},[36,50890,34835],{"class":50},[36,50892,3011],{"class":46},[36,50894,3002],{"class":62},[36,50896,123],{"class":42},[36,50898,50899],{"class":38,"line":19272},[36,50900,70],{"emptyLinePlaceholder":69},[36,50902,50903],{"class":38,"line":19277},[36,50904,34850],{"class":2621},[36,50906,50907],{"class":38,"line":19282},[36,50908,34855],{"class":2621},[36,50910,50911,50913,50915],{"class":38,"line":19287},[36,50912,34860],{"class":42},[36,50914,47],{"class":46},[36,50916,34695],{"class":62},[36,50918,50919],{"class":38,"line":19300},[36,50920,34869],{"class":2621},[36,50922,50923,50925,50927],{"class":38,"line":19305},[36,50924,34874],{"class":42},[36,50926,47],{"class":46},[36,50928,5470],{"class":62},[36,50930,50931],{"class":38,"line":34985},[36,50932,34883],{"class":2621},[36,50934,50935,50937,50939],{"class":38,"line":34991},[36,50936,34888],{"class":42},[36,50938,47],{"class":46},[36,50940,34695],{"class":62},[36,50942,50943],{"class":38,"line":34997},[36,50944,34897],{"class":2621},[36,50946,50947,50949,50951],{"class":38,"line":35003},[36,50948,34902],{"class":42},[36,50950,47],{"class":46},[36,50952,5470],{"class":62},[36,50954,50955],{"class":38,"line":35009},[36,50956,34911],{"class":2621},[36,50958,50959,50961,50963],{"class":38,"line":35020},[36,50960,34916],{"class":42},[36,50962,47],{"class":46},[36,50964,5470],{"class":62},[36,50966,50967],{"class":38,"line":35026},[36,50968,34925],{"class":2621},[36,50970,50971,50973,50975],{"class":38,"line":35046},[36,50972,34930],{"class":42},[36,50974,47],{"class":46},[36,50976,5470],{"class":62},[36,50978,50979],{"class":38,"line":35052},[36,50980,34939],{"class":2621},[36,50982,50983,50985,50987,50989,50991],{"class":38,"line":35063},[36,50984,5788],{"class":46},[36,50986,33955],{"class":42},[36,50988,28413],{"class":46},[36,50990,33960],{"class":62},[36,50992,34952],{"class":42},[36,50994,50995],{"class":38,"line":35069},[36,50996,34957],{"class":2621},[36,50998,50999,51001,51003],{"class":38,"line":35075},[36,51000,34962],{"class":42},[36,51002,47],{"class":46},[36,51004,34967],{"class":42},[36,51006,51007],{"class":38,"line":35081},[36,51008,34972],{"class":2621},[36,51010,51011,51013,51015],{"class":38,"line":35087},[36,51012,34977],{"class":42},[36,51014,47],{"class":46},[36,51016,34982],{"class":42},[36,51018,51019],{"class":38,"line":35093},[36,51020,34988],{"class":2621},[36,51022,51023],{"class":38,"line":35099},[36,51024,34994],{"class":42},[36,51026,51027],{"class":38,"line":35105},[36,51028,35000],{"class":2621},[36,51030,51031],{"class":38,"line":35125},[36,51032,35006],{"class":2621},[36,51034,51035,51037,51039],{"class":38,"line":35131},[36,51036,35012],{"class":42},[36,51038,47],{"class":46},[36,51040,35017],{"class":42},[36,51042,51043],{"class":38,"line":35147},[36,51044,35023],{"class":2621},[36,51046,51047,51049,51051,51053,51055,51057,51059],{"class":38,"line":35153},[36,51048,35029],{"class":42},[36,51050,47],{"class":46},[36,51052,35034],{"class":42},[36,51054,35037],{"class":7598},[36,51056,47],{"class":46},[36,51058,1906],{"class":62},[36,51060,123],{"class":42},[36,51062,51063],{"class":38,"line":35167},[36,51064,35049],{"class":2621},[36,51066,51067,51069,51071],{"class":38,"line":35173},[36,51068,35055],{"class":42},[36,51070,47],{"class":46},[36,51072,35060],{"class":42},[36,51074,51075],{"class":38,"line":35188},[36,51076,35066],{"class":2621},[36,51078,51079],{"class":38,"line":35194},[36,51080,35072],{"class":42},[36,51082,51083],{"class":38,"line":35203},[36,51084,35078],{"class":2621},[36,51086,51087],{"class":38,"line":35209},[36,51088,35084],{"class":42},[36,51090,51091],{"class":38,"line":35218},[36,51092,35090],{"class":2621},[36,51094,51095],{"class":38,"line":35224},[36,51096,35096],{"class":42},[36,51098,51099],{"class":38,"line":35230},[36,51100,35102],{"class":2621},[36,51102,51103,51105,51107,51109,51111,51113,51115],{"class":38,"line":35239},[36,51104,35108],{"class":42},[36,51106,928],{"class":46},[36,51108,35113],{"class":42},[36,51110,3011],{"class":46},[36,51112,35118],{"class":42},[36,51114,2751],{"class":62},[36,51116,123],{"class":42},[36,51118,51119],{"class":38,"line":35245},[36,51120,35128],{"class":2621},[36,51122,51123,51125,51127,51129,51131],{"class":38,"line":35256},[36,51124,35134],{"class":42},[36,51126,928],{"class":46},[36,51128,35139],{"class":42},[36,51130,5334],{"class":46},[36,51132,35144],{"class":42},[36,51134,51135],{"class":38,"line":35262},[36,51136,35150],{"class":2621},[36,51138,51139,51141,51143,51145,51147],{"class":38,"line":35281},[36,51140,35156],{"class":42},[36,51142,928],{"class":46},[36,51144,35118],{"class":42},[36,51146,2751],{"class":62},[36,51148,123],{"class":42},[36,51150,51151],{"class":38,"line":35287},[36,51152,35170],{"class":2621},[36,51154,51155,51157,51159,51161,51163],{"class":38,"line":35298},[36,51156,5788],{"class":46},[36,51158,35178],{"class":42},[36,51160,28413],{"class":46},[36,51162,33960],{"class":62},[36,51164,35185],{"class":42},[36,51166,51167],{"class":38,"line":35304},[36,51168,35191],{"class":2621},[36,51170,51171,51173,51175],{"class":38,"line":35324},[36,51172,34962],{"class":42},[36,51174,47],{"class":46},[36,51176,34967],{"class":42},[36,51178,51179],{"class":38,"line":35340},[36,51180,35206],{"class":2621},[36,51182,51183,51185,51187],{"class":38,"line":35346},[36,51184,34977],{"class":42},[36,51186,47],{"class":46},[36,51188,34982],{"class":42},[36,51190,51191],{"class":38,"line":35360},[36,51192,35221],{"class":2621},[36,51194,51195],{"class":38,"line":35366},[36,51196,35227],{"class":42},[36,51198,51199],{"class":38,"line":35372},[36,51200,38707],{"class":2621},[36,51202,51203,51205],{"class":38,"line":35383},[36,51204,35233],{"class":46},[36,51206,35236],{"class":42},[36,51208,51209],{"class":38,"line":35389},[36,51210,35242],{"class":2621},[36,51212,51213,51215,51217],{"class":38,"line":35395},[36,51214,38722],{"class":42},[36,51216,47],{"class":46},[36,51218,35017],{"class":42},[36,51220,51221],{"class":38,"line":35405},[36,51222,35259],{"class":2621},[36,51224,51225,51227,51229,51231,51233,51235,51237],{"class":38,"line":35411},[36,51226,38735],{"class":42},[36,51228,47],{"class":46},[36,51230,35034],{"class":42},[36,51232,35037],{"class":7598},[36,51234,47],{"class":46},[36,51236,1906],{"class":62},[36,51238,123],{"class":42},[36,51240,51241],{"class":38,"line":35422},[36,51242,35284],{"class":2621},[36,51244,51245,51247,51249],{"class":38,"line":35428},[36,51246,38756],{"class":42},[36,51248,47],{"class":46},[36,51250,35060],{"class":42},[36,51252,51253],{"class":38,"line":35438},[36,51254,35301],{"class":2621},[36,51256,51257,51259,51261,51263,51265,51267,51269],{"class":38,"line":35443},[36,51258,38769],{"class":42},[36,51260,928],{"class":46},[36,51262,38774],{"class":42},[36,51264,3011],{"class":46},[36,51266,35118],{"class":42},[36,51268,2751],{"class":62},[36,51270,123],{"class":42},[36,51272,51273,51275,51277,51279,51281],{"class":38,"line":35449},[36,51274,38787],{"class":42},[36,51276,928],{"class":46},[36,51278,35139],{"class":42},[36,51280,5334],{"class":46},[36,51282,35144],{"class":42},[36,51284,51285],{"class":38,"line":35498},[36,51286,38800],{"class":2621},[36,51288,51289,51291,51293,51295,51297],{"class":38,"line":35545},[36,51290,38805],{"class":42},[36,51292,928],{"class":46},[36,51294,35118],{"class":42},[36,51296,2751],{"class":62},[36,51298,123],{"class":42},[36,51300,51301],{"class":38,"line":35550},[36,51302,35363],{"class":2621},[36,51304,51305],{"class":38,"line":35556},[36,51306,35369],{"class":2621},[36,51308,51309,51311,51313],{"class":38,"line":35575},[36,51310,35375],{"class":42},[36,51312,3139],{"class":46},[36,51314,35380],{"class":42},[36,51316,51317],{"class":38,"line":35581},[36,51318,35386],{"class":2621},[36,51320,51321],{"class":38,"line":35601},[36,51322,35392],{"class":2621},[36,51324,51325,51327,51329],{"class":38,"line":35607},[36,51326,35398],{"class":42},[36,51328,3139],{"class":46},[36,51330,35380],{"class":42},[36,51332,51333],{"class":38,"line":35613},[36,51334,35408],{"class":2621},[36,51336,51337,51339,51341],{"class":38,"line":35623},[36,51338,35414],{"class":42},[36,51340,3139],{"class":46},[36,51342,35419],{"class":42},[36,51344,51345],{"class":38,"line":35628},[36,51346,35425],{"class":2621},[36,51348,51349,51351,51353],{"class":38,"line":35634},[36,51350,35431],{"class":42},[36,51352,3139],{"class":46},[36,51354,35419],{"class":42},[36,51356,51357],{"class":38,"line":35650},[36,51358,70],{"emptyLinePlaceholder":69},[36,51360,51361],{"class":38,"line":35695},[36,51362,35446],{"class":2621},[36,51364,51365,51367,51369,51371,51373,51375,51377,51379,51381,51383,51385,51387,51389,51391,51393,51395,51397,51399,51401,51403],{"class":38,"line":35701},[36,51366,168],{"class":62},[36,51368,92],{"class":42},[36,51370,5977],{"class":50},[36,51372,34811],{"class":62},[36,51374,35460],{"class":50},[36,51376,101],{"class":62},[36,51378,35465],{"class":46},[36,51380,107],{"class":62},[36,51382,35470],{"class":50},[36,51384,101],{"class":62},[36,51386,35465],{"class":46},[36,51388,107],{"class":62},[36,51390,5977],{"class":50},[36,51392,35481],{"class":42},[36,51394,3087],{"class":46},[36,51396,1906],{"class":62},[36,51398,35488],{"class":42},[36,51400,3087],{"class":46},[36,51402,1906],{"class":62},[36,51404,35495],{"class":42},[36,51406,51407,51409,51411,51413,51415,51417,51419,51421,51423,51425,51427,51429,51431,51433,51435,51437,51439,51441,51443,51445],{"class":38,"line":35707},[36,51408,168],{"class":62},[36,51410,92],{"class":42},[36,51412,5977],{"class":50},[36,51414,34811],{"class":62},[36,51416,35509],{"class":50},[36,51418,101],{"class":62},[36,51420,35465],{"class":46},[36,51422,107],{"class":62},[36,51424,35518],{"class":50},[36,51426,101],{"class":62},[36,51428,35465],{"class":46},[36,51430,107],{"class":62},[36,51432,5977],{"class":50},[36,51434,35529],{"class":42},[36,51436,3087],{"class":46},[36,51438,1906],{"class":62},[36,51440,35536],{"class":42},[36,51442,3087],{"class":46},[36,51444,1906],{"class":62},[36,51446,35495],{"class":42},[36,51448,51449],{"class":38,"line":35713},[36,51450,70],{"emptyLinePlaceholder":69},[36,51452,51453],{"class":38,"line":35724},[36,51454,35553],{"class":2621},[36,51456,51457,51459,51461,51463,51465,51467,51469],{"class":38,"line":35730},[36,51458,890],{"class":46},[36,51460,35561],{"class":42},[36,51462,3087],{"class":46},[36,51464,1906],{"class":62},[36,51466,3493],{"class":42},[36,51468,986],{"class":46},[36,51470,35572],{"class":42},[36,51472,51473],{"class":38,"line":35736},[36,51474,35578],{"class":2621},[36,51476,51477,51479,51481,51483,51485,51487,51489],{"class":38,"line":35742},[36,51478,35584],{"class":42},[36,51480,2605],{"class":62},[36,51482,47],{"class":46},[36,51484,35591],{"class":42},[36,51486,3087],{"class":46},[36,51488,1906],{"class":62},[36,51490,35598],{"class":42},[36,51492,51493],{"class":38,"line":35760},[36,51494,35604],{"class":2621},[36,51496,51497],{"class":38,"line":35774},[36,51498,35610],{"class":2621},[36,51500,51501,51503,51505],{"class":38,"line":35783},[36,51502,35616],{"class":42},[36,51504,47],{"class":46},[36,51506,34667],{"class":42},[36,51508,51509],{"class":38,"line":35792},[36,51510,70],{"emptyLinePlaceholder":69},[36,51512,51513],{"class":38,"line":35801},[36,51514,35631],{"class":2621},[36,51516,51517,51519,51521,51523,51525],{"class":38,"line":35810},[36,51518,35637],{"class":42},[36,51520,47],{"class":46},[36,51522,35642],{"class":42},[36,51524,3087],{"class":46},[36,51526,35647],{"class":42},[36,51528,51529,51531,51533,51535,51537,51539,51541,51543,51545,51547,51549,51551,51553,51555,51557,51559,51561,51563],{"class":38,"line":35816},[36,51530,168],{"class":62},[36,51532,92],{"class":42},[36,51534,35657],{"class":50},[36,51536,101],{"class":62},[36,51538,35662],{"class":46},[36,51540,107],{"class":62},[36,51542,3099],{"class":50},[36,51544,101],{"class":62},[36,51546,35662],{"class":46},[36,51548,107],{"class":62},[36,51550,35675],{"class":50},[36,51552,35678],{"class":42},[36,51554,35681],{"class":46},[36,51556,3460],{"class":62},[36,51558,35686],{"class":42},[36,51560,2884],{"class":46},[36,51562,3460],{"class":62},[36,51564,1914],{"class":42},[36,51566,51567],{"class":38,"line":35822},[36,51568,39084],{"class":2621},[36,51570,51571],{"class":38,"line":35830},[36,51572,39089],{"class":2621},[36,51574,51575,51577,51579],{"class":38,"line":35835},[36,51576,39094],{"class":42},[36,51578,35719],{"class":50},[36,51580,123],{"class":42},[36,51582,51583],{"class":38,"line":35841},[36,51584,35739],{"class":2621},[36,51586,51587,51589,51591,51593,51595,51597],{"class":38,"line":35852},[36,51588,35745],{"class":42},[36,51590,47],{"class":46},[36,51592,35750],{"class":42},[36,51594,35753],{"class":7598},[36,51596,47],{"class":46},[36,51598,3963],{"class":42},[36,51600,51601,51603,51605,51607],{"class":38,"line":35858},[36,51602,35763],{"class":50},[36,51604,3413],{"class":42},[36,51606,35768],{"class":62},[36,51608,35771],{"class":42},[36,51610,51611,51613],{"class":38,"line":35878},[36,51612,35777],{"class":50},[36,51614,35780],{"class":42},[36,51616,51617,51619],{"class":38,"line":35884},[36,51618,35786],{"class":50},[36,51620,35789],{"class":42},[36,51622,51623,51625],{"class":38,"line":35890},[36,51624,35795],{"class":50},[36,51626,35798],{"class":42},[36,51628,51629,51631],{"class":38,"line":35896},[36,51630,35804],{"class":50},[36,51632,35807],{"class":42},[36,51634,51635],{"class":38,"line":35913},[36,51636,35813],{"class":42},[36,51638,51639],{"class":38,"line":35919},[36,51640,35819],{"class":2621},[36,51642,51643,51645],{"class":38,"line":35925},[36,51644,6474],{"class":46},[36,51646,35827],{"class":42},[36,51648,51649],{"class":38,"line":35931},[36,51650,70],{"emptyLinePlaceholder":69},[36,51652,51653],{"class":38,"line":35937},[36,51654,35838],{"class":2621},[36,51656,51657,51659,51661],{"class":38,"line":35943},[36,51658,76],{"class":46},[36,51660,35846],{"class":79},[36,51662,35849],{"class":42},[36,51664,51665],{"class":38,"line":35970},[36,51666,35855],{"class":2621},[36,51668,51669,51671,51673,51675,51677,51679,51681,51683],{"class":38,"line":35994},[36,51670,35861],{"class":42},[36,51672,34047],{"class":7598},[36,51674,47],{"class":46},[36,51676,92],{"class":42},[36,51678,3053],{"class":62},[36,51680,2934],{"class":42},[36,51682,2850],{"class":62},[36,51684,1914],{"class":42},[36,51686,51687],{"class":38,"line":36000},[36,51688,35881],{"class":2621},[36,51690,51691],{"class":38,"line":36006},[36,51692,35887],{"class":2621},[36,51694,51695],{"class":38,"line":36012},[36,51696,35893],{"class":2621},[36,51698,51699,51701,51703,51705,51707,51709,51711],{"class":38,"line":36023},[36,51700,34081],{"class":42},[36,51702,1906],{"class":62},[36,51704,2934],{"class":42},[36,51706,1911],{"class":62},[36,51708,2934],{"class":42},[36,51710,1906],{"class":62},[36,51712,123],{"class":42},[36,51714,51715],{"class":38,"line":36034},[36,51716,35916],{"class":2621},[36,51718,51719],{"class":38,"line":36040},[36,51720,35922],{"class":2621},[36,51722,51723],{"class":38,"line":36057},[36,51724,35928],{"class":2621},[36,51726,51727],{"class":38,"line":36080},[36,51728,35934],{"class":2621},[36,51730,51731],{"class":38,"line":36103},[36,51732,35940],{"class":2621},[36,51734,51735,51737,51739,51741,51743,51745,51747,51749,51751],{"class":38,"line":36109},[36,51736,35946],{"class":42},[36,51738,35949],{"class":50},[36,51740,35952],{"class":42},[36,51742,35955],{"class":50},[36,51744,2934],{"class":42},[36,51746,35960],{"class":7598},[36,51748,47],{"class":46},[36,51750,35965],{"class":50},[36,51752,123],{"class":42},[36,51754,51755,51757,51759,51761,51763,51765,51767,51769,51771],{"class":38,"line":36114},[36,51756,35946],{"class":42},[36,51758,35949],{"class":50},[36,51760,35977],{"class":42},[36,51762,35980],{"class":50},[36,51764,2934],{"class":42},[36,51766,35960],{"class":7598},[36,51768,47],{"class":46},[36,51770,35989],{"class":50},[36,51772,123],{"class":42},[36,51774,51775],{"class":38,"line":36123},[36,51776,35997],{"class":2621},[36,51778,51779],{"class":38,"line":36133},[36,51780,36003],{"class":42},[36,51782,51783],{"class":38,"line":36139},[36,51784,36009],{"class":2621},[36,51786,51787,51789,51791],{"class":38,"line":36144},[36,51788,36015],{"class":42},[36,51790,36018],{"class":50},[36,51792,123],{"class":42},[36,51794,51795,51797,51799],{"class":38,"line":36150},[36,51796,36026],{"class":42},[36,51798,36029],{"class":50},[36,51800,123],{"class":42},[36,51802,51803],{"class":38,"line":36163},[36,51804,36037],{"class":2621},[36,51806,51807,51809,51811,51813,51815,51817,51819],{"class":38,"line":36169},[36,51808,34081],{"class":42},[36,51810,1906],{"class":62},[36,51812,2934],{"class":42},[36,51814,1911],{"class":62},[36,51816,2934],{"class":42},[36,51818,1911],{"class":62},[36,51820,123],{"class":42},[36,51822,51823,51825,51827,51829,51831,51833,51835,51837,51839],{"class":38,"line":36180},[36,51824,35946],{"class":42},[36,51826,35949],{"class":50},[36,51828,36064],{"class":42},[36,51830,35955],{"class":50},[36,51832,2934],{"class":42},[36,51834,35960],{"class":7598},[36,51836,47],{"class":46},[36,51838,36075],{"class":50},[36,51840,123],{"class":42},[36,51842,51843,51845,51847,51849,51851,51853,51855,51857,51859],{"class":38,"line":36191},[36,51844,35946],{"class":42},[36,51846,35949],{"class":50},[36,51848,36087],{"class":42},[36,51850,35980],{"class":50},[36,51852,2934],{"class":42},[36,51854,35960],{"class":7598},[36,51856,47],{"class":46},[36,51858,36098],{"class":50},[36,51860,123],{"class":42},[36,51862,51863],{"class":38,"line":36210},[36,51864,36106],{"class":2621},[36,51866,51868],{"class":38,"line":51867},219,[36,51869,36003],{"class":42},[36,51871,51873,51875,51877],{"class":38,"line":51872},220,[36,51874,36015],{"class":42},[36,51876,35949],{"class":50},[36,51878,123],{"class":42},[36,51880,51882,51884,51886],{"class":38,"line":51881},221,[36,51883,36026],{"class":42},[36,51885,36128],{"class":50},[36,51887,123],{"class":42},[36,51889,51891],{"class":38,"line":51890},222,[36,51892,36136],{"class":42},[36,51894,51896],{"class":38,"line":51895},223,[36,51897,70],{"emptyLinePlaceholder":69},[36,51899,51901],{"class":38,"line":51900},224,[36,51902,36147],{"class":2621},[36,51904,51906,51908,51910,51912,51914],{"class":38,"line":51905},225,[36,51907,3948],{"class":46},[36,51909,33575],{"class":62},[36,51911,5334],{"class":46},[36,51913,33580],{"class":50},[36,51915,153],{"class":42},[36,51917,51919],{"class":38,"line":51918},226,[36,51920,36166],{"class":2621},[36,51922,51924,51926,51928],{"class":38,"line":51923},227,[36,51925,46895],{"class":42},[36,51927,47],{"class":46},[36,51929,46900],{"class":42},[36,51931,51933,51935,51937],{"class":38,"line":51932},228,[36,51934,36183],{"class":42},[36,51936,47],{"class":46},[36,51938,36188],{"class":42},[36,51940,51942,51944,51946,51948,51950,51952,51954],{"class":38,"line":51941},229,[36,51943,35745],{"class":42},[36,51945,47],{"class":46},[36,51947,46917],{"class":42},[36,51949,36201],{"class":7598},[36,51951,47],{"class":46},[36,51953,3460],{"class":62},[36,51955,123],{"class":42},[36,51957,51959],{"class":38,"line":51958},230,[36,51960,36213],{"class":42},[24368,51962,51964],{"id":51963},"_242测试代码","2.4.2.测试代码",[19,51966,51967],{},"使用测试集进行测试与推理",[26,51969,51971],{"className":28,"code":51970,"language":30,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,51972,51973,51979,51989,51999,52010,52020,52024,52028,52036,52041,52045,52062,52066,52070,52074,52078,52082,52114,52118,52126,52130,52142,52146,52150,52154,52158,52162,52166,52170,52174,52192,52206,52210,52220,52230,52240,52246,52250,52254,52262,52266,52282,52290,52294,52298,52306,52314,52318,52322,52326,52330,52336,52340,52350,52358,52366,52370,52374,52378,52386,52390,52406,52410,52414,52418,52430,52434,52446,52450,52454,52466,52470,52480,52484,52488,52500,52504,52512,52516,52520,52528,52532,52540,52544,52548,52552,52556,52560,52576,52584,52588,52592,52610,52616,52620,52630,52638,52646,52650,52654,52658,52662,52670,52674,52690,52694,52702,52710],{"__ignoreMap":31},[36,51974,51975,51977],{"class":38,"line":39},[36,51976,1943],{"class":46},[36,51978,32761],{"class":42},[36,51980,51981,51983,51985,51987],{"class":38,"line":54},[36,51982,1943],{"class":46},[36,51984,33769],{"class":42},[36,51986,33737],{"class":46},[36,51988,33774],{"class":42},[36,51990,51991,51993,51995,51997],{"class":38,"line":66},[36,51992,1937],{"class":46},[36,51994,33752],{"class":42},[36,51996,1943],{"class":46},[36,51998,33757],{"class":42},[36,52000,52001,52003,52005,52007],{"class":38,"line":73},[36,52002,1937],{"class":46},[36,52004,33722],{"class":42},[36,52006,1943],{"class":46},[36,52008,52009],{"class":42}," ImageFolder\n",[36,52011,52012,52014,52016,52018],{"class":38,"line":86},[36,52013,1937],{"class":46},[36,52015,34268],{"class":42},[36,52017,1943],{"class":46},[36,52019,46989],{"class":42},[36,52021,52022],{"class":38,"line":126},[36,52023,70],{"emptyLinePlaceholder":69},[36,52025,52026],{"class":38,"line":131},[36,52027,36303],{"class":2621},[36,52029,52030,52032,52034],{"class":38,"line":225},[36,52031,76],{"class":46},[36,52033,36310],{"class":79},[36,52035,34306],{"class":42},[36,52037,52038],{"class":38,"line":235},[36,52039,52040],{"class":2621},"   # 导入自己的数据集，并进行数据处理\n",[36,52042,52043],{"class":38,"line":377},[36,52044,50310],{"class":2621},[36,52046,52047,52049,52051,52053,52055,52057,52060],{"class":38,"line":617},[36,52048,50315],{"class":62},[36,52050,47],{"class":46},[36,52052,3224],{"class":46},[36,52054,604],{"class":50},[36,52056,3113],{"class":62},[36,52058,52059],{"class":50326},"\u002Fdata\u002Ftest",[36,52061,2326],{"class":50},[36,52063,52064],{"class":38,"line":643},[36,52065,70],{"emptyLinePlaceholder":69},[36,52067,52068],{"class":38,"line":921},[36,52069,50338],{"class":2621},[36,52071,52072],{"class":38,"line":934},[36,52073,50343],{"class":2621},[36,52075,52076],{"class":38,"line":939},[36,52077,50348],{"class":2621},[36,52079,52080],{"class":38,"line":949},[36,52081,50353],{"class":2621},[36,52083,52084,52086,52088,52090,52092,52094,52096,52098,52100,52102,52104,52106,52108,52110,52112],{"class":38,"line":962},[36,52085,50358],{"class":42},[36,52087,47],{"class":46},[36,52089,50363],{"class":42},[36,52091,50366],{"class":62},[36,52093,2934],{"class":42},[36,52095,50371],{"class":62},[36,52097,2934],{"class":42},[36,52099,50376],{"class":62},[36,52101,50379],{"class":42},[36,52103,50382],{"class":62},[36,52105,2934],{"class":42},[36,52107,50387],{"class":62},[36,52109,2934],{"class":42},[36,52111,50392],{"class":62},[36,52113,7040],{"class":42},[36,52115,52116],{"class":38,"line":974},[36,52117,50399],{"class":2621},[36,52119,52120,52122,52124],{"class":38,"line":979},[36,52121,50404],{"class":42},[36,52123,47],{"class":46},[36,52125,50409],{"class":42},[36,52127,52128],{"class":38,"line":994},[36,52129,50414],{"class":2621},[36,52131,52132,52134,52136,52138,52140],{"class":38,"line":1006},[36,52133,50419],{"class":42},[36,52135,33855],{"class":62},[36,52137,2934],{"class":42},[36,52139,33855],{"class":62},[36,52141,44971],{"class":42},[36,52143,52144],{"class":38,"line":1011},[36,52145,50432],{"class":2621},[36,52147,52148],{"class":38,"line":1023},[36,52149,50437],{"class":42},[36,52151,52152],{"class":38,"line":1028},[36,52153,50442],{"class":42},[36,52155,52156],{"class":38,"line":1033},[36,52157,50447],{"class":2621},[36,52159,52160],{"class":38,"line":1053},[36,52161,50452],{"class":2621},[36,52163,52164],{"class":38,"line":1064},[36,52165,70],{"emptyLinePlaceholder":69},[36,52167,52168],{"class":38,"line":1075},[36,52169,50461],{"class":2621},[36,52171,52172],{"class":38,"line":2291},[36,52173,50466],{"class":2621},[36,52175,52176,52178,52180,52182,52184,52186,52188,52190],{"class":38,"line":2329},[36,52177,36317],{"class":42},[36,52179,47],{"class":46},[36,52181,50475],{"class":42},[36,52183,50478],{"class":62},[36,52185,2934],{"class":42},[36,52187,50483],{"class":7598},[36,52189,47],{"class":46},[36,52191,50488],{"class":42},[36,52193,52194,52196,52198,52200,52202,52204],{"class":38,"line":2334},[36,52195,36374],{"class":42},[36,52197,47],{"class":46},[36,52199,33888],{"class":42},[36,52201,33891],{"class":7598},[36,52203,47],{"class":46},[36,52205,36385],{"class":42},[36,52207,52208],{"class":38,"line":2339},[36,52209,36390],{"class":2621},[36,52211,52212,52214,52216,52218],{"class":38,"line":2365},[36,52213,36395],{"class":7598},[36,52215,47],{"class":46},[36,52217,1906],{"class":62},[36,52219,33820],{"class":42},[36,52221,52222,52224,52226,52228],{"class":38,"line":2373},[36,52223,36406],{"class":7598},[36,52225,47],{"class":46},[36,52227,33830],{"class":62},[36,52229,33820],{"class":42},[36,52231,52232,52234,52236,52238],{"class":38,"line":5001},[36,52233,36417],{"class":7598},[36,52235,47],{"class":46},[36,52237,2751],{"class":62},[36,52239,123],{"class":42},[36,52241,52242,52244],{"class":38,"line":5006},[36,52243,6474],{"class":46},[36,52245,36430],{"class":42},[36,52247,52248],{"class":38,"line":10328},[36,52249,70],{"emptyLinePlaceholder":69},[36,52251,52252],{"class":38,"line":10352},[36,52253,36439],{"class":2621},[36,52255,52256,52258,52260],{"class":38,"line":10357},[36,52257,76],{"class":46},[36,52259,36446],{"class":79},[36,52261,36449],{"class":42},[36,52263,52264],{"class":38,"line":10363},[36,52265,36454],{"class":2621},[36,52267,52268,52270,52272,52274,52276,52278,52280],{"class":38,"line":10390},[36,52269,33592],{"class":42},[36,52271,47],{"class":46},[36,52273,33599],{"class":50},[36,52275,4108],{"class":46},[36,52277,33604],{"class":42},[36,52279,4105],{"class":46},[36,52281,36471],{"class":50},[36,52283,52284,52286,52288],{"class":38,"line":10395},[36,52285,33644],{"class":42},[36,52287,47],{"class":46},[36,52289,34642],{"class":42},[36,52291,52292],{"class":38,"line":10401},[36,52293,70],{"emptyLinePlaceholder":69},[36,52295,52296],{"class":38,"line":10413},[36,52297,36488],{"class":2621},[36,52299,52300,52302,52304],{"class":38,"line":10425},[36,52301,36493],{"class":42},[36,52303,47],{"class":46},[36,52305,34695],{"class":62},[36,52307,52308,52310,52312],{"class":38,"line":10437},[36,52309,36502],{"class":42},[36,52311,47],{"class":46},[36,52313,5470],{"class":62},[36,52315,52316],{"class":38,"line":12095},[36,52317,70],{"emptyLinePlaceholder":69},[36,52319,52320],{"class":38,"line":12120},[36,52321,36515],{"class":2621},[36,52323,52324],{"class":38,"line":12143},[36,52325,36520],{"class":2621},[36,52327,52328],{"class":38,"line":12167},[36,52329,36525],{"class":2621},[36,52331,52332,52334],{"class":38,"line":12172},[36,52333,36530],{"class":46},[36,52335,35236],{"class":42},[36,52337,52338],{"class":38,"line":12177},[36,52339,36537],{"class":2621},[36,52341,52342,52344,52346,52348],{"class":38,"line":12182},[36,52343,5788],{"class":46},[36,52345,36544],{"class":42},[36,52347,28413],{"class":46},[36,52349,36549],{"class":42},[36,52351,52352,52354,52356],{"class":38,"line":12191},[36,52353,36554],{"class":42},[36,52355,47],{"class":46},[36,52357,36559],{"class":42},[36,52359,52360,52362,52364],{"class":38,"line":12196},[36,52361,36564],{"class":42},[36,52363,47],{"class":46},[36,52365,36569],{"class":42},[36,52367,52368],{"class":38,"line":12202},[36,52369,36574],{"class":2621},[36,52371,52372],{"class":38,"line":12223},[36,52373,35227],{"class":42},[36,52375,52376],{"class":38,"line":12229},[36,52377,36583],{"class":2621},[36,52379,52380,52382,52384],{"class":38,"line":12243},[36,52381,35012],{"class":42},[36,52383,47],{"class":46},[36,52385,36592],{"class":42},[36,52387,52388],{"class":38,"line":12249},[36,52389,36597],{"class":2621},[36,52391,52392,52394,52396,52398,52400,52402,52404],{"class":38,"line":12276},[36,52393,35029],{"class":42},[36,52395,47],{"class":46},[36,52397,35034],{"class":42},[36,52399,35037],{"class":7598},[36,52401,47],{"class":46},[36,52403,1906],{"class":62},[36,52405,123],{"class":42},[36,52407,52408],{"class":38,"line":12285},[36,52409,36618],{"class":2621},[36,52411,52412],{"class":38,"line":12291},[36,52413,36623],{"class":2621},[36,52415,52416],{"class":38,"line":12299},[36,52417,36628],{"class":2621},[36,52419,52420,52422,52424,52426,52428],{"class":38,"line":12304},[36,52421,36633],{"class":42},[36,52423,928],{"class":46},[36,52425,35139],{"class":42},[36,52427,5334],{"class":46},[36,52429,36642],{"class":42},[36,52431,52432],{"class":38,"line":18977},[36,52433,36647],{"class":2621},[36,52435,52436,52438,52440,52442,52444],{"class":38,"line":18983},[36,52437,36652],{"class":42},[36,52439,928],{"class":46},[36,52441,36657],{"class":42},[36,52443,2751],{"class":62},[36,52445,123],{"class":42},[36,52447,52448],{"class":38,"line":19006},[36,52449,70],{"emptyLinePlaceholder":69},[36,52451,52452],{"class":38,"line":19012},[36,52453,36670],{"class":2621},[36,52455,52456,52458,52460,52462,52464],{"class":38,"line":19035},[36,52457,36675],{"class":42},[36,52459,47],{"class":46},[36,52461,36680],{"class":42},[36,52463,3139],{"class":46},[36,52465,36685],{"class":42},[36,52467,52468],{"class":38,"line":19049},[36,52469,36690],{"class":2621},[36,52471,52472,52474,52476,52478],{"class":38,"line":19069},[36,52473,168],{"class":62},[36,52475,92],{"class":42},[36,52477,36699],{"class":50},[36,52479,36702],{"class":42},[36,52481,52482],{"class":38,"line":19075},[36,52483,70],{"emptyLinePlaceholder":69},[36,52485,52486],{"class":38,"line":19086},[36,52487,36711],{"class":2621},[36,52489,52490,52492,52494,52496,52498],{"class":38,"line":19109},[36,52491,3948],{"class":46},[36,52493,33575],{"class":62},[36,52495,5334],{"class":46},[36,52497,33580],{"class":50},[36,52499,153],{"class":42},[36,52501,52502],{"class":38,"line":19131},[36,52503,36728],{"class":2621},[36,52505,52506,52508,52510],{"class":38,"line":19136},[36,52507,33644],{"class":42},[36,52509,47],{"class":46},[36,52511,46900],{"class":42},[36,52513,52514],{"class":38,"line":19142},[36,52515,36741],{"class":2621},[36,52517,52518],{"class":38,"line":19156},[36,52519,36746],{"class":2621},[36,52521,52522,52524,52526],{"class":38,"line":19169},[36,52523,36751],{"class":42},[36,52525,36754],{"class":50},[36,52527,1914],{"class":42},[36,52529,52530],{"class":38,"line":19174},[36,52531,36761],{"class":2621},[36,52533,52534,52536,52538],{"class":38,"line":19188},[36,52535,36374],{"class":42},[36,52537,47],{"class":46},[36,52539,36770],{"class":42},[36,52541,52542],{"class":38,"line":19193},[36,52543,36775],{"class":2621},[36,52545,52546],{"class":38,"line":19199},[36,52547,36780],{"class":42},[36,52549,52550],{"class":38,"line":19204},[36,52551,70],{"emptyLinePlaceholder":69},[36,52553,52554],{"class":38,"line":19218},[36,52555,36789],{"class":2621},[36,52557,52558],{"class":38,"line":19223},[36,52559,36794],{"class":2621},[36,52561,52562,52564,52566,52568,52570,52572,52574],{"class":38,"line":19228},[36,52563,33592],{"class":42},[36,52565,47],{"class":46},[36,52567,33599],{"class":50},[36,52569,4108],{"class":46},[36,52571,33604],{"class":42},[36,52573,4105],{"class":46},[36,52575,36471],{"class":50},[36,52577,52578,52580,52582],{"class":38,"line":19242},[36,52579,33644],{"class":42},[36,52581,47],{"class":46},[36,52583,34642],{"class":42},[36,52585,52586],{"class":38,"line":19254},[36,52587,36823],{"class":2621},[36,52589,52590],{"class":38,"line":19259},[36,52591,36828],{"class":2621},[36,52593,52594,52596,52598,52600,52603,52605,52608],{"class":38,"line":19272},[36,52595,36833],{"class":42},[36,52597,47],{"class":46},[36,52599,3444],{"class":42},[36,52601,52602],{"class":50},"'猫'",[36,52604,2934],{"class":42},[36,52606,52607],{"class":50},"'狗'",[36,52609,35598],{"class":42},[36,52611,52612,52614],{"class":38,"line":19277},[36,52613,36530],{"class":46},[36,52615,35236],{"class":42},[36,52617,52618],{"class":38,"line":19282},[36,52619,36898],{"class":2621},[36,52621,52622,52624,52626,52628],{"class":38,"line":19287},[36,52623,5788],{"class":46},[36,52625,36905],{"class":42},[36,52627,28413],{"class":46},[36,52629,36549],{"class":42},[36,52631,52632,52634,52636],{"class":38,"line":19300},[36,52633,34962],{"class":42},[36,52635,47],{"class":46},[36,52637,34967],{"class":42},[36,52639,52640,52642,52644],{"class":38,"line":19305},[36,52641,34977],{"class":42},[36,52643,47],{"class":46},[36,52645,34982],{"class":42},[36,52647,52648],{"class":38,"line":34985},[36,52649,70],{"emptyLinePlaceholder":69},[36,52651,52652],{"class":38,"line":34991},[36,52653,36934],{"class":2621},[36,52655,52656],{"class":38,"line":34997},[36,52657,35227],{"class":42},[36,52659,52660],{"class":38,"line":35003},[36,52661,36943],{"class":2621},[36,52663,52664,52666,52668],{"class":38,"line":35009},[36,52665,35012],{"class":42},[36,52667,47],{"class":46},[36,52669,35017],{"class":42},[36,52671,52672],{"class":38,"line":35020},[36,52673,36956],{"class":2621},[36,52675,52676,52678,52680,52682,52684,52686,52688],{"class":38,"line":35026},[36,52677,35029],{"class":42},[36,52679,47],{"class":46},[36,52681,35034],{"class":42},[36,52683,35037],{"class":7598},[36,52685,47],{"class":46},[36,52687,1906],{"class":62},[36,52689,123],{"class":42},[36,52691,52692],{"class":38,"line":35046},[36,52693,36977],{"class":2621},[36,52695,52696,52698,52700],{"class":38,"line":35052},[36,52697,36982],{"class":42},[36,52699,47],{"class":46},[36,52701,36987],{"class":42},[36,52703,52704,52706,52708],{"class":38,"line":35063},[36,52705,36992],{"class":42},[36,52707,47],{"class":46},[36,52709,36997],{"class":42},[36,52711,52712,52714,52716,52718,52720,52722,52724,52726],{"class":38,"line":35069},[36,52713,906],{"class":62},[36,52715,92],{"class":42},[36,52717,37006],{"class":50},[36,52719,37009],{"class":42},[36,52721,37012],{"class":50},[36,52723,2934],{"class":42},[36,52725,37017],{"class":50},[36,52727,37020],{"class":42},[2467,52729,52730],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":31,"searchDepth":54,"depth":54,"links":52732},[52733,52734,52735,52736],{"id":32955,"depth":66,"text":32956},{"id":40190,"depth":66,"text":40191},{"id":43621,"depth":66,"text":43622},{"id":47630,"depth":66,"text":47631},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32947,"description":2493},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52743,"title":52744,"body":52745,"description":2493,"extension":2494,"meta":52752,"navigation":69,"path":52753,"seo":52754,"stem":52755,"__hash__":52756},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52746,"toc":52750},[52747],[10,52748,52744],{"id":52749},"_3yolo模型学习",{"title":31,"searchDepth":54,"depth":54,"links":52751},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52744,"description":2493},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52758,"title":52759,"body":52760,"description":52767,"extension":2494,"meta":52768,"navigation":69,"path":52770,"seo":52771,"stem":52772,"__hash__":52773},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52761,"toc":52765},[52762],[19,52763,52764],{},"yolo模型还未补充",{"title":31,"searchDepth":54,"depth":54,"links":52766},[],"深度学习学习",{"category":52769},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52759,"description":52767},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52775,"title":52776,"body":52777,"description":2493,"extension":2494,"meta":52802,"navigation":69,"path":52803,"seo":52804,"stem":52805,"__hash__":52806},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52778,"toc":52800},[52779,52782,52785,52790,52797],[10,52780,52776],{"id":52781},"_1工具",[19,52783,52784],{},"提示错误插件：有问题会提前报错",[19,52786,52787],{},[3879,52788],{"alt":31,"src":52789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52791,52792],{},[2796,52793,52796],{"href":52794,"rel":52795},"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",[26235],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52798,52799],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":54,"depth":54,"links":52801},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52776,"description":2493},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52808,"title":52809,"body":52810,"description":2493,"extension":2494,"meta":55673,"navigation":69,"path":55674,"seo":55675,"stem":55676,"__hash__":55677},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52811,"toc":55624},[52812,52815,52819,52823,52828,52831,52836,52840,52847,52852,52859,52864,52871,52876,52880,52885,52888,52892,52897,52901,52906,52909,52912,52915,52918,52921,52924,52927,52930,52935,52940,52945,52949,52952,52955,52959,52964,52967,52975,52980,52997,53005,53010,53015,53020,53025,53030,53033,53038,53043,53047,53056,53061,53066,53070,53075,53078,53082,53087,53095,53100,53105,53108,53113,53118,53123,53126,53129,53132,53137,53142,53145,53150,53153,53158,53161,53164,53167,53172,53175,53178,53193,53198,53203,53208,53211,53214,53217,53231,53234,53239,53244,53247,53250,53253,53256,53259,53262,53265,53269,53273,53278,53282,53285,53290,53295,53298,53303,53306,53310,53315,53318,53321,53324,53327,53330,53333,53336,53339,53342,53346,53351,53356,53361,53364,53367,53371,53376,53379,53383,53386,53389,53394,53397,53400,53404,53408,53411,53416,53421,53424,53453,53458,53463,53468,53473,53477,53482,53486,53491,53494,53498,53502,53507,53511,53516,53521,53525,53530,53533,53535,53538,53543,53547,53552,53556,53560,53565,53570,53575,53580,53584,53589,53594,53599,53602,53605,53610,53613,53618,53623,53628,53633,53637,54443,54447,54790,54795,54798,54801,54804,54807,54810,54813,54816,54819,54821,54824,54826,54829,54833,54838,54841,54844,54847,54851,54856,54861,54881,54884,54888,54893,54898,54915,54919,54948,54952,54974,54976,55015,55023,55029,55033,55036,55039,55044,55049,55052,55055,55058,55063,55068,55071,55074,55077,55080,55083,55086,55089,55092,55095,55098,55101,55103,55106,55109,55112,55115,55118,55121,55124,55127,55131,55136,55139,55144,55147,55150,55153,55156,55159,55162,55165,55167,55170,55173,55176,55179,55182,55185,55189,55192,55201,55204,55209,55212,55217,55220,55223,55226,55229,55232,55235,55238,55242,55246,55249,55252,55257,55262,55267,55271,55276,55281,55284,55287,55290,55293,55296,55301,55304,55309,55311,55316,55319,55323,55328,55331,55334,55339,55343,55346,55351,55354,55357,55386,55391,55394,55397,55400,55403,55406,55410,55413,55499,55503,55506,55511,55516,55523,55526,55529,55532,55535,55538,55543,55548,55551,55554,55557,55560,55563,55566,55569,55572,55575,55577,55580,55584,55589,55594,55599,55602,55607,55612,55615,55618,55621],[10,52813,52809],{"id":52814},"_2基础语法",[14,52816,52818],{"id":52817},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1752,52820,52822],{"id":52821},"_211-js组成","2.1.1 js组成",[650,52824,52825],{},[653,52826,52827],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52829,52830],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[650,52832,52833],{"start":54},[653,52834,52835],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1752,52837,52839],{"id":52838},"_212-js书写位置","2.1.2 js书写位置",[650,52841,52842],{},[653,52843,52844],{},[667,52845,52846],{},"内部 JavaScript",[19,52848,52849],{},[3879,52850],{"alt":31,"src":52851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[650,52853,52854],{"start":54},[653,52855,52856],{},[667,52857,52858],{},"外部 JavaScript",[19,52860,52861],{},[3879,52862],{"alt":31,"src":52863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[650,52865,52866],{"start":66},[653,52867,52868],{},[667,52869,52870],{},"内联 JavaScript",[19,52872,52873],{},[3879,52874],{"alt":31,"src":52875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1752,52877,52879],{"id":52878},"_213-javascript注释","2.1.3 JavaScript注释",[19,52881,52882],{},[3879,52883],{"alt":31,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52886,52887],{},"alt+shift+a一定要记住！",[1752,52889,52891],{"id":52890},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52893,52894],{},[3879,52895],{"alt":31,"src":52896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1752,52898,52900],{"id":52899},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[650,52902,52903],{},[653,52904,52905],{},"输出语法：",[19,52907,52908],{},"①document.write('要出的内容')",[19,52910,52911],{},"向body内输出内容；",[19,52913,52914],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52916,52917],{},"②alert('要出的内容')",[19,52919,52920],{},"页面弹出警告对话框",[19,52922,52923],{},"③console.log('控制台打印')",[19,52925,52926],{},"控制台输出语法，程序员调试使用",[19,52928,52929],{},"输入log就行，自动生成：",[19,52931,52932],{},[3879,52933],{"alt":31,"src":52934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[650,52936,52937],{"start":54},[653,52938,52939],{},"输入语法：",[19,52941,52942],{},[3879,52943],{"alt":31,"src":52944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1752,52946,52948],{"id":52947},"_2116-字面量","21.1.6 字面量",[19,52950,52951],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52953,52954],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52956,52958],{"id":52957},"_22-变量","2.2 变量",[650,52960,52961],{},[653,52962,52963],{},"变量声明",[19,52965,52966],{},"let 变量名",[3557,52968,52969,52972],{},[653,52970,52971],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[653,52973,52974],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[650,52976,52977],{"start":54},[653,52978,52979],{},"变量赋值",[26,52981,52985],{"className":52982,"code":52983,"language":52984,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,52986,52987,52992],{"__ignoreMap":31},[36,52988,52989],{"class":38,"line":39},[36,52990,52991],{"class":42},"let age\n",[36,52993,52994],{"class":38,"line":54},[36,52995,52996],{"class":42},"age=18\n",[650,52998,52999,53002],{"start":66},[653,53000,53001],{},"连这些（变量的初始化）：let age=18",[653,53003,53004],{},"更新变量",[19,53006,53007],{},[3879,53008],{"alt":31,"src":53009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[650,53011,53012],{"start":86},[653,53013,53014],{},"声明多个变量",[19,53016,53017],{},[3879,53018],{"alt":31,"src":53019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[650,53021,53022],{"start":126},[653,53023,53024],{},"变量命名规则与规范",[19,53026,53027],{},[3879,53028],{"alt":31,"src":53029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53031,53032],{},"遵守小驼峰！",[650,53034,53035],{"start":131},[653,53036,53037],{},"变量拓展-let和var的区别",[19,53039,53040],{},[3879,53041],{"alt":31,"src":53042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53044,53046],{"id":53045},"_23-数组","2.3 数组",[26,53048,53050],{"className":52982,"code":53049,"language":52984,"meta":31,"style":31},"let arr = []\n",[33,53051,53052],{"__ignoreMap":31},[36,53053,53054],{"class":38,"line":39},[36,53055,53049],{"class":42},[19,53057,53058],{},[3879,53059],{"alt":31,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,53062,53063],{},[3879,53064],{"alt":31,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53067,53069],{"id":53068},"_24-常量","2.4 常量",[19,53071,53072],{},[3879,53073],{"alt":31,"src":53074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,53076,53077],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53079,53081],{"id":53080},"_25-数据类型","2.5 数据类型",[19,53083,53084],{},[3879,53085],{"alt":31,"src":53086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[650,53088,53089,53092],{},[653,53090,53091],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[653,53093,53094],{},"算数运算符：",[19,53096,53097],{},[3879,53098],{"alt":31,"src":53099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[650,53101,53102],{"start":66},[653,53103,53104],{},"数字类型（Number）",[19,53106,53107],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,53109,53110],{},[3879,53111],{"alt":31,"src":53112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[650,53114,53115],{"start":73},[653,53116,53117],{},"字符串类型（string）",[19,53119,53120],{},[3879,53121],{"alt":31,"src":53122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53124,53125],{},"反引号也是可以使用的",[19,53127,53128],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53130,53131],{},"例如：document.write(\"我今年\"+age+\"岁\")",[650,53133,53134],{"start":86},[653,53135,53136],{},"模板字符串",[19,53138,53139],{},[3879,53140],{"alt":31,"src":53141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53143,53144],{},"类似于python的字符串格式化",[650,53146,53147],{"start":126},[653,53148,53149],{},"布尔类型",[19,53151,53152],{},"true 和 false",[650,53154,53155],{"start":131},[653,53156,53157],{},"未定义类型（underfined）",[19,53159,53160],{},"表示没有赋值",[19,53162,53163],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53165,53166],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[650,53168,53169],{"start":225},[653,53170,53171],{},"null（空类型）",[19,53173,53174],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53176,53177],{},"赋值了，但是内容为空",[26,53179,53181],{"className":52982,"code":53180,"language":52984,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,53182,53183,53188],{"__ignoreMap":31},[36,53184,53185],{"class":38,"line":39},[36,53186,53187],{"class":42},"typeof null\n",[36,53189,53190],{"class":38,"line":54},[36,53191,53192],{"class":42},"输出的是'object'，是一个对象数据类型\n",[650,53194,53195],{"start":235},[653,53196,53197],{},"控制台检测数据类型",[19,53199,53200],{},[3879,53201],{"alt":31,"src":53202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[650,53204,53205],{"start":377},[653,53206,53207],{},"类型转换",[19,53209,53210],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53212,53213],{},"转换方式：隐式转换和显示转换",[19,53215,53216],{},"①隐式转换",[3557,53218,53219,53222,53225,53228],{},[653,53220,53221],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[653,53223,53224],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[653,53226,53227],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[653,53229,53230],{},"任何数据和字符串相加结果都是字符串",[19,53232,53233],{},"②显示转换",[19,53235,53236],{},[3879,53237],{"alt":31,"src":53238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53240,53241],{},[3879,53242],{"alt":31,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53245,53246],{},"在输入的时候要用好隐式转换，简单写起来",[19,53248,53249],{},"let num = +prompt(’请输入数字：‘)",[19,53251,53252],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53254,53255],{},"console.log(parseInt('12.333px'))",[19,53257,53258],{},"输出为：12",[19,53260,53261],{},"console.log(parseInt('a'a'a12.333px'))",[19,53263,53264],{},"输出：NaN",[14,53266,53268],{"id":53267},"_26-运算符","2.6 运算符",[1752,53270,53272],{"id":53271},"_261-赋值运算符","2.6.1 赋值运算符",[19,53274,53275],{},[3879,53276],{"alt":31,"src":53277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1752,53279,53281],{"id":53280},"_262-一元运算符","2.6.2 一元运算符",[19,53283,53284],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53286,53287],{},[3879,53288],{"alt":31,"src":53289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53291,53292],{},[3879,53293],{"alt":31,"src":53294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53296,53297],{},"两者的区别：",[19,53299,53300],{},[3879,53301],{"alt":31,"src":53302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53304,53305],{},"前置先自加；后置后加，代码执行完之后再加",[1752,53307,53309],{"id":53308},"_263-比较运算符","2.6.3 比较运算符",[19,53311,53312],{},[3879,53313],{"alt":31,"src":53314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53316,53317],{},"比较运算符也有隐式转换",[19,53319,53320],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53322,53323],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53325,53326],{},"要使用三等，开发的时候",[19,53328,53329],{},"NaN不等于任何人，包括它自己",[19,53331,53332],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53334,53335],{},"7\u002F10=0.7",[19,53337,53338],{},"最后：0.5+0.2=0.7",[19,53340,53341],{},"字符串比较，比较的是字符对应的ASCII码",[1752,53343,53345],{"id":53344},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53347,53348],{},[3879,53349],{"alt":31,"src":53350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53352,53353],{},[3879,53354],{"alt":31,"src":53355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53357,53358],{},[3879,53359],{"alt":31,"src":53360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53362,53363],{},"上述题目选D",[19,53365,53366],{},"与真2假1；或真1假2",[1752,53368,53370],{"id":53369},"_265-运算符优先级","2.6.5 运算符优先级",[19,53372,53373],{},[3879,53374],{"alt":31,"src":53375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53377,53378],{},"先算逻辑与，后算逻辑或",[14,53380,53382],{"id":53381},"_27-语句","2.7 语句",[19,53384,53385],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53387,53388],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53390,53391],{},[3879,53392],{"alt":31,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53395,53396],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53398,53399],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1752,53401,53403],{"id":53402},"_271-分支语句","2.7.1 分支语句",[24368,53405,53407],{"id":53406},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53409,53410],{},"if语句单行简单的话，可以不写{}，写在一行就行",[650,53412,53413],{},[653,53414,53415],{},"单分支语句",[19,53417,53418],{},[3879,53419],{"alt":31,"src":53420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53422,53423],{},"除了0，所有数字都为真",[26,53425,53427],{"className":52982,"code":53426,"language":52984,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,53428,53429,53434,53439,53444,53448],{"__ignoreMap":31},[36,53430,53431],{"class":38,"line":39},[36,53432,53433],{"class":42},"if（0) {\n",[36,53435,53436],{"class":38,"line":54},[36,53437,53438],{"class":42},"    let a=1\n",[36,53440,53441],{"class":38,"line":66},[36,53442,53443],{"class":42},"    alert(typeof a)\n",[36,53445,53446],{"class":38,"line":73},[36,53447,3982],{"class":42},[36,53449,53450],{"class":38,"line":86},[36,53451,53452],{"class":42},"不输出，括号为假\n",[650,53454,53455],{"start":54},[653,53456,53457],{},"双分支语句",[19,53459,53460],{},[3879,53461],{"alt":31,"src":53462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[650,53464,53465],{"start":66},[653,53466,53467],{},"多分支语句",[19,53469,53470],{},[3879,53471],{"alt":31,"src":53472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24368,53474,53476],{"id":53475},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53478,53479],{},[3879,53480],{"alt":31,"src":53481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24368,53483,53485],{"id":53484},"_2713-switch语句","2.7.1.3 switch语句",[19,53487,53488],{},[3879,53489],{"alt":31,"src":53490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53492,53493],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1752,53495,53497],{"id":53496},"_272-循环语句","2.7.2 循环语句",[24368,53499,53501],{"id":53500},"_2721-断点演示","2.7.2.1 断点演示",[19,53503,53504],{},[3879,53505],{"alt":31,"src":53506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24368,53508,53510],{"id":53509},"_2722-while循环","2.7.2.2 while循环",[19,53512,53513],{},[3879,53514],{"alt":31,"src":53515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53517,53518],{},[3879,53519],{"alt":31,"src":53520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24368,53522,53524],{"id":53523},"_2723-for循环","2.7.2.3 for循环",[19,53526,53527],{},[3879,53528],{"alt":31,"src":53529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53531,53532],{},"for(;;) {",[19,53534,107],{},[19,53536,53537],{},"表示无限循环",[19,53539,53540],{},[3879,53541],{"alt":31,"src":53542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24368,53544,53546],{"id":53545},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53548,53549],{},[3879,53550],{"alt":31,"src":53551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53553,53555],{"id":53554},"_28-数组","2.8 数组",[1752,53557,53559],{"id":53558},"_281-基础认识","2.8.1 基础认识",[19,53561,53562],{},[3879,53563],{"alt":31,"src":53564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53566,53567],{},[3879,53568],{"alt":31,"src":53569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53571,53572],{},[3879,53573],{"alt":31,"src":53574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53576,53577],{},[3879,53578],{"alt":31,"src":53579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1752,53581,53583],{"id":53582},"_282-操作数组","2.8.2 操作数组",[19,53585,53586],{},[3879,53587],{"alt":31,"src":53588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[650,53590,53591],{},[653,53592,53593],{},"添加元素",[19,53595,53596],{},[3879,53597],{"alt":31,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53600,53601],{},"console.log(arr.push('green'))",[19,53603,53604],{},"输出结果：为新数组的长度",[19,53606,53607],{},[3879,53608],{"alt":31,"src":53609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53611,53612],{},"push用的非常多，一定要记住",[650,53614,53615],{},[653,53616,53617],{},"删除元素",[19,53619,53620],{},[3879,53621],{"alt":31,"src":53622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53624,53625],{},[3879,53626],{"alt":31,"src":53627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53629,53630],{},[3879,53631],{"alt":31,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1752,53634,53636],{"id":53635},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,53638,53640],{"className":52982,"code":53639,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,53641,53642,53657,53673,53677,53686,53704,53728,53750,53764,53772,53779,53790,53801,53805,53809,53816,53828,53843,53856,53875,53892,53907,53919,53931,53943,53947,53951,53962,53972,53984,53996,54008,54019,54023,54027,54039,54043,54057,54061,54065,54076,54090,54102,54116,54120,54129,54138,54142,54151,54155,54164,54169,54174,54187,54215,54220,54225,54250,54255,54259,54264,54269,54284,54288,54293,54323,54335,54351,54367,54381,54386,54393,54397,54402,54415,54423,54431,54435],{"__ignoreMap":31},[36,53643,53644,53647,53651,53654],{"class":38,"line":39},[36,53645,53646],{"class":42},"\u003C!",[36,53648,53650],{"class":53649},"s9eBZ","DOCTYPE",[36,53652,53653],{"class":79}," html",[36,53655,53656],{"class":42},">\n",[36,53658,53659,53661,53663,53666,53668,53671],{"class":38,"line":54},[36,53660,3463],{"class":42},[36,53662,52984],{"class":53649},[36,53664,53665],{"class":79}," lang",[36,53667,47],{"class":42},[36,53669,53670],{"class":50},"\"en\"",[36,53672,53656],{"class":42},[36,53674,53675],{"class":38,"line":66},[36,53676,70],{"emptyLinePlaceholder":69},[36,53678,53679,53681,53684],{"class":38,"line":73},[36,53680,3463],{"class":42},[36,53682,53683],{"class":53649},"head",[36,53685,53656],{"class":42},[36,53687,53688,53691,53694,53697,53699,53702],{"class":38,"line":86},[36,53689,53690],{"class":42},"    \u003C",[36,53692,53693],{"class":53649},"meta",[36,53695,53696],{"class":79}," charset",[36,53698,47],{"class":42},[36,53700,53701],{"class":50},"\"UTF-8\"",[36,53703,53656],{"class":42},[36,53705,53706,53708,53710,53713,53715,53718,53721,53723,53726],{"class":38,"line":126},[36,53707,53690],{"class":42},[36,53709,53693],{"class":53649},[36,53711,53712],{"class":79}," http-equiv",[36,53714,47],{"class":42},[36,53716,53717],{"class":50},"\"X-UA-Compatible\"",[36,53719,53720],{"class":79}," content",[36,53722,47],{"class":42},[36,53724,53725],{"class":50},"\"IE=edge\"",[36,53727,53656],{"class":42},[36,53729,53730,53732,53734,53736,53738,53741,53743,53745,53748],{"class":38,"line":131},[36,53731,53690],{"class":42},[36,53733,53693],{"class":53649},[36,53735,17295],{"class":79},[36,53737,47],{"class":42},[36,53739,53740],{"class":50},"\"viewport\"",[36,53742,53720],{"class":79},[36,53744,47],{"class":42},[36,53746,53747],{"class":50},"\"width=device-width, initial-scale=1.0\"",[36,53749,53656],{"class":42},[36,53751,53752,53754,53757,53760,53762],{"class":38,"line":225},[36,53753,53690],{"class":42},[36,53755,53756],{"class":53649},"title",[36,53758,53759],{"class":42},">Document\u003C\u002F",[36,53761,53756],{"class":53649},[36,53763,53656],{"class":42},[36,53765,53766,53768,53770],{"class":38,"line":235},[36,53767,53690],{"class":42},[36,53769,2467],{"class":53649},[36,53771,53656],{"class":42},[36,53773,53774,53777],{"class":38,"line":377},[36,53775,53776],{"class":53649},"        *",[36,53778,2150],{"class":42},[36,53780,53781,53784,53786,53788],{"class":38,"line":617},[36,53782,53783],{"class":62},"            margin",[36,53785,2158],{"class":42},[36,53787,2751],{"class":62},[36,53789,3711],{"class":42},[36,53791,53792,53795,53797,53799],{"class":38,"line":643},[36,53793,53794],{"class":62},"            padding",[36,53796,2158],{"class":42},[36,53798,2751],{"class":62},[36,53800,3711],{"class":42},[36,53802,53803],{"class":38,"line":921},[36,53804,2204],{"class":42},[36,53806,53807],{"class":38,"line":934},[36,53808,70],{"emptyLinePlaceholder":69},[36,53810,53811,53814],{"class":38,"line":939},[36,53812,53813],{"class":79},"        .box",[36,53815,2150],{"class":42},[36,53817,53818,53821,53823,53826],{"class":38,"line":949},[36,53819,53820],{"class":62},"            display",[36,53822,2158],{"class":42},[36,53824,53825],{"class":62},"flex",[36,53827,3711],{"class":42},[36,53829,53830,53833,53835,53838,53841],{"class":38,"line":962},[36,53831,53832],{"class":62},"            width",[36,53834,2158],{"class":42},[36,53836,53837],{"class":62},"700",[36,53839,53840],{"class":46},"px",[36,53842,3711],{"class":42},[36,53844,53845,53848,53850,53852,53854],{"class":38,"line":974},[36,53846,53847],{"class":62},"            height",[36,53849,2158],{"class":42},[36,53851,6357],{"class":62},[36,53853,53840],{"class":46},[36,53855,3711],{"class":42},[36,53857,53858,53861,53863,53865,53867,53870,53873],{"class":38,"line":979},[36,53859,53860],{"class":62},"            border-left",[36,53862,2158],{"class":42},[36,53864,1906],{"class":62},[36,53866,53840],{"class":46},[36,53868,53869],{"class":62}," solid",[36,53871,53872],{"class":62}," pink",[36,53874,3711],{"class":42},[36,53876,53877,53880,53882,53884,53886,53888,53890],{"class":38,"line":994},[36,53878,53879],{"class":62},"            border-bottom",[36,53881,2158],{"class":42},[36,53883,1906],{"class":62},[36,53885,53840],{"class":46},[36,53887,53869],{"class":62},[36,53889,53872],{"class":62},[36,53891,3711],{"class":42},[36,53893,53894,53896,53898,53900,53902,53905],{"class":38,"line":1006},[36,53895,53783],{"class":62},[36,53897,2158],{"class":42},[36,53899,3210],{"class":62},[36,53901,53840],{"class":46},[36,53903,53904],{"class":62}," auto",[36,53906,3711],{"class":42},[36,53908,53909,53912,53914,53917],{"class":38,"line":1011},[36,53910,53911],{"class":62},"            justify-content",[36,53913,2158],{"class":42},[36,53915,53916],{"class":62},"space-around",[36,53918,3711],{"class":42},[36,53920,53921,53924,53926,53929],{"class":38,"line":1023},[36,53922,53923],{"class":62},"            align-items",[36,53925,2158],{"class":42},[36,53927,53928],{"class":62},"flex-end",[36,53930,3711],{"class":42},[36,53932,53933,53936,53938,53941],{"class":38,"line":1028},[36,53934,53935],{"class":62},"            text-align",[36,53937,2158],{"class":42},[36,53939,53940],{"class":62},"center",[36,53942,3711],{"class":42},[36,53944,53945],{"class":38,"line":1033},[36,53946,2204],{"class":42},[36,53948,53949],{"class":38,"line":1053},[36,53950,70],{"emptyLinePlaceholder":69},[36,53952,53953,53955,53957,53960],{"class":38,"line":1064},[36,53954,53813],{"class":79},[36,53956,986],{"class":46},[36,53958,53959],{"class":53649},"div",[36,53961,2150],{"class":42},[36,53963,53964,53966,53968,53970],{"class":38,"line":1075},[36,53965,53820],{"class":62},[36,53967,2158],{"class":42},[36,53969,53825],{"class":62},[36,53971,3711],{"class":42},[36,53973,53974,53976,53978,53980,53982],{"class":38,"line":2291},[36,53975,53832],{"class":62},[36,53977,2158],{"class":42},[36,53979,3210],{"class":62},[36,53981,53840],{"class":46},[36,53983,3711],{"class":42},[36,53985,53986,53989,53991,53994],{"class":38,"line":2329},[36,53987,53988],{"class":62},"            background-color",[36,53990,2158],{"class":42},[36,53992,53993],{"class":62},"pink",[36,53995,3711],{"class":42},[36,53997,53998,54001,54003,54006],{"class":38,"line":2334},[36,53999,54000],{"class":62},"            flex-direction",[36,54002,2158],{"class":42},[36,54004,54005],{"class":62},"column",[36,54007,3711],{"class":42},[36,54009,54010,54012,54014,54017],{"class":38,"line":2339},[36,54011,53911],{"class":62},[36,54013,2158],{"class":42},[36,54015,54016],{"class":62},"space-between",[36,54018,3711],{"class":42},[36,54020,54021],{"class":38,"line":2365},[36,54022,2204],{"class":42},[36,54024,54025],{"class":38,"line":2373},[36,54026,70],{"emptyLinePlaceholder":69},[36,54028,54029,54031,54034,54037],{"class":38,"line":5001},[36,54030,53813],{"class":79},[36,54032,54033],{"class":53649}," div",[36,54035,54036],{"class":53649}," span",[36,54038,2150],{"class":42},[36,54040,54041],{"class":38,"line":5006},[36,54042,70],{"emptyLinePlaceholder":69},[36,54044,54045,54048,54050,54053,54055],{"class":38,"line":10328},[36,54046,54047],{"class":62},"            margin-top",[36,54049,2158],{"class":42},[36,54051,54052],{"class":62},"-20",[36,54054,53840],{"class":46},[36,54056,3711],{"class":42},[36,54058,54059],{"class":38,"line":10352},[36,54060,2204],{"class":42},[36,54062,54063],{"class":38,"line":10357},[36,54064,70],{"emptyLinePlaceholder":69},[36,54066,54067,54069,54071,54074],{"class":38,"line":10363},[36,54068,53813],{"class":79},[36,54070,54033],{"class":53649},[36,54072,54073],{"class":53649}," h4",[36,54075,2150],{"class":42},[36,54077,54078,54081,54083,54086,54088],{"class":38,"line":10390},[36,54079,54080],{"class":62},"            margin-bottom",[36,54082,2158],{"class":42},[36,54084,54085],{"class":62},"-35",[36,54087,53840],{"class":46},[36,54089,3711],{"class":42},[36,54091,54092,54094,54096,54098,54100],{"class":38,"line":10395},[36,54093,53832],{"class":62},[36,54095,2158],{"class":42},[36,54097,2912],{"class":62},[36,54099,53840],{"class":46},[36,54101,3711],{"class":42},[36,54103,54104,54107,54109,54112,54114],{"class":38,"line":10401},[36,54105,54106],{"class":62},"            margin-left",[36,54108,2158],{"class":42},[36,54110,54111],{"class":62},"-10",[36,54113,53840],{"class":46},[36,54115,3711],{"class":42},[36,54117,54118],{"class":38,"line":10413},[36,54119,2204],{"class":42},[36,54121,54122,54125,54127],{"class":38,"line":10425},[36,54123,54124],{"class":42},"    \u003C\u002F",[36,54126,2467],{"class":53649},[36,54128,53656],{"class":42},[36,54130,54131,54134,54136],{"class":38,"line":10437},[36,54132,54133],{"class":42},"\u003C\u002F",[36,54135,53683],{"class":53649},[36,54137,53656],{"class":42},[36,54139,54140],{"class":38,"line":12095},[36,54141,70],{"emptyLinePlaceholder":69},[36,54143,54144,54146,54149],{"class":38,"line":12120},[36,54145,3463],{"class":42},[36,54147,54148],{"class":53649},"body",[36,54150,53656],{"class":42},[36,54152,54153],{"class":38,"line":12143},[36,54154,70],{"emptyLinePlaceholder":69},[36,54156,54157,54159,54162],{"class":38,"line":12167},[36,54158,53690],{"class":42},[36,54160,54161],{"class":53649},"script",[36,54163,53656],{"class":42},[36,54165,54166],{"class":38,"line":12172},[36,54167,54168],{"class":2621},"        \u002F\u002F 1. 四次弹框效果\n",[36,54170,54171],{"class":38,"line":12177},[36,54172,54173],{"class":2621},"        \u002F\u002F 声明一个新的数组\n",[36,54175,54176,54179,54182,54184],{"class":38,"line":12182},[36,54177,54178],{"class":46},"        let",[36,54180,54181],{"class":42}," arr ",[36,54183,47],{"class":46},[36,54185,54186],{"class":42}," []\n",[36,54188,54189,54191,54193,54196,54198,54200,54202,54204,54206,54209,54211,54213],{"class":38,"line":12191},[36,54190,5788],{"class":46},[36,54192,4066],{"class":42},[36,54194,54195],{"class":46},"let",[36,54197,11818],{"class":42},[36,54199,47],{"class":46},[36,54201,27489],{"class":62},[36,54203,11825],{"class":42},[36,54205,896],{"class":46},[36,54207,54208],{"class":62}," 4",[36,54210,5599],{"class":42},[36,54212,4685],{"class":46},[36,54214,14819],{"class":42},[36,54216,54217],{"class":38,"line":12196},[36,54218,54219],{"class":2621},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,54221,54222],{"class":38,"line":12202},[36,54223,54224],{"class":2621},"            \u002F\u002F arr.push(num)\n",[36,54226,54227,54230,54233,54235,54238,54240,54243,54245,54248],{"class":38,"line":12223},[36,54228,54229],{"class":42},"            arr.",[36,54231,54232],{"class":79},"push",[36,54234,92],{"class":42},[36,54236,54237],{"class":79},"prompt",[36,54239,92],{"class":42},[36,54241,54242],{"class":50},"`请输入第${",[36,54244,2997],{"class":42},[36,54246,54247],{"class":50},"}季度的数据:`",[36,54249,1914],{"class":42},[36,54251,54252],{"class":38,"line":12229},[36,54253,54254],{"class":2621},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,54256,54257],{"class":38,"line":12243},[36,54258,2204],{"class":42},[36,54260,54261],{"class":38,"line":12249},[36,54262,54263],{"class":2621},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,54265,54266],{"class":38,"line":12276},[36,54267,54268],{"class":2621},"        \u002F\u002F 盒子开头\n",[36,54270,54271,54274,54277,54279,54282],{"class":38,"line":12285},[36,54272,54273],{"class":42},"        document.",[36,54275,54276],{"class":79},"write",[36,54278,92],{"class":42},[36,54280,54281],{"class":50},"` \u003Cdiv class=\"box\">`",[36,54283,123],{"class":42},[36,54285,54286],{"class":38,"line":12291},[36,54287,70],{"emptyLinePlaceholder":69},[36,54289,54290],{"class":38,"line":12299},[36,54291,54292],{"class":2621},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,54294,54295,54297,54299,54301,54303,54305,54307,54309,54311,54314,54317,54319,54321],{"class":38,"line":12304},[36,54296,5788],{"class":46},[36,54298,4066],{"class":42},[36,54300,54195],{"class":46},[36,54302,11818],{"class":42},[36,54304,47],{"class":46},[36,54306,899],{"class":62},[36,54308,11825],{"class":42},[36,54310,3463],{"class":46},[36,54312,54313],{"class":42}," arr.",[36,54315,54316],{"class":62},"length",[36,54318,5599],{"class":42},[36,54320,4685],{"class":46},[36,54322,14819],{"class":42},[36,54324,54325,54328,54330,54332],{"class":38,"line":18977},[36,54326,54327],{"class":42},"            document.",[36,54329,54276],{"class":79},[36,54331,92],{"class":42},[36,54333,54334],{"class":50},"`\n",[36,54336,54337,54340,54342,54344,54346,54348],{"class":38,"line":18983},[36,54338,54339],{"class":50},"              \u003Cdiv style=\"height: ${",[36,54341,6264],{"class":42},[36,54343,3444],{"class":50},[36,54345,2997],{"class":42},[36,54347,3493],{"class":50},[36,54349,54350],{"class":50},"}px;\">\n",[36,54352,54353,54356,54358,54360,54362,54364],{"class":38,"line":19006},[36,54354,54355],{"class":50},"                \u003Cspan>${",[36,54357,6264],{"class":42},[36,54359,3444],{"class":50},[36,54361,2997],{"class":42},[36,54363,3493],{"class":50},[36,54365,54366],{"class":50},"}\u003C\u002Fspan>\n",[36,54368,54369,54372,54374,54376,54378],{"class":38,"line":19012},[36,54370,54371],{"class":50},"                \u003Ch4>第${",[36,54373,2997],{"class":42},[36,54375,47915],{"class":46},[36,54377,27489],{"class":62},[36,54379,54380],{"class":50},"}季度\u003C\u002Fh4>\n",[36,54382,54383],{"class":38,"line":19035},[36,54384,54385],{"class":50},"              \u003C\u002Fdiv>          \n",[36,54387,54388,54391],{"class":38,"line":19049},[36,54389,54390],{"class":50},"            `",[36,54392,123],{"class":42},[36,54394,54395],{"class":38,"line":19069},[36,54396,2204],{"class":42},[36,54398,54399],{"class":38,"line":19075},[36,54400,54401],{"class":2621},"        \u002F\u002F 盒子结尾\n",[36,54403,54404,54406,54408,54410,54413],{"class":38,"line":19086},[36,54405,54273],{"class":42},[36,54407,54276],{"class":79},[36,54409,92],{"class":42},[36,54411,54412],{"class":50},"` \u003C\u002Fdiv>`",[36,54414,123],{"class":42},[36,54416,54417,54419,54421],{"class":38,"line":19109},[36,54418,54124],{"class":42},[36,54420,54161],{"class":53649},[36,54422,53656],{"class":42},[36,54424,54425,54427,54429],{"class":38,"line":19131},[36,54426,54133],{"class":42},[36,54428,54148],{"class":53649},[36,54430,53656],{"class":42},[36,54432,54433],{"class":38,"line":19136},[36,54434,70],{"emptyLinePlaceholder":69},[36,54436,54437,54439,54441],{"class":38,"line":19142},[36,54438,54133],{"class":42},[36,54440,52984],{"class":53649},[36,54442,53656],{"class":42},[1752,54444,54446],{"id":54445},"_284-冒泡排序","2.8.4 冒泡排序",[26,54448,54450],{"className":52982,"code":54449,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,54451,54452,54462,54476,54480,54488,54503,54523,54535,54543,54547,54555,54563,54595,54628,54665,54670,54689,54694,54707,54722,54738,54742,54747,54751,54761,54770,54778,54782],{"__ignoreMap":31},[36,54453,54454,54456,54458,54460],{"class":38,"line":39},[36,54455,53646],{"class":42},[36,54457,53650],{"class":53649},[36,54459,53653],{"class":79},[36,54461,53656],{"class":42},[36,54463,54464,54466,54468,54470,54472,54474],{"class":38,"line":54},[36,54465,3463],{"class":42},[36,54467,52984],{"class":53649},[36,54469,53665],{"class":79},[36,54471,47],{"class":42},[36,54473,53670],{"class":50},[36,54475,53656],{"class":42},[36,54477,54478],{"class":38,"line":66},[36,54479,70],{"emptyLinePlaceholder":69},[36,54481,54482,54484,54486],{"class":38,"line":73},[36,54483,3463],{"class":42},[36,54485,53683],{"class":53649},[36,54487,53656],{"class":42},[36,54489,54490,54493,54495,54497,54499,54501],{"class":38,"line":86},[36,54491,54492],{"class":42},"  \u003C",[36,54494,53693],{"class":53649},[36,54496,53696],{"class":79},[36,54498,47],{"class":42},[36,54500,53701],{"class":50},[36,54502,53656],{"class":42},[36,54504,54505,54507,54509,54511,54513,54515,54517,54519,54521],{"class":38,"line":126},[36,54506,54492],{"class":42},[36,54508,53693],{"class":53649},[36,54510,17295],{"class":79},[36,54512,47],{"class":42},[36,54514,53740],{"class":50},[36,54516,53720],{"class":79},[36,54518,47],{"class":42},[36,54520,53747],{"class":50},[36,54522,53656],{"class":42},[36,54524,54525,54527,54529,54531,54533],{"class":38,"line":131},[36,54526,54492],{"class":42},[36,54528,53756],{"class":53649},[36,54530,53759],{"class":42},[36,54532,53756],{"class":53649},[36,54534,53656],{"class":42},[36,54536,54537,54539,54541],{"class":38,"line":225},[36,54538,54133],{"class":42},[36,54540,53683],{"class":53649},[36,54542,53656],{"class":42},[36,54544,54545],{"class":38,"line":235},[36,54546,70],{"emptyLinePlaceholder":69},[36,54548,54549,54551,54553],{"class":38,"line":377},[36,54550,3463],{"class":42},[36,54552,54148],{"class":53649},[36,54554,53656],{"class":42},[36,54556,54557,54559,54561],{"class":38,"line":617},[36,54558,54492],{"class":42},[36,54560,54161],{"class":53649},[36,54562,53656],{"class":42},[36,54564,54565,54568,54570,54572,54575,54577,54579,54581,54583,54585,54587,54589,54591,54593],{"class":38,"line":643},[36,54566,54567],{"class":46},"    let",[36,54569,54181],{"class":42},[36,54571,47],{"class":46},[36,54573,54574],{"class":42}," [",[36,54576,2875],{"class":62},[36,54578,630],{"class":42},[36,54580,2850],{"class":62},[36,54582,630],{"class":42},[36,54584,2634],{"class":62},[36,54586,630],{"class":42},[36,54588,1911],{"class":62},[36,54590,630],{"class":42},[36,54592,1906],{"class":62},[36,54594,35598],{"class":42},[36,54596,54597,54599,54601,54603,54605,54607,54609,54611,54613,54615,54617,54620,54622,54624,54626],{"class":38,"line":921},[36,54598,5586],{"class":46},[36,54600,4066],{"class":42},[36,54602,54195],{"class":46},[36,54604,11818],{"class":42},[36,54606,47],{"class":46},[36,54608,899],{"class":62},[36,54610,11825],{"class":42},[36,54612,3463],{"class":46},[36,54614,54313],{"class":42},[36,54616,54316],{"class":62},[36,54618,54619],{"class":46}," -",[36,54621,27489],{"class":62},[36,54623,5599],{"class":42},[36,54625,4685],{"class":46},[36,54627,14819],{"class":42},[36,54629,54630,54633,54635,54637,54639,54641,54643,54645,54647,54649,54651,54653,54655,54657,54659,54661,54663],{"class":38,"line":934},[36,54631,54632],{"class":46},"      for",[36,54634,4066],{"class":42},[36,54636,54195],{"class":46},[36,54638,11879],{"class":42},[36,54640,47],{"class":46},[36,54642,899],{"class":62},[36,54644,11886],{"class":42},[36,54646,3463],{"class":46},[36,54648,54313],{"class":42},[36,54650,54316],{"class":62},[36,54652,54619],{"class":46},[36,54654,11818],{"class":42},[36,54656,3087],{"class":46},[36,54658,27489],{"class":62},[36,54660,11893],{"class":42},[36,54662,4685],{"class":46},[36,54664,14819],{"class":42},[36,54666,54667],{"class":38,"line":939},[36,54668,54669],{"class":2621},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,54671,54672,54674,54677,54679,54682,54684,54686],{"class":38,"line":949},[36,54673,890],{"class":46},[36,54675,54676],{"class":42}," (arr[j] ",[36,54678,986],{"class":46},[36,54680,54681],{"class":42}," arr[j ",[36,54683,1885],{"class":46},[36,54685,27489],{"class":62},[36,54687,54688],{"class":42},"]) {\n",[36,54690,54691],{"class":38,"line":962},[36,54692,54693],{"class":2621},"          \u002F\u002F 交换两个变量\n",[36,54695,54696,54699,54702,54704],{"class":38,"line":974},[36,54697,54698],{"class":46},"          let",[36,54700,54701],{"class":42}," tmp ",[36,54703,47],{"class":46},[36,54705,54706],{"class":42}," arr[j]\n",[36,54708,54709,54712,54714,54716,54718,54720],{"class":38,"line":979},[36,54710,54711],{"class":42},"          arr[j] ",[36,54713,47],{"class":46},[36,54715,54681],{"class":42},[36,54717,1885],{"class":46},[36,54719,27489],{"class":62},[36,54721,35598],{"class":42},[36,54723,54724,54727,54729,54731,54733,54735],{"class":38,"line":994},[36,54725,54726],{"class":42},"          arr[j ",[36,54728,1885],{"class":46},[36,54730,27489],{"class":62},[36,54732,6826],{"class":42},[36,54734,47],{"class":46},[36,54736,54737],{"class":42}," tmp\n",[36,54739,54740],{"class":38,"line":1006},[36,54741,2204],{"class":42},[36,54743,54744],{"class":38,"line":1011},[36,54745,54746],{"class":42},"      }\n",[36,54748,54749],{"class":38,"line":1023},[36,54750,4580],{"class":42},[36,54752,54753,54756,54758],{"class":38,"line":1028},[36,54754,54755],{"class":42},"    document.",[36,54757,54276],{"class":79},[36,54759,54760],{"class":42},"(arr)\n",[36,54762,54763,54766,54768],{"class":38,"line":1033},[36,54764,54765],{"class":42},"  \u003C\u002F",[36,54767,54161],{"class":53649},[36,54769,53656],{"class":42},[36,54771,54772,54774,54776],{"class":38,"line":1053},[36,54773,54133],{"class":42},[36,54775,54148],{"class":53649},[36,54777,53656],{"class":42},[36,54779,54780],{"class":38,"line":1064},[36,54781,70],{"emptyLinePlaceholder":69},[36,54783,54784,54786,54788],{"class":38,"line":1075},[36,54785,54133],{"class":42},[36,54787,52984],{"class":53649},[36,54789,53656],{"class":42},[19,54791,54792],{},[3879,54793],{"alt":31,"src":54794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54796,54797],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54799,54800],{},"let arr = [4, 2, 5, 1, 3]",[19,54802,54803],{},"\u002F\u002F 1.升序排列写法",[19,54805,54806],{},"arr.sort(function (a, b) {",[19,54808,54809],{},"return a - b",[19,54811,54812],{},"})",[19,54814,54815],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54817,54818],{},"\u002F\u002F 降序排列写法",[19,54820,54806],{},[19,54822,54823],{},"return b - a",[19,54825,54812],{},[19,54827,54828],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54830,54832],{"id":54831},"_29-函数","2.9 函数",[19,54834,54835],{},[3879,54836],{"alt":31,"src":54837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54839,54840],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54842,54843],{},"函数的声明用function",[19,54845,54846],{},"函数里边可以嵌套函数",[1752,54848,54850],{"id":54849},"_291-函数传参","2.9.1 函数传参",[19,54852,54853],{},[3879,54854],{"alt":31,"src":54855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54857,54858],{},[3879,54859],{"alt":31,"src":54860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3557,54862,54863,54866,54869,54872,54875,54878],{},[653,54864,54865],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[653,54867,54868],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[653,54870,54871],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[653,54873,54874],{},"开发中尽量保持形参和实参个数一致",[653,54876,54877],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[653,54879,54880],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54882,54883],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1752,54885,54887],{"id":54886},"_292-函数的返回值","2.9.2 函数的返回值",[19,54889,54890],{},[3879,54891],{"alt":31,"src":54892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54894,54895],{},[3879,54896],{"alt":31,"src":54897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3557,54899,54900,54903,54906,54909,54912],{},[653,54901,54902],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[653,54904,54905],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[653,54907,54908],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[653,54910,54911],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[653,54913,54914],{},"断点调试:进入函数内部看执行过程F11",[1752,54916,54918],{"id":54917},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,54920,54922],{"className":52982,"code":54921,"language":52984,"meta":31,"style":31},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[33,54923,54924,54929,54934,54938,54943],{"__ignoreMap":31},[36,54925,54926],{"class":38,"line":39},[36,54927,54928],{"class":42},"    function fn(a, b) {\n",[36,54930,54931],{"class":38,"line":54},[36,54932,54933],{"class":42},"      console.log(a + b);\n",[36,54935,54936],{"class":38,"line":66},[36,54937,4580],{"class":42},[36,54939,54940],{"class":38,"line":73},[36,54941,54942],{"class":42},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,54944,54945],{"class":38,"line":86},[36,54946,54947],{"class":42},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1752,54949,54951],{"id":54950},"_294-作用域","2.9.4 作用域",[3557,54953,54954,54960,54965,54968,54971],{},[653,54955,54956,54957],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[667,54958,54959],{},"作用域",[653,54961,54962],{},[667,54963,54964],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[653,54966,54967],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[653,54969,54970],{},"函数内部可以直接所使用全局变量",[653,54972,54973],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54975,17010],{},[26,54977,54979],{"className":52982,"code":54978,"language":52984,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,54980,54981,54986,54991,54995,55000,55005,55010],{"__ignoreMap":31},[36,54982,54983],{"class":38,"line":39},[36,54984,54985],{"class":42},"    function fun() {\n",[36,54987,54988],{"class":38,"line":54},[36,54989,54990],{"class":42},"      num = 10\n",[36,54992,54993],{"class":38,"line":66},[36,54994,4580],{"class":42},[36,54996,54997],{"class":38,"line":73},[36,54998,54999],{"class":42},"    fun()\n",[36,55001,55002],{"class":38,"line":86},[36,55003,55004],{"class":42},"    console.log(num)\n",[36,55006,55007],{"class":38,"line":126},[36,55008,55009],{"class":42},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,55011,55012],{"class":38,"line":131},[36,55013,55014],{"class":42},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3557,55016,55017,55020],{},[653,55018,55019],{},"函数内部的形参可以看做是局部变量",[653,55021,55022],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55024,55025,55026],{},"变量访问原则： ",[667,55027,55028],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1752,55030,55032],{"id":55031},"_295-匿名函数","2.9.5 匿名函数",[19,55034,55035],{},"函数可以分为具名函数和匿名函数",[19,55037,55038],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[650,55040,55041],{},[653,55042,55043],{},"函数表达式",[19,55045,55046],{},[3879,55047],{"alt":31,"src":55048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,55050,55051],{},"里边也可以写参数",[19,55053,55054],{},"具名函数调用位置可以随意调整；",[19,55056,55057],{},"匿名函数函数表达式形式只能在声明后才可以使用",[650,55059,55060],{"start":54},[653,55061,55062],{},"立即执行函数",[19,55064,55065],{},[3879,55066],{"alt":31,"src":55067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,55069,55070],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,55072,55073],{},"写法：两个小括号，然后在第一个小括号中写function",[19,55075,55076],{},"(function () {})();",[19,55078,55079],{},"不要落下最后的;",[19,55081,55082],{},"立即执行函数必须要加;",[19,55084,55085],{},"分号写前写后都没问题",[19,55087,55088],{},"写前：",[19,55090,55091],{},"(function() {})()",[19,55093,55094],{},";(function () {})();",[19,55096,55097],{},"写后:",[19,55099,55100],{},"(function() {})();",[19,55102,55076],{},[19,55104,55105],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,55107,55108],{},"还有一种写法：",[19,55110,55111],{},"(function(){}());",[19,55113,55114],{},"或者:",[19,55116,55117],{},"!function(){}();",[19,55119,55120],{},"立即执行函数有时候也是可以加名字的：",[19,55122,55123],{},"(function flexible(window,document) {}(window,document));",[19,55125,55126],{},"省一些调用方法",[1752,55128,55130],{"id":55129},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55132,55133],{},[3879,55134],{"alt":31,"src":55135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55137,55138],{},"这样就不用非得给x,y初始化了",[19,55140,55141],{},[3879,55142],{"alt":31,"src":55143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55145,55146],{},"代码执行时先看左边",[19,55148,55149],{},"例如：console.log(false && 3+5)",[19,55151,55152],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55154,55155],{},"&&都是真时，就返回最后一个真值",[19,55157,55158],{},"console.log(11 && 22)",[19,55160,55161],{},"输出22",[19,55163,55164],{},"逻辑与：遇真则真",[19,55166,17010],{},[19,55168,55169],{},"let age=1",[19,55171,55172],{},"console.log(11 || age++)",[19,55174,55175],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55177,55178],{},"console.log(11 || 22)",[19,55180,55181],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55183,55184],{},"||如果都是假的话，就取最后一个假的值了",[1752,55186,55188],{"id":55187},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55190,55191],{},"显示转换：",[19,55193,55194,55197,55198],{},[667,55195,55196],{},"记忆","： ",[667,55199,55200],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55202,55203],{},"空字符串为假，其他字符串全为真",[19,55205,55206],{},[3879,55207],{"alt":31,"src":55208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55210,55211],{},"隐式转换：",[19,55213,55214],{},[3879,55215],{"alt":31,"src":55216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55218,55219],{},"隐式转换:",[19,55221,55222],{},"null+3=3",[19,55224,55225],{},"undefined+3=NaN",[19,55227,55228],{},"null==undefined 输出true,他两个都当0看",[19,55230,55231],{},"null===undefined 输出false",[19,55233,55234],{},"undefined做任何操作都是NaN",[19,55236,55237],{},"NaN不等于NaN，NaN表示计算错误",[14,55239,55241],{"id":55240},"_210-对象","2.10 对象",[1752,55243,55245],{"id":55244},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55247,55248],{},"对象也是一种数据类型，里边的数据是无序的",[19,55250,55251],{},"对象由属性和方法组成",[19,55253,55254],{},[3879,55255],{"alt":31,"src":55256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55258,55259],{},[3879,55260],{"alt":31,"src":55261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55263,55264],{},[3879,55265],{"alt":31,"src":55266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1752,55268,55270],{"id":55269},"_2102-对象属性","2.10.2 对象属性",[19,55272,55273],{},[3879,55274],{"alt":31,"src":55275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[650,55277,55278],{},[653,55279,55280],{},"查询对象",[19,55282,55283],{},"对象名.属性 goods.uname",[19,55285,55286],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55288,55289],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55291,55292],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55294,55295],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[650,55297,55298],{"start":54},[653,55299,55300],{},"重新赋值",[19,55302,55303],{},"对象名.属性=新值",[650,55305,55306],{"start":66},[653,55307,55308],{},"增加新数据",[19,55310,55303],{},[650,55312,55313],{"start":73},[653,55314,55315],{},"删除对象中的属性",[19,55317,55318],{},"delete 对象名.属性",[1752,55320,55322],{"id":55321},"_2103-对象方法","2.10.3 对象方法",[19,55324,55325],{},[3879,55326],{"alt":31,"src":55327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55329,55330],{},"后边跟的是匿名函数",[19,55332,55333],{},"对象外面的叫函数；对象内部的叫方法",[19,55335,55336],{},[3879,55337],{"alt":31,"src":55338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1752,55340,55342],{"id":55341},"_2104-遍历对象","2.10.4 遍历对象",[19,55344,55345],{},"理解为加括号的python字典遍历",[19,55347,55348],{},[3879,55349],{"alt":31,"src":55350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55352,55353],{},"k是字符串类型",[19,55355,55356],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,55358,55360],{"className":52982,"code":55359,"language":52984,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,55361,55362,55367,55372,55377,55382],{"__ignoreMap":31},[36,55363,55364],{"class":38,"line":39},[36,55365,55366],{"class":42},"   let arr = [1, 2, 3]\n",[36,55368,55369],{"class":38,"line":54},[36,55370,55371],{"class":42},"    for (let k in arr) {\n",[36,55373,55374],{"class":38,"line":66},[36,55375,55376],{"class":42},"      console.log(k)\n",[36,55378,55379],{"class":38,"line":73},[36,55380,55381],{"class":42},"      console.log(arr[k])\n",[36,55383,55384],{"class":38,"line":86},[36,55385,4580],{"class":42},[19,55387,55388],{},[3879,55389],{"alt":31,"src":55390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55392,55393],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55395,55396],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55398,55399],{},"for in 得到的k是属性名",[54161,55401,55402],{},"\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,55404,55405],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1752,55407,55409],{"id":55408},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55411,55412],{},"数组中放对象信息",[26,55414,55418],{"className":55415,"code":55416,"language":55417,"meta":31,"style":31},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[33,55419,55420,55428,55433,55438,55443,55448,55453,55458,55463,55468,55473,55478,55483,55487,55491],{"__ignoreMap":31},[36,55421,55422,55424,55426],{"class":38,"line":39},[36,55423,3463],{"class":42},[36,55425,54161],{"class":53649},[36,55427,53656],{"class":42},[36,55429,55430],{"class":38,"line":54},[36,55431,55432],{"class":42},"    let students = [\n",[36,55434,55435],{"class":38,"line":66},[36,55436,55437],{"class":42},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,55439,55440],{"class":38,"line":73},[36,55441,55442],{"class":42},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,55444,55445],{"class":38,"line":86},[36,55446,55447],{"class":42},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,55449,55450],{"class":38,"line":126},[36,55451,55452],{"class":42},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,55454,55455],{"class":38,"line":131},[36,55456,55457],{"class":42},"    ]\n",[36,55459,55460],{"class":38,"line":225},[36,55461,55462],{"class":42},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,55464,55465],{"class":38,"line":235},[36,55466,55467],{"class":42},"      for (let k in students[i]) {\n",[36,55469,55470],{"class":38,"line":377},[36,55471,55472],{"class":42},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,55474,55475],{"class":38,"line":617},[36,55476,55477],{"class":42},"        \u002F\u002F输出每个人的名字：\n",[36,55479,55480],{"class":38,"line":643},[36,55481,55482],{"class":42},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,55484,55485],{"class":38,"line":921},[36,55486,54746],{"class":42},[36,55488,55489],{"class":38,"line":934},[36,55490,4580],{"class":42},[36,55492,55493,55495,55497],{"class":38,"line":939},[36,55494,54765],{"class":42},[36,55496,54161],{"class":53649},[36,55498,53656],{"class":42},[1752,55500,55502],{"id":55501},"_2106-内置对象","2.10.6 内置对象",[19,55504,55505],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[650,55507,55508],{},[653,55509,55510],{},"数学对象Math",[19,55512,55513],{},[3879,55514],{"alt":31,"src":55515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55517,55518],{},[2796,55519,55522],{"href":55520,"rel":55521},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26235],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55524,55525],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55527,55528],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55530,55531],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55533,55534],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55536,55537],{},"null属于对象数据类型",[650,55539,55540],{"start":54},[653,55541,55542],{},"生成任意范围随机数",[19,55544,55545],{},[3879,55546],{"alt":31,"src":55547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55549,55550],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55552,55553],{},"乘以几就取不到几",[19,55555,55556],{},"取数组中的随机元素：",[19,55558,55559],{},"let arr = ['red', 'green', 'blue']",[19,55561,55562],{},"let random = Math.floor(Math.random() * arr.length)",[19,55564,55565],{},"console.log(arr[random])",[19,55567,55568],{},"这个函数得到的是全闭区间",[19,55570,55571],{},"function getRandom(N, M) {",[19,55573,55574],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55576,107],{},[19,55578,55579],{},"console.log(getRandom(4, 8))",[1752,55581,55583],{"id":55582},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55585,55586],{},[3879,55587],{"alt":31,"src":55588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55590,55591],{},[3879,55592],{"alt":31,"src":55593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55595,55596],{},[3879,55597],{"alt":31,"src":55598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55600,55601],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55603,55604],{},[3879,55605],{"alt":31,"src":55606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55608,55609],{},[3879,55610],{"alt":31,"src":55611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55613,55614],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55616,55617],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55619,55620],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2467,55622,55623],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":55625},[55626,55634,55635,55636,55637,55638,55645,55649,55655,55664],{"id":52817,"depth":54,"text":52818,"children":55627},[55628,55629,55630,55631,55632,55633],{"id":52821,"depth":66,"text":52822},{"id":52838,"depth":66,"text":52839},{"id":52878,"depth":66,"text":52879},{"id":52890,"depth":66,"text":52891},{"id":52899,"depth":66,"text":52900},{"id":52947,"depth":66,"text":52948},{"id":52957,"depth":54,"text":52958},{"id":53045,"depth":54,"text":53046},{"id":53068,"depth":54,"text":53069},{"id":53080,"depth":54,"text":53081},{"id":53267,"depth":54,"text":53268,"children":55639},[55640,55641,55642,55643,55644],{"id":53271,"depth":66,"text":53272},{"id":53280,"depth":66,"text":53281},{"id":53308,"depth":66,"text":53309},{"id":53344,"depth":66,"text":53345},{"id":53369,"depth":66,"text":53370},{"id":53381,"depth":54,"text":53382,"children":55646},[55647,55648],{"id":53402,"depth":66,"text":53403},{"id":53496,"depth":66,"text":53497},{"id":53554,"depth":54,"text":53555,"children":55650},[55651,55652,55653,55654],{"id":53558,"depth":66,"text":53559},{"id":53582,"depth":66,"text":53583},{"id":53635,"depth":66,"text":53636},{"id":54445,"depth":66,"text":54446},{"id":54831,"depth":54,"text":54832,"children":55656},[55657,55658,55659,55660,55661,55662,55663],{"id":54849,"depth":66,"text":54850},{"id":54886,"depth":66,"text":54887},{"id":54917,"depth":66,"text":54918},{"id":54950,"depth":66,"text":54951},{"id":55031,"depth":66,"text":55032},{"id":55129,"depth":66,"text":55130},{"id":55187,"depth":66,"text":55188},{"id":55240,"depth":54,"text":55241,"children":55665},[55666,55667,55668,55669,55670,55671,55672],{"id":55244,"depth":66,"text":55245},{"id":55269,"depth":66,"text":55270},{"id":55321,"depth":66,"text":55322},{"id":55341,"depth":66,"text":55342},{"id":55408,"depth":66,"text":55409},{"id":55501,"depth":66,"text":55502},{"id":55582,"depth":66,"text":55583},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52809,"description":2493},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55679,"title":55680,"body":55681,"description":2493,"extension":2494,"meta":79018,"navigation":69,"path":79019,"seo":79020,"stem":79021,"__hash__":79022},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55682,"toc":78958},[55683,55686,55689,55692,55697,55700,55703,55706,55710,55714,55720,55725,55733,55740,55743,55747,55752,55757,55762,55765,55768,55779,55782,55786,55789,55792,55797,55802,55807,55810,55813,55905,55908,55913,55916,55921,55924,55927,55932,55935,55940,55944,55947,55961,55965,55970,55973,55976,55980,55985,55988,55992,55996,56001,56005,56010,56013,56016,56019,56022,56025,56028,56033,56038,56066,56069,56072,56075,56080,56083,56086,56089,56092,56096,56125,56129,56134,56139,56142,56145,56148,56153,56268,56273,56278,56439,56444,56447,56451,56456,56461,56464,56467,56470,56473,56476,56479,56482,56485,56488,56491,56494,56497,56500,56503,56505,56508,56511,56514,56519,56523,56920,56923,56929,56933,56938,58220,58225,58228,58231,58234,58239,59435,59439,59445,59450,59453,59458,59463,59467,59471,59476,59479,59484,59487,59490,59494,60402,60405,60409,60630,60633,60636,60639,60865,60868,61092,61095,61099,61104,61107,61110,61338,61341,61374,61377,61381,61386,61390,61393,61396,61399,61402,61405,61408,61411,61416,62696,62700,62703,63796,63800,63803,63806,63809,63812,63816,63819,63822,63824,63832,65312,65316,65319,65322,65325,65534,65537,65541,65545,65550,65555,65558,65561,65566,65570,65575,65578,65687,65691,65696,65701,65704,65707,65711,65716,65721,65726,65729,65732,65743,65746,65751,65756,65759,65762,65835,65839,65844,65847,65849,65860,65864,65869,67195,67198,67201,67204,67206,67209,67212,67215,67218,67221,67224,67227,67230,67233,67236,67239,67242,67244,67246,67249,67253,68347,68350,68353,68369,68383,68386,68391,68397,68402,68406,68410,68415,68419,68424,68866,68871,68874,68878,68883,68886,68889,68893,68898,68902,68907,68912,68916,68921,68926,68929,68934,68939,68943,68948,68953,69057,69060,69064,69069,69435,69438,69441,69444,69447,69450,69453,69456,69459,70755,70759,70764,70769,70772,70775,70778,70781,70783,70788,70793,70796,70800,70805,70810,70815,70818,70821,70824,70827,70830,70835,70838,70842,70847,70852,70856,70861,70864,70869,70872,70875,70878,70881,70884,70889,70892,70895,70898,70901,70905,70910,70913,70917,70922,70925,70928,70932,70961,70964,70968,70972,70977,70981,70986,70989,70992,70995,70998,71001,71004,71007,71010,71013,71016,71019,71022,71025,71028,71032,71037,71042,71045,71049,71053,71058,71061,71065,71068,71071,71076,71081,71086,71091,71096,71099,71102,71107,71112,71116,71121,71124,71129,71132,71135,71138,71141,71146,71149,71158,71162,71167,71170,71173,71177,71180,71185,71189,71192,71198,71204,71208,71234,71237,72796,72799,73295,73298,73303,73308,73313,73317,73322,73327,73332,73336,73341,73344,73347,73350,73353,73357,73360,73365,73368,73373,73377,73382,73385,73390,73395,73400,73403,73406,73411,73416,73419,73422,73426,73429,73434,73437,73442,73445,73450,73455,73460,73463,73468,73533,73536,73547,73551,73556,73728,73732,73737,73740,73743,73746,73750,73761,73765,73768,73773,73778,73781,73784,73787,73790,73793,73795,73798,73801,73804,73809,73812,73817,73820,73824,73827,73830,73844,73848,73851,73906,73911,73914,73917,73922,73925,73929,73934,74064,74068,74073,74078,74159,74164,74168,74171,74176,74181,74187,74190,74193,74196,74200,74205,74208,74219,74223,74240,77287,77291,77294,77297,77300,77321,77325,77328,77336,77339,77344,77347,77350,77355,77360,77364,77385,77389,77394,77397,77400,77403,77406,77410,77415,77418,77422,77427,77430,77435,77438,77443,77446,77451,78654,78658,78663,78666,78671,78955],[10,55684,55680],{"id":55685},"_3web-apis",[19,55687,55688],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55690,55691],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55693,55694],{},[3879,55695],{"alt":31,"src":55696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55698,55699],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55701,55702],{},"建议数组和对象使用 const 来声明",[19,55704,55705],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55707,55709],{"id":55708},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1752,55711,55713],{"id":55712},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55715,55716,55719],{},[33,55717,55718],{},"document"," = HTML 文件解析后的对象化表示；",[19,55721,55722,55724],{},[33,55723,55718],{}," ≠ HTML 文件本身",[19,55726,55727,55732],{},[667,55728,55729],{},[33,55730,55731],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55734,55735,55739],{},[667,55736,55737],{},[33,55738,55718],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55741,55742],{},"document实际上为window.document的简写",[1752,55744,55746],{"id":55745},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55748,55749],{},[3879,55750],{"alt":31,"src":55751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55753,55754],{},[3879,55755],{"alt":31,"src":55756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55758,55759],{},[3879,55760],{"alt":31,"src":55761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55763,55764],{},"console.dir()",[19,55766,55767],{},"dir用来打印对象",[3557,55769,55770,55773,55776],{},[653,55771,55772],{},"任何一个标签，都是一个对象",[653,55774,55775],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[653,55777,55778],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55780,55781],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1752,55783,55785],{"id":55784},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55787,55788],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55790,55791],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55793,55794],{},[667,55795,55796],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[650,55798,55799],{},[653,55800,55801],{},"利用CSS选择器来获取标签元素",[19,55803,55804],{},[3879,55805],{"alt":31,"src":55806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55808,55809],{},"里边的选择器必须必须加引号！！！",[19,55811,55812],{},"只选择第一个元素",[26,55814,55816],{"className":55415,"code":55815,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,55817,55818,55826,55847,55866,55874,55879,55884,55889,55897],{"__ignoreMap":31},[36,55819,55820,55822,55824],{"class":38,"line":39},[36,55821,3463],{"class":42},[36,55823,54148],{"class":53649},[36,55825,53656],{"class":42},[36,55827,55828,55830,55832,55835,55837,55840,55843,55845],{"class":38,"line":54},[36,55829,54492],{"class":42},[36,55831,53959],{"class":53649},[36,55833,55834],{"class":79}," class",[36,55836,47],{"class":42},[36,55838,55839],{"class":50},"\"box\"",[36,55841,55842],{"class":42},">123\u003C\u002F",[36,55844,53959],{"class":53649},[36,55846,53656],{"class":42},[36,55848,55849,55851,55853,55855,55857,55859,55862,55864],{"class":38,"line":66},[36,55850,54492],{"class":42},[36,55852,53959],{"class":53649},[36,55854,55834],{"class":79},[36,55856,47],{"class":42},[36,55858,55839],{"class":50},[36,55860,55861],{"class":42},">456\u003C\u002F",[36,55863,53959],{"class":53649},[36,55865,53656],{"class":42},[36,55867,55868,55870,55872],{"class":38,"line":73},[36,55869,54492],{"class":42},[36,55871,54161],{"class":53649},[36,55873,53656],{"class":42},[36,55875,55876],{"class":38,"line":86},[36,55877,55878],{"class":42},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,55880,55881],{"class":38,"line":126},[36,55882,55883],{"class":42},"    const box = document.querySelector('div')\n",[36,55885,55886],{"class":38,"line":131},[36,55887,55888],{"class":42},"    console.dir(box)\n",[36,55890,55891,55893,55895],{"class":38,"line":225},[36,55892,54765],{"class":42},[36,55894,54161],{"class":53649},[36,55896,53656],{"class":42},[36,55898,55899,55901,55903],{"class":38,"line":235},[36,55900,54133],{"class":42},[36,55902,54148],{"class":53649},[36,55904,53656],{"class":42},[19,55906,55907],{},"只选123，不选456",[19,55909,55910],{},[3879,55911],{"alt":31,"src":55912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55914,55915],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55917,55918],{},[3879,55919],{"alt":31,"src":55920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55922,55923],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55925,55926],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[650,55928,55929],{"start":54},[653,55930,55931],{},"其他方法来获取标签元素",[19,55933,55934],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55936,55937],{},[3879,55938],{"alt":31,"src":55939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1752,55941,55943],{"id":55942},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55945,55946],{},"设置修改DOM元素内容有两种方式：",[3557,55948,55949,55952,55955,55958],{},[653,55950,55951],{},"元素.innerText=''",[653,55953,55954],{},"元素.innerHTML=''",[653,55956,55957],{},"不写字符串输出数字也是可以的",[653,55959,55960],{},"元素.innerHtml=1",[24368,55962,55964],{"id":55963},"_3131-innertext","3.1.3.1 innerText",[19,55966,55967],{},[3879,55968],{"alt":31,"src":55969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55971,55972],{},"思路：实现了修改盒子中的内容！",[19,55974,55975],{},"它只显示纯文本，不解析标签",[24368,55977,55979],{"id":55978},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55981,55982],{},[3879,55983],{"alt":31,"src":55984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55986,55987],{},"相比于innerText，他的强大之处在于可以解析标签",[1752,55989,55991],{"id":55990},"_314-操作元素属性","3.1.4 操作元素属性",[24368,55993,55995],{"id":55994},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55997,55998],{},[3879,55999],{"alt":31,"src":56000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24368,56002,56004],{"id":56003},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56006,56007],{},[3879,56008],{"alt":31,"src":56009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56011,56012],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56014,56015],{},"div.style.backgroundColor = 'hotpink'",[19,56017,56018],{},"如果按照css的写法，-表示减，就会出错",[19,56020,56021],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56023,56024],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56026,56027],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56029,56030],{},[3879,56031],{"alt":31,"src":56032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56034,56035],{},[3879,56036],{"alt":31,"src":56037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[650,56039,56040,56043,56046,56049,56052,56055],{},[653,56041,56042],{},"className这个方式就是修改很多样式的时候来使用的！",[653,56044,56045],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[653,56047,56048],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[653,56050,56051],{},"className为属性名，如果还用class的话就导致与关键字冲突",[653,56053,56054],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[653,56056,56057,56058,56063],{},"解析标签的时候就变为了",[53959,56059],{"className":56060},[56061,56062],"nav","box",[56064,56065],"br",{},[19,56067,56068],{},"例子：",[53959,56070],{"className":56071},[56061],[54161,56073,56074],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,56076,56077],{},[3879,56078],{"alt":31,"src":56079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,56081,56082],{},"追加和删除类名用classList",[19,56084,56085],{},"常用于类似于开关的操作",[19,56087,56088],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,56090,56091],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24368,56093,56095],{"id":56094},"_3143-牢记点","3.1.4.3 牢记点",[650,56097,56098,56101,56104,56107,56110,56113,56116,56119,56122],{},[653,56099,56100],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[653,56102,56103],{},"使用style属性操作css时不要忘记引号",[653,56105,56106],{},"使用className或者classList时也不要忘记引号",[653,56108,56109],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[653,56111,56112],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[653,56114,56115],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[653,56117,56118],{},"若： let arr=['1','2',3] arr[0]=1",[653,56120,56121],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[653,56123,56124],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1752,56126,56128],{"id":56127},"_315-操作表单元素","3.1.5 操作表单元素",[650,56130,56131],{},[653,56132,56133],{},"天生的属性",[19,56135,56136],{},[3879,56137],{"alt":31,"src":56138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56140,56141],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56143,56144],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56146,56147],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56149,56150],{},[3879,56151],{"alt":31,"src":56152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,56154,56156],{"className":52982,"code":56155,"language":52984,"meta":31,"style":31},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[33,56157,56158,56163,56195,56200,56205,56210,56215,56219,56224,56229,56246,56258,56263],{"__ignoreMap":31},[36,56159,56160],{"class":38,"line":39},[36,56161,56162],{"class":42},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,56164,56165,56167,56170,56173,56175,56178,56180,56182,56184,56186,56188,56190,56193],{"class":38,"line":54},[36,56166,3463],{"class":42},[36,56168,56169],{"class":53649},"input",[36,56171,56172],{"class":79}," type",[36,56174,47],{"class":42},[36,56176,56177],{"class":50},"\"checkbox\"",[36,56179,17295],{"class":79},[36,56181,47],{"class":42},[36,56183,10033],{"class":50},[36,56185,17334],{"class":79},[36,56187,47],{"class":42},[36,56189,10033],{"class":50},[36,56191,56192],{"class":79}," checked",[36,56194,53656],{"class":42},[36,56196,56197],{"class":38,"line":66},[36,56198,56199],{"class":42},"不选的话：\n",[36,56201,56202],{"class":38,"line":73},[36,56203,56204],{"class":42},"const input = document.querySelector('input')\n",[36,56206,56207],{"class":38,"line":86},[36,56208,56209],{"class":42},"input.checked=false\n",[36,56211,56212],{"class":38,"line":126},[36,56213,56214],{"class":42},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,56216,56217],{"class":38,"line":131},[36,56218,70],{"emptyLinePlaceholder":69},[36,56220,56221],{"class":38,"line":225},[36,56222,56223],{"class":42},"禁用按钮：\n",[36,56225,56226],{"class":38,"line":235},[36,56227,56228],{"class":42},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,56230,56231,56233,56236,56239,56242,56244],{"class":38,"line":377},[36,56232,3463],{"class":42},[36,56234,56235],{"class":53649},"button",[36,56237,56238],{"class":79}," disabled",[36,56240,56241],{"class":42},">点击\u003C\u002F",[36,56243,56235],{"class":53649},[36,56245,53656],{"class":42},[36,56247,56248,56250,56252,56254,56256],{"class":38,"line":617},[36,56249,3463],{"class":42},[36,56251,56235],{"class":53649},[36,56253,56241],{"class":42},[36,56255,56235],{"class":53649},[36,56257,53656],{"class":42},[36,56259,56260],{"class":38,"line":643},[36,56261,56262],{"class":42},"const bt = document.querySelector('button')\n",[36,56264,56265],{"class":38,"line":921},[36,56266,56267],{"class":42},"bt.disabled = false\n",[650,56269,56270],{"start":54},[653,56271,56272],{},"自定义属性",[19,56274,56275],{},[3879,56276],{"alt":31,"src":56277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,56279,56281],{"className":55415,"code":56280,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,56282,56283,56291,56319,56338,56357,56376,56395,56403,56408,56413,56418,56423,56431],{"__ignoreMap":31},[36,56284,56285,56287,56289],{"class":38,"line":39},[36,56286,3463],{"class":42},[36,56288,54148],{"class":53649},[36,56290,53656],{"class":42},[36,56292,56293,56295,56297,56300,56302,56304,56307,56309,56312,56315,56317],{"class":38,"line":54},[36,56294,54492],{"class":42},[36,56296,53959],{"class":53649},[36,56298,56299],{"class":79}," data-id",[36,56301,47],{"class":42},[36,56303,6063],{"class":50},[36,56305,56306],{"class":79}," data-spm",[36,56308,47],{"class":42},[36,56310,56311],{"class":50},"\"我不知道\"",[36,56313,56314],{"class":42},">1\u003C\u002F",[36,56316,53959],{"class":53649},[36,56318,53656],{"class":42},[36,56320,56321,56323,56325,56327,56329,56331,56334,56336],{"class":38,"line":66},[36,56322,54492],{"class":42},[36,56324,53959],{"class":53649},[36,56326,56299],{"class":79},[36,56328,47],{"class":42},[36,56330,6086],{"class":50},[36,56332,56333],{"class":42},">2\u003C\u002F",[36,56335,53959],{"class":53649},[36,56337,53656],{"class":42},[36,56339,56340,56342,56344,56346,56348,56350,56353,56355],{"class":38,"line":73},[36,56341,54492],{"class":42},[36,56343,53959],{"class":53649},[36,56345,56299],{"class":79},[36,56347,47],{"class":42},[36,56349,6099],{"class":50},[36,56351,56352],{"class":42},">3\u003C\u002F",[36,56354,53959],{"class":53649},[36,56356,53656],{"class":42},[36,56358,56359,56361,56363,56365,56367,56369,56372,56374],{"class":38,"line":86},[36,56360,54492],{"class":42},[36,56362,53959],{"class":53649},[36,56364,56299],{"class":79},[36,56366,47],{"class":42},[36,56368,6112],{"class":50},[36,56370,56371],{"class":42},">4\u003C\u002F",[36,56373,53959],{"class":53649},[36,56375,53656],{"class":42},[36,56377,56378,56380,56382,56384,56386,56388,56391,56393],{"class":38,"line":126},[36,56379,54492],{"class":42},[36,56381,53959],{"class":53649},[36,56383,56299],{"class":79},[36,56385,47],{"class":42},[36,56387,6132],{"class":50},[36,56389,56390],{"class":42},">5\u003C\u002F",[36,56392,53959],{"class":53649},[36,56394,53656],{"class":42},[36,56396,56397,56399,56401],{"class":38,"line":131},[36,56398,54492],{"class":42},[36,56400,54161],{"class":53649},[36,56402,53656],{"class":42},[36,56404,56405],{"class":38,"line":225},[36,56406,56407],{"class":42},"    const one = document.querySelector('div')\n",[36,56409,56410],{"class":38,"line":235},[36,56411,56412],{"class":42},"    console.log(one.dataset)\n",[36,56414,56415],{"class":38,"line":377},[36,56416,56417],{"class":42},"    console.log(one.dataset.id)\n",[36,56419,56420],{"class":38,"line":617},[36,56421,56422],{"class":42},"    console.log(one.dataset.spm)\n",[36,56424,56425,56427,56429],{"class":38,"line":643},[36,56426,54765],{"class":42},[36,56428,54161],{"class":53649},[36,56430,53656],{"class":42},[36,56432,56433,56435,56437],{"class":38,"line":921},[36,56434,54133],{"class":42},[36,56436,54148],{"class":53649},[36,56438,53656],{"class":42},[19,56440,56441],{},[3879,56442],{"alt":31,"src":56443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56445,56446],{},"document.querySelector选择的是第一个对象（元素）",[1752,56448,56450],{"id":56449},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56452,56453],{},[3879,56454],{"alt":31,"src":56455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56457,56458],{},[3879,56459],{"alt":31,"src":56460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56462,56463],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54161,56465,56466],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56468,56469],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54161,56471,56472],{},"\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,56474,56475],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56477,56478],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56480,56481],{},"单位为毫秒！！！",[19,56483,56484],{},"可以搭配匿名函数来用！！！",[19,56486,56487],{},"setInterval(function () {",[19,56489,56490],{},"alert('两秒执行一次')",[19,56492,56493],{},"}, 2000)",[19,56495,56496],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56498,56499],{},"function fn() {",[19,56501,56502],{},"document.write(1)",[19,56504,107],{},[19,56506,56507],{},"setInterval(fn, 1000)",[19,56509,56510],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56512,56513],{},"setInterval('fn()', 1000)",[19,56515,56516],{},[3879,56517],{"alt":31,"src":56518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24368,56520,56522],{"id":56521},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,56524,56526],{"className":52982,"code":56525,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,56527,56528,56538,56552,56556,56564,56578,56598,56610,56618,56622,56630,56667,56672,56677,56682,56690,56698,56720,56728,56733,56755,56760,56765,56776,56781,56801,56809,56824,56839,56850,56855,56865,56875,56879,56888,56892,56900,56908,56912],{"__ignoreMap":31},[36,56529,56530,56532,56534,56536],{"class":38,"line":39},[36,56531,53646],{"class":42},[36,56533,53650],{"class":53649},[36,56535,53653],{"class":79},[36,56537,53656],{"class":42},[36,56539,56540,56542,56544,56546,56548,56550],{"class":38,"line":54},[36,56541,3463],{"class":42},[36,56543,52984],{"class":53649},[36,56545,53665],{"class":79},[36,56547,47],{"class":42},[36,56549,53670],{"class":50},[36,56551,53656],{"class":42},[36,56553,56554],{"class":38,"line":66},[36,56555,70],{"emptyLinePlaceholder":69},[36,56557,56558,56560,56562],{"class":38,"line":73},[36,56559,3463],{"class":42},[36,56561,53683],{"class":53649},[36,56563,53656],{"class":42},[36,56565,56566,56568,56570,56572,56574,56576],{"class":38,"line":86},[36,56567,54492],{"class":42},[36,56569,53693],{"class":53649},[36,56571,53696],{"class":79},[36,56573,47],{"class":42},[36,56575,53701],{"class":50},[36,56577,53656],{"class":42},[36,56579,56580,56582,56584,56586,56588,56590,56592,56594,56596],{"class":38,"line":126},[36,56581,54492],{"class":42},[36,56583,53693],{"class":53649},[36,56585,17295],{"class":79},[36,56587,47],{"class":42},[36,56589,53740],{"class":50},[36,56591,53720],{"class":79},[36,56593,47],{"class":42},[36,56595,53747],{"class":50},[36,56597,53656],{"class":42},[36,56599,56600,56602,56604,56606,56608],{"class":38,"line":131},[36,56601,54492],{"class":42},[36,56603,53756],{"class":53649},[36,56605,53759],{"class":42},[36,56607,53756],{"class":53649},[36,56609,53656],{"class":42},[36,56611,56612,56614,56616],{"class":38,"line":225},[36,56613,54133],{"class":42},[36,56615,53683],{"class":53649},[36,56617,53656],{"class":42},[36,56619,56620],{"class":38,"line":235},[36,56621,70],{"emptyLinePlaceholder":69},[36,56623,56624,56626,56628],{"class":38,"line":377},[36,56625,3463],{"class":42},[36,56627,54148],{"class":53649},[36,56629,53656],{"class":42},[36,56631,56632,56634,56637,56639,56641,56643,56645,56647,56649,56652,56654,56657,56660,56662,56665],{"class":38,"line":617},[36,56633,54492],{"class":42},[36,56635,56636],{"class":53649},"textarea",[36,56638,17295],{"class":79},[36,56640,47],{"class":42},[36,56642,10033],{"class":50},[36,56644,17334],{"class":79},[36,56646,47],{"class":42},[36,56648,10033],{"class":50},[36,56650,56651],{"class":79}," cols",[36,56653,47],{"class":42},[36,56655,56656],{"class":50},"\"30\"",[36,56658,56659],{"class":79}," rows",[36,56661,47],{"class":42},[36,56663,56664],{"class":50},"\"10\"",[36,56666,53656],{"class":42},[36,56668,56669],{"class":38,"line":643},[36,56670,56671],{"class":42},"        用户注册协议\n",[36,56673,56674],{"class":38,"line":921},[36,56675,56676],{"class":42},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,56678,56679],{"class":38,"line":934},[36,56680,56681],{"class":42},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,56683,56684,56686,56688],{"class":38,"line":939},[36,56685,54124],{"class":42},[36,56687,56636],{"class":53649},[36,56689,53656],{"class":42},[36,56691,56692,56694,56696],{"class":38,"line":949},[36,56693,54492],{"class":42},[36,56695,56064],{"class":53649},[36,56697,53656],{"class":42},[36,56699,56700,56702,56704,56706,56708,56711,56713,56716,56718],{"class":38,"line":962},[36,56701,54492],{"class":42},[36,56703,56235],{"class":53649},[36,56705,55834],{"class":79},[36,56707,47],{"class":42},[36,56709,56710],{"class":50},"\"btn\"",[36,56712,56238],{"class":79},[36,56714,56715],{"class":42},">我已经阅读用户协议(5)\u003C\u002F",[36,56717,56235],{"class":53649},[36,56719,53656],{"class":42},[36,56721,56722,56724,56726],{"class":38,"line":974},[36,56723,54492],{"class":42},[36,56725,54161],{"class":53649},[36,56727,53656],{"class":42},[36,56729,56730],{"class":38,"line":979},[36,56731,56732],{"class":2621},"    \u002F\u002F 1. 获取元素\n",[36,56734,56735,56737,56740,56742,56745,56748,56750,56753],{"class":38,"line":994},[36,56736,13599],{"class":46},[36,56738,56739],{"class":62}," btn",[36,56741,15941],{"class":46},[36,56743,56744],{"class":42}," document.",[36,56746,56747],{"class":79},"querySelector",[36,56749,92],{"class":42},[36,56751,56752],{"class":50},"'.btn'",[36,56754,123],{"class":42},[36,56756,56757],{"class":38,"line":1006},[36,56758,56759],{"class":2621},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,56761,56762],{"class":38,"line":1011},[36,56763,56764],{"class":2621},"    \u002F\u002F 2. 倒计时\n",[36,56766,56767,56769,56771,56773],{"class":38,"line":1023},[36,56768,54567],{"class":46},[36,56770,11818],{"class":42},[36,56772,47],{"class":46},[36,56774,56775],{"class":62}," 5\n",[36,56777,56778],{"class":38,"line":1028},[36,56779,56780],{"class":2621},"    \u002F\u002F 2.1 开启定时器\n",[36,56782,56783,56785,56788,56790,56793,56795,56798],{"class":38,"line":1033},[36,56784,54567],{"class":46},[36,56786,56787],{"class":42}," n ",[36,56789,47],{"class":46},[36,56791,56792],{"class":79}," setInterval",[36,56794,92],{"class":42},[36,56796,56797],{"class":46},"function",[36,56799,56800],{"class":42}," () {\n",[36,56802,56803,56806],{"class":38,"line":1053},[36,56804,56805],{"class":42},"      i",[36,56807,56808],{"class":46},"--\n",[36,56810,56811,56814,56816,56819,56821],{"class":38,"line":1064},[36,56812,56813],{"class":42},"      btn.innerHTML ",[36,56815,47],{"class":46},[36,56817,56818],{"class":50}," `我已经阅读用户协议(${",[36,56820,2997],{"class":42},[36,56822,56823],{"class":50},"})`\n",[36,56825,56826,56829,56832,56835,56837],{"class":38,"line":1075},[36,56827,56828],{"class":46},"      if",[36,56830,56831],{"class":42}," (i ",[36,56833,56834],{"class":46},"===",[36,56836,899],{"class":62},[36,56838,14819],{"class":42},[36,56840,56841,56844,56847],{"class":38,"line":2291},[36,56842,56843],{"class":79},"        clearInterval",[36,56845,56846],{"class":42},"(n)  ",[36,56848,56849],{"class":2621},"\u002F\u002F 关闭定时器\n",[36,56851,56852],{"class":38,"line":2329},[36,56853,56854],{"class":2621},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,56856,56857,56860,56862],{"class":38,"line":2334},[36,56858,56859],{"class":42},"        btn.disabled ",[36,56861,47],{"class":46},[36,56863,56864],{"class":62}," false\n",[36,56866,56867,56870,56872],{"class":38,"line":2339},[36,56868,56869],{"class":42},"        btn.innerHTML ",[36,56871,47],{"class":46},[36,56873,56874],{"class":50}," '同意'\n",[36,56876,56877],{"class":38,"line":2365},[36,56878,54746],{"class":42},[36,56880,56881,56884,56886],{"class":38,"line":2373},[36,56882,56883],{"class":42},"    }, ",[36,56885,1048],{"class":62},[36,56887,123],{"class":42},[36,56889,56890],{"class":38,"line":5001},[36,56891,70],{"emptyLinePlaceholder":69},[36,56893,56894,56896,56898],{"class":38,"line":5006},[36,56895,54765],{"class":42},[36,56897,54161],{"class":53649},[36,56899,53656],{"class":42},[36,56901,56902,56904,56906],{"class":38,"line":10328},[36,56903,54133],{"class":42},[36,56905,54148],{"class":53649},[36,56907,53656],{"class":42},[36,56909,56910],{"class":38,"line":10352},[36,56911,70],{"emptyLinePlaceholder":69},[36,56913,56914,56916,56918],{"class":38,"line":10357},[36,56915,54133],{"class":42},[36,56917,52984],{"class":53649},[36,56919,53656],{"class":42},[19,56921,56922],{},"不要一直想着用死循环,避免死循环",[19,56924,56925,56928],{},[33,56926,56927],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24368,56930,56932],{"id":56931},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[650,56934,56935],{},[653,56936,56937],{},"法1",[26,56939,56941],{"className":52982,"code":56940,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,56942,56943,56953,56967,56971,56979,56993,57013,57025,57033,57039,57050,57061,57065,57069,57076,57088,57092,57096,57103,57115,57129,57142,57156,57160,57164,57171,57182,57193,57204,57216,57228,57240,57244,57248,57256,57266,57279,57291,57304,57308,57312,57319,57329,57341,57353,57364,57375,57385,57397,57409,57413,57417,57426,57438,57450,57478,57491,57495,57499,57506,57517,57521,57529,57537,57541,57549,57563,57578,57602,57610,57625,57638,57646,57667,57679,57691,57703,57715,57727,57739,57751,57760,57768,57776,57784,57796,57819,57838,57857,57876,57895,57914,57933,57953,57957,57977,57996,58016,58037,58048,58065,58075,58085,58095,58100,58105,58110,58115,58140,58153,58157,58180,58184,58192,58200,58208,58212],{"__ignoreMap":31},[36,56944,56945,56947,56949,56951],{"class":38,"line":39},[36,56946,53646],{"class":42},[36,56948,53650],{"class":53649},[36,56950,53653],{"class":79},[36,56952,53656],{"class":42},[36,56954,56955,56957,56959,56961,56963,56965],{"class":38,"line":54},[36,56956,3463],{"class":42},[36,56958,52984],{"class":53649},[36,56960,53665],{"class":79},[36,56962,47],{"class":42},[36,56964,53670],{"class":50},[36,56966,53656],{"class":42},[36,56968,56969],{"class":38,"line":66},[36,56970,70],{"emptyLinePlaceholder":69},[36,56972,56973,56975,56977],{"class":38,"line":73},[36,56974,3463],{"class":42},[36,56976,53683],{"class":53649},[36,56978,53656],{"class":42},[36,56980,56981,56983,56985,56987,56989,56991],{"class":38,"line":86},[36,56982,54492],{"class":42},[36,56984,53693],{"class":53649},[36,56986,53696],{"class":79},[36,56988,47],{"class":42},[36,56990,53701],{"class":50},[36,56992,53656],{"class":42},[36,56994,56995,56997,56999,57001,57003,57005,57007,57009,57011],{"class":38,"line":126},[36,56996,54492],{"class":42},[36,56998,53693],{"class":53649},[36,57000,17295],{"class":79},[36,57002,47],{"class":42},[36,57004,53740],{"class":50},[36,57006,53720],{"class":79},[36,57008,47],{"class":42},[36,57010,53747],{"class":50},[36,57012,53656],{"class":42},[36,57014,57015,57017,57019,57021,57023],{"class":38,"line":131},[36,57016,54492],{"class":42},[36,57018,53756],{"class":53649},[36,57020,53759],{"class":42},[36,57022,53756],{"class":53649},[36,57024,53656],{"class":42},[36,57026,57027,57029,57031],{"class":38,"line":225},[36,57028,54492],{"class":42},[36,57030,2467],{"class":53649},[36,57032,53656],{"class":42},[36,57034,57035,57037],{"class":38,"line":235},[36,57036,8785],{"class":53649},[36,57038,2150],{"class":42},[36,57040,57041,57044,57046,57048],{"class":38,"line":377},[36,57042,57043],{"class":62},"      padding",[36,57045,2158],{"class":42},[36,57047,2751],{"class":62},[36,57049,3711],{"class":42},[36,57051,57052,57055,57057,57059],{"class":38,"line":617},[36,57053,57054],{"class":62},"      margin",[36,57056,2158],{"class":42},[36,57058,2751],{"class":62},[36,57060,3711],{"class":42},[36,57062,57063],{"class":38,"line":643},[36,57064,4580],{"class":42},[36,57066,57067],{"class":38,"line":921},[36,57068,70],{"emptyLinePlaceholder":69},[36,57070,57071,57074],{"class":38,"line":934},[36,57072,57073],{"class":53649},"    li",[36,57075,2150],{"class":42},[36,57077,57078,57081,57083,57086],{"class":38,"line":939},[36,57079,57080],{"class":62},"      list-style",[36,57082,2158],{"class":42},[36,57084,57085],{"class":62},"none",[36,57087,3711],{"class":42},[36,57089,57090],{"class":38,"line":949},[36,57091,4580],{"class":42},[36,57093,57094],{"class":38,"line":962},[36,57095,70],{"emptyLinePlaceholder":69},[36,57097,57098,57101],{"class":38,"line":974},[36,57099,57100],{"class":79},"    .box",[36,57102,2150],{"class":42},[36,57104,57105,57108,57110,57113],{"class":38,"line":979},[36,57106,57107],{"class":62},"      position",[36,57109,2158],{"class":42},[36,57111,57112],{"class":62},"relative",[36,57114,3711],{"class":42},[36,57116,57117,57120,57122,57125,57127],{"class":38,"line":994},[36,57118,57119],{"class":62},"      width",[36,57121,2158],{"class":42},[36,57123,57124],{"class":62},"976",[36,57126,53840],{"class":46},[36,57128,3711],{"class":42},[36,57130,57131,57134,57136,57138,57140],{"class":38,"line":1006},[36,57132,57133],{"class":62},"      height",[36,57135,2158],{"class":42},[36,57137,3956],{"class":62},[36,57139,53840],{"class":46},[36,57141,3711],{"class":42},[36,57143,57144,57146,57148,57150,57152,57154],{"class":38,"line":1011},[36,57145,57054],{"class":62},[36,57147,2158],{"class":42},[36,57149,1070],{"class":62},[36,57151,53840],{"class":46},[36,57153,53904],{"class":62},[36,57155,3711],{"class":42},[36,57157,57158],{"class":38,"line":1023},[36,57159,4580],{"class":42},[36,57161,57162],{"class":38,"line":1028},[36,57163,70],{"emptyLinePlaceholder":69},[36,57165,57166,57169],{"class":38,"line":1033},[36,57167,57168],{"class":79},"    .slider-footer",[36,57170,2150],{"class":42},[36,57172,57173,57175,57177,57180],{"class":38,"line":1053},[36,57174,57107],{"class":62},[36,57176,2158],{"class":42},[36,57178,57179],{"class":62},"absolute",[36,57181,3711],{"class":42},[36,57183,57184,57187,57189,57191],{"class":38,"line":1064},[36,57185,57186],{"class":62},"      left",[36,57188,2158],{"class":42},[36,57190,2751],{"class":62},[36,57192,3711],{"class":42},[36,57194,57195,57198,57200,57202],{"class":38,"line":1075},[36,57196,57197],{"class":62},"      bottom",[36,57199,2158],{"class":42},[36,57201,2751],{"class":62},[36,57203,3711],{"class":42},[36,57205,57206,57208,57210,57212,57214],{"class":38,"line":2291},[36,57207,57119],{"class":62},[36,57209,2158],{"class":42},[36,57211,1070],{"class":62},[36,57213,2884],{"class":46},[36,57215,3711],{"class":42},[36,57217,57218,57220,57222,57224,57226],{"class":38,"line":2329},[36,57219,57133],{"class":62},[36,57221,2158],{"class":42},[36,57223,3130],{"class":62},[36,57225,2884],{"class":46},[36,57227,3711],{"class":42},[36,57229,57230,57233,57235,57238],{"class":38,"line":2334},[36,57231,57232],{"class":62},"      background-color",[36,57234,2158],{"class":42},[36,57236,57237],{"class":62},"skyblue",[36,57239,3711],{"class":42},[36,57241,57242],{"class":38,"line":2339},[36,57243,4580],{"class":42},[36,57245,57246],{"class":38,"line":2365},[36,57247,70],{"emptyLinePlaceholder":69},[36,57249,57250,57252,57254],{"class":38,"line":2373},[36,57251,57168],{"class":79},[36,57253,9206],{"class":53649},[36,57255,2150],{"class":42},[36,57257,57258,57260,57262,57264],{"class":38,"line":5001},[36,57259,57107],{"class":62},[36,57261,2158],{"class":42},[36,57263,57179],{"class":62},[36,57265,3711],{"class":42},[36,57267,57268,57271,57273,57275,57277],{"class":38,"line":5006},[36,57269,57270],{"class":62},"      font-size",[36,57272,2158],{"class":42},[36,57274,3454],{"class":62},[36,57276,53840],{"class":46},[36,57278,3711],{"class":42},[36,57280,57281,57283,57285,57287,57289],{"class":38,"line":10328},[36,57282,57186],{"class":62},[36,57284,2158],{"class":42},[36,57286,3254],{"class":62},[36,57288,53840],{"class":46},[36,57290,3711],{"class":42},[36,57292,57293,57296,57298,57300,57302],{"class":38,"line":10352},[36,57294,57295],{"class":62},"      top",[36,57297,2158],{"class":42},[36,57299,2875],{"class":62},[36,57301,53840],{"class":46},[36,57303,3711],{"class":42},[36,57305,57306],{"class":38,"line":10357},[36,57307,4580],{"class":42},[36,57309,57310],{"class":38,"line":10363},[36,57311,70],{"emptyLinePlaceholder":69},[36,57313,57314,57317],{"class":38,"line":10390},[36,57315,57316],{"class":53649},"    ul",[36,57318,2150],{"class":42},[36,57320,57321,57323,57325,57327],{"class":38,"line":10395},[36,57322,57107],{"class":62},[36,57324,2158],{"class":42},[36,57326,57179],{"class":62},[36,57328,3711],{"class":42},[36,57330,57331,57333,57335,57337,57339],{"class":38,"line":10401},[36,57332,57295],{"class":62},[36,57334,2158],{"class":42},[36,57336,3335],{"class":62},[36,57338,53840],{"class":46},[36,57340,3711],{"class":42},[36,57342,57343,57345,57347,57349,57351],{"class":38,"line":10413},[36,57344,57186],{"class":62},[36,57346,2158],{"class":42},[36,57348,3254],{"class":62},[36,57350,53840],{"class":46},[36,57352,3711],{"class":42},[36,57354,57355,57358,57360,57362],{"class":38,"line":10425},[36,57356,57357],{"class":62},"      display",[36,57359,2158],{"class":42},[36,57361,53825],{"class":62},[36,57363,3711],{"class":42},[36,57365,57366,57369,57371,57373],{"class":38,"line":10437},[36,57367,57368],{"class":62},"      justify-content",[36,57370,2158],{"class":42},[36,57372,54016],{"class":62},[36,57374,3711],{"class":42},[36,57376,57377,57379,57381,57383],{"class":38,"line":12095},[36,57378,57107],{"class":62},[36,57380,2158],{"class":42},[36,57382,57179],{"class":62},[36,57384,3711],{"class":42},[36,57386,57387,57389,57391,57393,57395],{"class":38,"line":12120},[36,57388,57119],{"class":62},[36,57390,2158],{"class":42},[36,57392,6376],{"class":62},[36,57394,53840],{"class":46},[36,57396,3711],{"class":42},[36,57398,57399,57401,57403,57405,57407],{"class":38,"line":12143},[36,57400,57133],{"class":62},[36,57402,2158],{"class":42},[36,57404,3254],{"class":62},[36,57406,53840],{"class":46},[36,57408,3711],{"class":42},[36,57410,57411],{"class":38,"line":12167},[36,57412,4580],{"class":42},[36,57414,57415],{"class":38,"line":12172},[36,57416,70],{"emptyLinePlaceholder":69},[36,57418,57419,57421,57424],{"class":38,"line":12177},[36,57420,57316],{"class":53649},[36,57422,57423],{"class":53649}," li",[36,57425,2150],{"class":42},[36,57427,57428,57430,57432,57434,57436],{"class":38,"line":12182},[36,57429,57119],{"class":62},[36,57431,2158],{"class":42},[36,57433,3254],{"class":62},[36,57435,53840],{"class":46},[36,57437,3711],{"class":42},[36,57439,57440,57442,57444,57446,57448],{"class":38,"line":12191},[36,57441,57133],{"class":62},[36,57443,2158],{"class":42},[36,57445,3254],{"class":62},[36,57447,53840],{"class":46},[36,57449,3711],{"class":42},[36,57451,57452,57454,57456,57459,57461,57463,57465,57467,57469,57471,57473,57476],{"class":38,"line":12196},[36,57453,57232],{"class":62},[36,57455,2158],{"class":42},[36,57457,57458],{"class":62},"rgba",[36,57460,92],{"class":42},[36,57462,2751],{"class":62},[36,57464,630],{"class":42},[36,57466,2751],{"class":62},[36,57468,630],{"class":42},[36,57470,2751],{"class":62},[36,57472,630],{"class":42},[36,57474,57475],{"class":62},".4",[36,57477,5104],{"class":42},[36,57479,57480,57483,57485,57487,57489],{"class":38,"line":12202},[36,57481,57482],{"class":62},"      border-radius",[36,57484,2158],{"class":42},[36,57486,3002],{"class":62},[36,57488,53840],{"class":46},[36,57490,3711],{"class":42},[36,57492,57493],{"class":38,"line":12223},[36,57494,4580],{"class":42},[36,57496,57497],{"class":38,"line":12229},[36,57498,70],{"emptyLinePlaceholder":69},[36,57500,57501,57504],{"class":38,"line":12243},[36,57502,57503],{"class":79},"    .activate",[36,57505,2150],{"class":42},[36,57507,57508,57510,57512,57515],{"class":38,"line":12249},[36,57509,57232],{"class":62},[36,57511,2158],{"class":42},[36,57513,57514],{"class":62},"#f7f7f7",[36,57516,3711],{"class":42},[36,57518,57519],{"class":38,"line":12276},[36,57520,4580],{"class":42},[36,57522,57523,57525,57527],{"class":38,"line":12285},[36,57524,54765],{"class":42},[36,57526,2467],{"class":53649},[36,57528,53656],{"class":42},[36,57530,57531,57533,57535],{"class":38,"line":12291},[36,57532,54133],{"class":42},[36,57534,53683],{"class":53649},[36,57536,53656],{"class":42},[36,57538,57539],{"class":38,"line":12299},[36,57540,70],{"emptyLinePlaceholder":69},[36,57542,57543,57545,57547],{"class":38,"line":12304},[36,57544,3463],{"class":42},[36,57546,54148],{"class":53649},[36,57548,53656],{"class":42},[36,57550,57551,57553,57555,57557,57559,57561],{"class":38,"line":18977},[36,57552,54492],{"class":42},[36,57554,53959],{"class":53649},[36,57556,55834],{"class":79},[36,57558,47],{"class":42},[36,57560,55839],{"class":50},[36,57562,53656],{"class":42},[36,57564,57565,57567,57569,57571,57573,57576],{"class":38,"line":18983},[36,57566,53690],{"class":42},[36,57568,53959],{"class":53649},[36,57570,55834],{"class":79},[36,57572,47],{"class":42},[36,57574,57575],{"class":50},"\"slider-wrapper\"",[36,57577,53656],{"class":42},[36,57579,57580,57583,57585,57588,57590,57593,57596,57598,57600],{"class":38,"line":19006},[36,57581,57582],{"class":42},"      \u003C",[36,57584,3879],{"class":53649},[36,57586,57587],{"class":79}," src",[36,57589,47],{"class":42},[36,57591,57592],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,57594,57595],{"class":79}," alt",[36,57597,47],{"class":42},[36,57599,10033],{"class":50},[36,57601,53656],{"class":42},[36,57603,57604,57606,57608],{"class":38,"line":19012},[36,57605,54124],{"class":42},[36,57607,53959],{"class":53649},[36,57609,53656],{"class":42},[36,57611,57612,57614,57616,57618,57620,57623],{"class":38,"line":19035},[36,57613,53690],{"class":42},[36,57615,53959],{"class":53649},[36,57617,55834],{"class":79},[36,57619,47],{"class":42},[36,57621,57622],{"class":50},"\"slider-footer\"",[36,57624,53656],{"class":42},[36,57626,57627,57629,57631,57634,57636],{"class":38,"line":19049},[36,57628,57582],{"class":42},[36,57630,19],{"class":53649},[36,57632,57633],{"class":42},">对人类来说会不会太超前了?\u003C\u002F",[36,57635,19],{"class":53649},[36,57637,53656],{"class":42},[36,57639,57640,57642,57644],{"class":38,"line":19069},[36,57641,57582],{"class":42},[36,57643,3557],{"class":53649},[36,57645,53656],{"class":42},[36,57647,57648,57651,57653,57655,57657,57660,57663,57665],{"class":38,"line":19075},[36,57649,57650],{"class":42},"        \u003C",[36,57652,653],{"class":53649},[36,57654,55834],{"class":79},[36,57656,47],{"class":42},[36,57658,57659],{"class":50},"\"activate\"",[36,57661,57662],{"class":42},">\u003C\u002F",[36,57664,653],{"class":53649},[36,57666,53656],{"class":42},[36,57668,57669,57671,57673,57675,57677],{"class":38,"line":19086},[36,57670,57650],{"class":42},[36,57672,653],{"class":53649},[36,57674,57662],{"class":42},[36,57676,653],{"class":53649},[36,57678,53656],{"class":42},[36,57680,57681,57683,57685,57687,57689],{"class":38,"line":19109},[36,57682,57650],{"class":42},[36,57684,653],{"class":53649},[36,57686,57662],{"class":42},[36,57688,653],{"class":53649},[36,57690,53656],{"class":42},[36,57692,57693,57695,57697,57699,57701],{"class":38,"line":19131},[36,57694,57650],{"class":42},[36,57696,653],{"class":53649},[36,57698,57662],{"class":42},[36,57700,653],{"class":53649},[36,57702,53656],{"class":42},[36,57704,57705,57707,57709,57711,57713],{"class":38,"line":19136},[36,57706,57650],{"class":42},[36,57708,653],{"class":53649},[36,57710,57662],{"class":42},[36,57712,653],{"class":53649},[36,57714,53656],{"class":42},[36,57716,57717,57719,57721,57723,57725],{"class":38,"line":19142},[36,57718,57650],{"class":42},[36,57720,653],{"class":53649},[36,57722,57662],{"class":42},[36,57724,653],{"class":53649},[36,57726,53656],{"class":42},[36,57728,57729,57731,57733,57735,57737],{"class":38,"line":19156},[36,57730,57650],{"class":42},[36,57732,653],{"class":53649},[36,57734,57662],{"class":42},[36,57736,653],{"class":53649},[36,57738,53656],{"class":42},[36,57740,57741,57743,57745,57747,57749],{"class":38,"line":19169},[36,57742,57650],{"class":42},[36,57744,653],{"class":53649},[36,57746,57662],{"class":42},[36,57748,653],{"class":53649},[36,57750,53656],{"class":42},[36,57752,57753,57756,57758],{"class":38,"line":19174},[36,57754,57755],{"class":42},"      \u003C\u002F",[36,57757,3557],{"class":53649},[36,57759,53656],{"class":42},[36,57761,57762,57764,57766],{"class":38,"line":19188},[36,57763,54124],{"class":42},[36,57765,53959],{"class":53649},[36,57767,53656],{"class":42},[36,57769,57770,57772,57774],{"class":38,"line":19193},[36,57771,54765],{"class":42},[36,57773,53959],{"class":53649},[36,57775,53656],{"class":42},[36,57777,57778,57780,57782],{"class":38,"line":19199},[36,57779,54492],{"class":42},[36,57781,54161],{"class":53649},[36,57783,53656],{"class":42},[36,57785,57786,57788,57791,57793],{"class":38,"line":19204},[36,57787,13599],{"class":46},[36,57789,57790],{"class":62}," arrImage",[36,57792,15941],{"class":46},[36,57794,57795],{"class":42}," [\n",[36,57797,57798,57801,57804,57807,57810,57813,57816],{"class":38,"line":19218},[36,57799,57800],{"class":42},"      { url: ",[36,57802,57803],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,57805,57806],{"class":42},", title: ",[36,57808,57809],{"class":50},"'对人类来说会不会太超前了?'",[36,57811,57812],{"class":42},", color: ",[36,57814,57815],{"class":50},"'rgba(100,67,68)'",[36,57817,57818],{"class":42}," },\n",[36,57820,57821,57823,57826,57828,57831,57833,57836],{"class":38,"line":19223},[36,57822,57800],{"class":42},[36,57824,57825],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,57827,57806],{"class":42},[36,57829,57830],{"class":50},"'开启剑与雪的黑暗传说!'",[36,57832,57812],{"class":42},[36,57834,57835],{"class":50},"'rgba(43,35,26)'",[36,57837,57818],{"class":42},[36,57839,57840,57842,57845,57847,57850,57852,57855],{"class":38,"line":19228},[36,57841,57800],{"class":42},[36,57843,57844],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,57846,57806],{"class":42},[36,57848,57849],{"class":50},"'真正的jo厨出现了!'",[36,57851,57812],{"class":42},[36,57853,57854],{"class":50},"'rgba(36,31,33)'",[36,57856,57818],{"class":42},[36,57858,57859,57861,57864,57866,57869,57871,57874],{"class":38,"line":19242},[36,57860,57800],{"class":42},[36,57862,57863],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,57865,57806],{"class":42},[36,57867,57868],{"class":50},"'李玉刚:让世界通过b站看到东方大国文化'",[36,57870,57812],{"class":42},[36,57872,57873],{"class":50},"'rgba(139,98,66)'",[36,57875,57818],{"class":42},[36,57877,57878,57880,57883,57885,57888,57890,57893],{"class":38,"line":19254},[36,57879,57800],{"class":42},[36,57881,57882],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,57884,57806],{"class":42},[36,57886,57887],{"class":50},"'快来分享你的寒假日常吧'",[36,57889,57812],{"class":42},[36,57891,57892],{"class":50},"'rgba(67,90,92)'",[36,57894,57818],{"class":42},[36,57896,57897,57899,57902,57904,57907,57909,57912],{"class":38,"line":19259},[36,57898,57800],{"class":42},[36,57900,57901],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,57903,57806],{"class":42},[36,57905,57906],{"class":50},"'哔哩哔哩小年YEAR'",[36,57908,57812],{"class":42},[36,57910,57911],{"class":50},"'rgba(166,131,143)'",[36,57913,57818],{"class":42},[36,57915,57916,57918,57921,57923,57926,57928,57931],{"class":38,"line":19272},[36,57917,57800],{"class":42},[36,57919,57920],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,57922,57806],{"class":42},[36,57924,57925],{"class":50},"'一站式解决你的电脑配置问题'",[36,57927,57812],{"class":42},[36,57929,57930],{"class":50},"'rgba(53,29,25)'",[36,57932,57818],{"class":42},[36,57934,57935,57937,57940,57942,57945,57947,57950],{"class":38,"line":19277},[36,57936,57800],{"class":42},[36,57938,57939],{"class":50},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,57941,57806],{"class":42},[36,57943,57944],{"class":50},"'谁不想和小猫咪贴贴呢?'",[36,57946,57812],{"class":42},[36,57948,57949],{"class":50},"'rgba(99,72,114)'",[36,57951,57952],{"class":42}," }\n",[36,57954,57955],{"class":38,"line":19282},[36,57956,55457],{"class":42},[36,57958,57959,57961,57964,57966,57968,57970,57972,57975],{"class":38,"line":19287},[36,57960,13599],{"class":46},[36,57962,57963],{"class":62}," img",[36,57965,15941],{"class":46},[36,57967,56744],{"class":42},[36,57969,56747],{"class":79},[36,57971,92],{"class":42},[36,57973,57974],{"class":50},"'.slider-wrapper img'",[36,57976,123],{"class":42},[36,57978,57979,57981,57983,57985,57987,57989,57991,57994],{"class":38,"line":19300},[36,57980,13599],{"class":46},[36,57982,9206],{"class":62},[36,57984,15941],{"class":46},[36,57986,56744],{"class":42},[36,57988,56747],{"class":79},[36,57990,92],{"class":42},[36,57992,57993],{"class":50},"'.slider-footer p'",[36,57995,123],{"class":42},[36,57997,57998,58000,58003,58005,58007,58009,58011,58014],{"class":38,"line":19305},[36,57999,13599],{"class":46},[36,58001,58002],{"class":62}," color",[36,58004,15941],{"class":46},[36,58006,56744],{"class":42},[36,58008,56747],{"class":79},[36,58010,92],{"class":42},[36,58012,58013],{"class":50},"'.slider-footer'",[36,58015,123],{"class":42},[36,58017,58018,58020,58023,58025,58027,58030,58032,58035],{"class":38,"line":34985},[36,58019,13599],{"class":46},[36,58021,58022],{"class":62}," lis",[36,58024,15941],{"class":46},[36,58026,56744],{"class":42},[36,58028,58029],{"class":79},"querySelectorAll",[36,58031,92],{"class":42},[36,58033,58034],{"class":50},"'.slider-footer ul li'",[36,58036,123],{"class":42},[36,58038,58039,58041,58043,58045],{"class":38,"line":34991},[36,58040,54567],{"class":46},[36,58042,11818],{"class":42},[36,58044,47],{"class":46},[36,58046,58047],{"class":62}," 1\n",[36,58049,58050,58052,58055,58057,58059,58061,58063],{"class":38,"line":34997},[36,58051,54567],{"class":46},[36,58053,58054],{"class":42}," timer ",[36,58056,47],{"class":46},[36,58058,56792],{"class":79},[36,58060,92],{"class":42},[36,58062,56797],{"class":46},[36,58064,56800],{"class":42},[36,58066,58067,58070,58072],{"class":38,"line":35003},[36,58068,58069],{"class":42},"      img.src ",[36,58071,47],{"class":46},[36,58073,58074],{"class":42}," arrImage[i].url\n",[36,58076,58077,58080,58082],{"class":38,"line":35009},[36,58078,58079],{"class":42},"      p.innerHTML ",[36,58081,47],{"class":46},[36,58083,58084],{"class":42}," arrImage[i].title\n",[36,58086,58087,58090,58092],{"class":38,"line":35020},[36,58088,58089],{"class":42},"      color.style.backgroundColor ",[36,58091,47],{"class":46},[36,58093,58094],{"class":42}," arrImage[i].color\n",[36,58096,58097],{"class":38,"line":35026},[36,58098,58099],{"class":2621},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,58101,58102],{"class":38,"line":35046},[36,58103,58104],{"class":2621},"      \u002F\u002F li.classList.add('activate')\n",[36,58106,58107],{"class":38,"line":35052},[36,58108,58109],{"class":2621},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,58111,58112],{"class":38,"line":35063},[36,58113,58114],{"class":2621},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,58116,58117,58120,58122,58124,58127,58130,58133,58135,58138],{"class":38,"line":35069},[36,58118,58119],{"class":42},"      document.",[36,58121,56747],{"class":79},[36,58123,92],{"class":42},[36,58125,58126],{"class":50},"'.activate'",[36,58128,58129],{"class":42},")?.classList.",[36,58131,58132],{"class":79},"toggle",[36,58134,92],{"class":42},[36,58136,58137],{"class":50},"'activate'",[36,58139,123],{"class":42},[36,58141,58142,58145,58147,58149,58151],{"class":38,"line":35075},[36,58143,58144],{"class":42},"      lis[i].classList.",[36,58146,7716],{"class":79},[36,58148,92],{"class":42},[36,58150,58137],{"class":50},[36,58152,123],{"class":42},[36,58154,58155],{"class":38,"line":35081},[36,58156,70],{"emptyLinePlaceholder":69},[36,58158,58159,58162,58164,58166,58168,58170,58172,58174,58177],{"class":38,"line":35087},[36,58160,58161],{"class":42},"      i ",[36,58163,47],{"class":46},[36,58165,56831],{"class":42},[36,58167,1885],{"class":46},[36,58169,27489],{"class":62},[36,58171,16091],{"class":42},[36,58173,2884],{"class":46},[36,58175,58176],{"class":42}," arrImage.",[36,58178,58179],{"class":62},"length\n",[36,58181,58182],{"class":38,"line":35093},[36,58183,70],{"emptyLinePlaceholder":69},[36,58185,58186,58188,58190],{"class":38,"line":35099},[36,58187,56883],{"class":42},[36,58189,1048],{"class":62},[36,58191,123],{"class":42},[36,58193,58194,58196,58198],{"class":38,"line":35105},[36,58195,54765],{"class":42},[36,58197,54161],{"class":53649},[36,58199,53656],{"class":42},[36,58201,58202,58204,58206],{"class":38,"line":35125},[36,58203,54133],{"class":42},[36,58205,54148],{"class":53649},[36,58207,53656],{"class":42},[36,58209,58210],{"class":38,"line":35131},[36,58211,70],{"emptyLinePlaceholder":69},[36,58213,58214,58216,58218],{"class":38,"line":35147},[36,58215,54133],{"class":42},[36,58217,52984],{"class":53649},[36,58219,53656],{"class":42},[19,58221,58222],{},[3879,58223],{"alt":31,"src":58224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58226,58227],{},"?.就是短路保护,确保输出正常进行",[19,58229,58230],{},"不要忘记取余%,有时候可以用",[19,58232,58233],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[650,58235,58236],{"start":54},[653,58237,58238],{},"法2",[26,58240,58242],{"className":52982,"code":58241,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,58243,58244,58254,58268,58272,58280,58294,58314,58326,58334,58340,58350,58360,58364,58368,58374,58384,58388,58392,58398,58408,58420,58432,58446,58450,58454,58460,58470,58480,58490,58502,58514,58524,58528,58532,58540,58550,58562,58574,58586,58590,58594,58600,58610,58622,58634,58644,58654,58664,58676,58688,58692,58696,58704,58716,58728,58754,58766,58770,58774,58780,58790,58794,58802,58810,58814,58822,58836,58850,58870,58878,58892,58904,58912,58930,58942,58954,58966,58978,58990,59002,59014,59022,59030,59038,59046,59057,59073,59089,59105,59121,59137,59153,59169,59185,59189,59194,59212,59230,59240,59245,59250,59261,59267,59282,59291,59295,59300,59309,59314,59323,59328,59333,59338,59361,59391,59395,59403,59407,59415,59423,59427],{"__ignoreMap":31},[36,58245,58246,58248,58250,58252],{"class":38,"line":39},[36,58247,53646],{"class":42},[36,58249,53650],{"class":53649},[36,58251,53653],{"class":79},[36,58253,53656],{"class":42},[36,58255,58256,58258,58260,58262,58264,58266],{"class":38,"line":54},[36,58257,3463],{"class":42},[36,58259,52984],{"class":53649},[36,58261,53665],{"class":79},[36,58263,47],{"class":42},[36,58265,53670],{"class":50},[36,58267,53656],{"class":42},[36,58269,58270],{"class":38,"line":66},[36,58271,70],{"emptyLinePlaceholder":69},[36,58273,58274,58276,58278],{"class":38,"line":73},[36,58275,3463],{"class":42},[36,58277,53683],{"class":53649},[36,58279,53656],{"class":42},[36,58281,58282,58284,58286,58288,58290,58292],{"class":38,"line":86},[36,58283,54492],{"class":42},[36,58285,53693],{"class":53649},[36,58287,53696],{"class":79},[36,58289,47],{"class":42},[36,58291,53701],{"class":50},[36,58293,53656],{"class":42},[36,58295,58296,58298,58300,58302,58304,58306,58308,58310,58312],{"class":38,"line":126},[36,58297,54492],{"class":42},[36,58299,53693],{"class":53649},[36,58301,17295],{"class":79},[36,58303,47],{"class":42},[36,58305,53740],{"class":50},[36,58307,53720],{"class":79},[36,58309,47],{"class":42},[36,58311,53747],{"class":50},[36,58313,53656],{"class":42},[36,58315,58316,58318,58320,58322,58324],{"class":38,"line":131},[36,58317,54492],{"class":42},[36,58319,53756],{"class":53649},[36,58321,53759],{"class":42},[36,58323,53756],{"class":53649},[36,58325,53656],{"class":42},[36,58327,58328,58330,58332],{"class":38,"line":225},[36,58329,54492],{"class":42},[36,58331,2467],{"class":53649},[36,58333,53656],{"class":42},[36,58335,58336,58338],{"class":38,"line":235},[36,58337,8785],{"class":53649},[36,58339,2150],{"class":42},[36,58341,58342,58344,58346,58348],{"class":38,"line":377},[36,58343,57043],{"class":62},[36,58345,2158],{"class":42},[36,58347,2751],{"class":62},[36,58349,3711],{"class":42},[36,58351,58352,58354,58356,58358],{"class":38,"line":617},[36,58353,57054],{"class":62},[36,58355,2158],{"class":42},[36,58357,2751],{"class":62},[36,58359,3711],{"class":42},[36,58361,58362],{"class":38,"line":643},[36,58363,4580],{"class":42},[36,58365,58366],{"class":38,"line":921},[36,58367,70],{"emptyLinePlaceholder":69},[36,58369,58370,58372],{"class":38,"line":934},[36,58371,57073],{"class":53649},[36,58373,2150],{"class":42},[36,58375,58376,58378,58380,58382],{"class":38,"line":939},[36,58377,57080],{"class":62},[36,58379,2158],{"class":42},[36,58381,57085],{"class":62},[36,58383,3711],{"class":42},[36,58385,58386],{"class":38,"line":949},[36,58387,4580],{"class":42},[36,58389,58390],{"class":38,"line":962},[36,58391,70],{"emptyLinePlaceholder":69},[36,58393,58394,58396],{"class":38,"line":974},[36,58395,57100],{"class":79},[36,58397,2150],{"class":42},[36,58399,58400,58402,58404,58406],{"class":38,"line":979},[36,58401,57107],{"class":62},[36,58403,2158],{"class":42},[36,58405,57112],{"class":62},[36,58407,3711],{"class":42},[36,58409,58410,58412,58414,58416,58418],{"class":38,"line":994},[36,58411,57119],{"class":62},[36,58413,2158],{"class":42},[36,58415,57124],{"class":62},[36,58417,53840],{"class":46},[36,58419,3711],{"class":42},[36,58421,58422,58424,58426,58428,58430],{"class":38,"line":1006},[36,58423,57133],{"class":62},[36,58425,2158],{"class":42},[36,58427,3956],{"class":62},[36,58429,53840],{"class":46},[36,58431,3711],{"class":42},[36,58433,58434,58436,58438,58440,58442,58444],{"class":38,"line":1011},[36,58435,57054],{"class":62},[36,58437,2158],{"class":42},[36,58439,1070],{"class":62},[36,58441,53840],{"class":46},[36,58443,53904],{"class":62},[36,58445,3711],{"class":42},[36,58447,58448],{"class":38,"line":1023},[36,58449,4580],{"class":42},[36,58451,58452],{"class":38,"line":1028},[36,58453,70],{"emptyLinePlaceholder":69},[36,58455,58456,58458],{"class":38,"line":1033},[36,58457,57168],{"class":79},[36,58459,2150],{"class":42},[36,58461,58462,58464,58466,58468],{"class":38,"line":1053},[36,58463,57107],{"class":62},[36,58465,2158],{"class":42},[36,58467,57179],{"class":62},[36,58469,3711],{"class":42},[36,58471,58472,58474,58476,58478],{"class":38,"line":1064},[36,58473,57186],{"class":62},[36,58475,2158],{"class":42},[36,58477,2751],{"class":62},[36,58479,3711],{"class":42},[36,58481,58482,58484,58486,58488],{"class":38,"line":1075},[36,58483,57197],{"class":62},[36,58485,2158],{"class":42},[36,58487,2751],{"class":62},[36,58489,3711],{"class":42},[36,58491,58492,58494,58496,58498,58500],{"class":38,"line":2291},[36,58493,57119],{"class":62},[36,58495,2158],{"class":42},[36,58497,1070],{"class":62},[36,58499,2884],{"class":46},[36,58501,3711],{"class":42},[36,58503,58504,58506,58508,58510,58512],{"class":38,"line":2329},[36,58505,57133],{"class":62},[36,58507,2158],{"class":42},[36,58509,3130],{"class":62},[36,58511,2884],{"class":46},[36,58513,3711],{"class":42},[36,58515,58516,58518,58520,58522],{"class":38,"line":2334},[36,58517,57232],{"class":62},[36,58519,2158],{"class":42},[36,58521,57237],{"class":62},[36,58523,3711],{"class":42},[36,58525,58526],{"class":38,"line":2339},[36,58527,4580],{"class":42},[36,58529,58530],{"class":38,"line":2365},[36,58531,70],{"emptyLinePlaceholder":69},[36,58533,58534,58536,58538],{"class":38,"line":2373},[36,58535,57168],{"class":79},[36,58537,9206],{"class":53649},[36,58539,2150],{"class":42},[36,58541,58542,58544,58546,58548],{"class":38,"line":5001},[36,58543,57107],{"class":62},[36,58545,2158],{"class":42},[36,58547,57179],{"class":62},[36,58549,3711],{"class":42},[36,58551,58552,58554,58556,58558,58560],{"class":38,"line":5006},[36,58553,57270],{"class":62},[36,58555,2158],{"class":42},[36,58557,3454],{"class":62},[36,58559,53840],{"class":46},[36,58561,3711],{"class":42},[36,58563,58564,58566,58568,58570,58572],{"class":38,"line":10328},[36,58565,57186],{"class":62},[36,58567,2158],{"class":42},[36,58569,3254],{"class":62},[36,58571,53840],{"class":46},[36,58573,3711],{"class":42},[36,58575,58576,58578,58580,58582,58584],{"class":38,"line":10352},[36,58577,57295],{"class":62},[36,58579,2158],{"class":42},[36,58581,2875],{"class":62},[36,58583,53840],{"class":46},[36,58585,3711],{"class":42},[36,58587,58588],{"class":38,"line":10357},[36,58589,4580],{"class":42},[36,58591,58592],{"class":38,"line":10363},[36,58593,70],{"emptyLinePlaceholder":69},[36,58595,58596,58598],{"class":38,"line":10390},[36,58597,57316],{"class":53649},[36,58599,2150],{"class":42},[36,58601,58602,58604,58606,58608],{"class":38,"line":10395},[36,58603,57107],{"class":62},[36,58605,2158],{"class":42},[36,58607,57179],{"class":62},[36,58609,3711],{"class":42},[36,58611,58612,58614,58616,58618,58620],{"class":38,"line":10401},[36,58613,57295],{"class":62},[36,58615,2158],{"class":42},[36,58617,3335],{"class":62},[36,58619,53840],{"class":46},[36,58621,3711],{"class":42},[36,58623,58624,58626,58628,58630,58632],{"class":38,"line":10413},[36,58625,57186],{"class":62},[36,58627,2158],{"class":42},[36,58629,3254],{"class":62},[36,58631,53840],{"class":46},[36,58633,3711],{"class":42},[36,58635,58636,58638,58640,58642],{"class":38,"line":10425},[36,58637,57357],{"class":62},[36,58639,2158],{"class":42},[36,58641,53825],{"class":62},[36,58643,3711],{"class":42},[36,58645,58646,58648,58650,58652],{"class":38,"line":10437},[36,58647,57368],{"class":62},[36,58649,2158],{"class":42},[36,58651,54016],{"class":62},[36,58653,3711],{"class":42},[36,58655,58656,58658,58660,58662],{"class":38,"line":12095},[36,58657,57107],{"class":62},[36,58659,2158],{"class":42},[36,58661,57179],{"class":62},[36,58663,3711],{"class":42},[36,58665,58666,58668,58670,58672,58674],{"class":38,"line":12120},[36,58667,57119],{"class":62},[36,58669,2158],{"class":42},[36,58671,6376],{"class":62},[36,58673,53840],{"class":46},[36,58675,3711],{"class":42},[36,58677,58678,58680,58682,58684,58686],{"class":38,"line":12143},[36,58679,57133],{"class":62},[36,58681,2158],{"class":42},[36,58683,3254],{"class":62},[36,58685,53840],{"class":46},[36,58687,3711],{"class":42},[36,58689,58690],{"class":38,"line":12167},[36,58691,4580],{"class":42},[36,58693,58694],{"class":38,"line":12172},[36,58695,70],{"emptyLinePlaceholder":69},[36,58697,58698,58700,58702],{"class":38,"line":12177},[36,58699,57316],{"class":53649},[36,58701,57423],{"class":53649},[36,58703,2150],{"class":42},[36,58705,58706,58708,58710,58712,58714],{"class":38,"line":12182},[36,58707,57119],{"class":62},[36,58709,2158],{"class":42},[36,58711,3254],{"class":62},[36,58713,53840],{"class":46},[36,58715,3711],{"class":42},[36,58717,58718,58720,58722,58724,58726],{"class":38,"line":12191},[36,58719,57133],{"class":62},[36,58721,2158],{"class":42},[36,58723,3254],{"class":62},[36,58725,53840],{"class":46},[36,58727,3711],{"class":42},[36,58729,58730,58732,58734,58736,58738,58740,58742,58744,58746,58748,58750,58752],{"class":38,"line":12196},[36,58731,57232],{"class":62},[36,58733,2158],{"class":42},[36,58735,57458],{"class":62},[36,58737,92],{"class":42},[36,58739,2751],{"class":62},[36,58741,630],{"class":42},[36,58743,2751],{"class":62},[36,58745,630],{"class":42},[36,58747,2751],{"class":62},[36,58749,630],{"class":42},[36,58751,57475],{"class":62},[36,58753,5104],{"class":42},[36,58755,58756,58758,58760,58762,58764],{"class":38,"line":12202},[36,58757,57482],{"class":62},[36,58759,2158],{"class":42},[36,58761,3002],{"class":62},[36,58763,53840],{"class":46},[36,58765,3711],{"class":42},[36,58767,58768],{"class":38,"line":12223},[36,58769,4580],{"class":42},[36,58771,58772],{"class":38,"line":12229},[36,58773,70],{"emptyLinePlaceholder":69},[36,58775,58776,58778],{"class":38,"line":12243},[36,58777,57503],{"class":79},[36,58779,2150],{"class":42},[36,58781,58782,58784,58786,58788],{"class":38,"line":12249},[36,58783,57232],{"class":62},[36,58785,2158],{"class":42},[36,58787,57514],{"class":62},[36,58789,3711],{"class":42},[36,58791,58792],{"class":38,"line":12276},[36,58793,4580],{"class":42},[36,58795,58796,58798,58800],{"class":38,"line":12285},[36,58797,54765],{"class":42},[36,58799,2467],{"class":53649},[36,58801,53656],{"class":42},[36,58803,58804,58806,58808],{"class":38,"line":12291},[36,58805,54133],{"class":42},[36,58807,53683],{"class":53649},[36,58809,53656],{"class":42},[36,58811,58812],{"class":38,"line":12299},[36,58813,70],{"emptyLinePlaceholder":69},[36,58815,58816,58818,58820],{"class":38,"line":12304},[36,58817,3463],{"class":42},[36,58819,54148],{"class":53649},[36,58821,53656],{"class":42},[36,58823,58824,58826,58828,58830,58832,58834],{"class":38,"line":18977},[36,58825,54492],{"class":42},[36,58827,53959],{"class":53649},[36,58829,55834],{"class":79},[36,58831,47],{"class":42},[36,58833,55839],{"class":50},[36,58835,53656],{"class":42},[36,58837,58838,58840,58842,58844,58846,58848],{"class":38,"line":18983},[36,58839,53690],{"class":42},[36,58841,53959],{"class":53649},[36,58843,55834],{"class":79},[36,58845,47],{"class":42},[36,58847,57575],{"class":50},[36,58849,53656],{"class":42},[36,58851,58852,58854,58856,58858,58860,58862,58864,58866,58868],{"class":38,"line":19006},[36,58853,57582],{"class":42},[36,58855,3879],{"class":53649},[36,58857,57587],{"class":79},[36,58859,47],{"class":42},[36,58861,57592],{"class":50},[36,58863,57595],{"class":79},[36,58865,47],{"class":42},[36,58867,10033],{"class":50},[36,58869,53656],{"class":42},[36,58871,58872,58874,58876],{"class":38,"line":19012},[36,58873,54124],{"class":42},[36,58875,53959],{"class":53649},[36,58877,53656],{"class":42},[36,58879,58880,58882,58884,58886,58888,58890],{"class":38,"line":19035},[36,58881,53690],{"class":42},[36,58883,53959],{"class":53649},[36,58885,55834],{"class":79},[36,58887,47],{"class":42},[36,58889,57622],{"class":50},[36,58891,53656],{"class":42},[36,58893,58894,58896,58898,58900,58902],{"class":38,"line":19049},[36,58895,57582],{"class":42},[36,58897,19],{"class":53649},[36,58899,57633],{"class":42},[36,58901,19],{"class":53649},[36,58903,53656],{"class":42},[36,58905,58906,58908,58910],{"class":38,"line":19069},[36,58907,57582],{"class":42},[36,58909,3557],{"class":53649},[36,58911,53656],{"class":42},[36,58913,58914,58916,58918,58920,58922,58924,58926,58928],{"class":38,"line":19075},[36,58915,57650],{"class":42},[36,58917,653],{"class":53649},[36,58919,55834],{"class":79},[36,58921,47],{"class":42},[36,58923,57659],{"class":50},[36,58925,57662],{"class":42},[36,58927,653],{"class":53649},[36,58929,53656],{"class":42},[36,58931,58932,58934,58936,58938,58940],{"class":38,"line":19086},[36,58933,57650],{"class":42},[36,58935,653],{"class":53649},[36,58937,57662],{"class":42},[36,58939,653],{"class":53649},[36,58941,53656],{"class":42},[36,58943,58944,58946,58948,58950,58952],{"class":38,"line":19109},[36,58945,57650],{"class":42},[36,58947,653],{"class":53649},[36,58949,57662],{"class":42},[36,58951,653],{"class":53649},[36,58953,53656],{"class":42},[36,58955,58956,58958,58960,58962,58964],{"class":38,"line":19131},[36,58957,57650],{"class":42},[36,58959,653],{"class":53649},[36,58961,57662],{"class":42},[36,58963,653],{"class":53649},[36,58965,53656],{"class":42},[36,58967,58968,58970,58972,58974,58976],{"class":38,"line":19136},[36,58969,57650],{"class":42},[36,58971,653],{"class":53649},[36,58973,57662],{"class":42},[36,58975,653],{"class":53649},[36,58977,53656],{"class":42},[36,58979,58980,58982,58984,58986,58988],{"class":38,"line":19142},[36,58981,57650],{"class":42},[36,58983,653],{"class":53649},[36,58985,57662],{"class":42},[36,58987,653],{"class":53649},[36,58989,53656],{"class":42},[36,58991,58992,58994,58996,58998,59000],{"class":38,"line":19156},[36,58993,57650],{"class":42},[36,58995,653],{"class":53649},[36,58997,57662],{"class":42},[36,58999,653],{"class":53649},[36,59001,53656],{"class":42},[36,59003,59004,59006,59008,59010,59012],{"class":38,"line":19169},[36,59005,57650],{"class":42},[36,59007,653],{"class":53649},[36,59009,57662],{"class":42},[36,59011,653],{"class":53649},[36,59013,53656],{"class":42},[36,59015,59016,59018,59020],{"class":38,"line":19174},[36,59017,57755],{"class":42},[36,59019,3557],{"class":53649},[36,59021,53656],{"class":42},[36,59023,59024,59026,59028],{"class":38,"line":19188},[36,59025,54124],{"class":42},[36,59027,53959],{"class":53649},[36,59029,53656],{"class":42},[36,59031,59032,59034,59036],{"class":38,"line":19193},[36,59033,54765],{"class":42},[36,59035,53959],{"class":53649},[36,59037,53656],{"class":42},[36,59039,59040,59042,59044],{"class":38,"line":19199},[36,59041,54492],{"class":42},[36,59043,54161],{"class":53649},[36,59045,53656],{"class":42},[36,59047,59048,59050,59053,59055],{"class":38,"line":19204},[36,59049,13599],{"class":46},[36,59051,59052],{"class":62}," sliderData",[36,59054,15941],{"class":46},[36,59056,57795],{"class":42},[36,59058,59059,59061,59063,59065,59067,59069,59071],{"class":38,"line":19218},[36,59060,57800],{"class":42},[36,59062,57803],{"class":50},[36,59064,57806],{"class":42},[36,59066,57809],{"class":50},[36,59068,57812],{"class":42},[36,59070,57815],{"class":50},[36,59072,57818],{"class":42},[36,59074,59075,59077,59079,59081,59083,59085,59087],{"class":38,"line":19223},[36,59076,57800],{"class":42},[36,59078,57825],{"class":50},[36,59080,57806],{"class":42},[36,59082,57830],{"class":50},[36,59084,57812],{"class":42},[36,59086,57835],{"class":50},[36,59088,57818],{"class":42},[36,59090,59091,59093,59095,59097,59099,59101,59103],{"class":38,"line":19228},[36,59092,57800],{"class":42},[36,59094,57844],{"class":50},[36,59096,57806],{"class":42},[36,59098,57849],{"class":50},[36,59100,57812],{"class":42},[36,59102,57854],{"class":50},[36,59104,57818],{"class":42},[36,59106,59107,59109,59111,59113,59115,59117,59119],{"class":38,"line":19242},[36,59108,57800],{"class":42},[36,59110,57863],{"class":50},[36,59112,57806],{"class":42},[36,59114,57868],{"class":50},[36,59116,57812],{"class":42},[36,59118,57873],{"class":50},[36,59120,57818],{"class":42},[36,59122,59123,59125,59127,59129,59131,59133,59135],{"class":38,"line":19254},[36,59124,57800],{"class":42},[36,59126,57882],{"class":50},[36,59128,57806],{"class":42},[36,59130,57887],{"class":50},[36,59132,57812],{"class":42},[36,59134,57892],{"class":50},[36,59136,57818],{"class":42},[36,59138,59139,59141,59143,59145,59147,59149,59151],{"class":38,"line":19259},[36,59140,57800],{"class":42},[36,59142,57901],{"class":50},[36,59144,57806],{"class":42},[36,59146,57906],{"class":50},[36,59148,57812],{"class":42},[36,59150,57911],{"class":50},[36,59152,57818],{"class":42},[36,59154,59155,59157,59159,59161,59163,59165,59167],{"class":38,"line":19272},[36,59156,57800],{"class":42},[36,59158,57920],{"class":50},[36,59160,57806],{"class":42},[36,59162,57925],{"class":50},[36,59164,57812],{"class":42},[36,59166,57930],{"class":50},[36,59168,57818],{"class":42},[36,59170,59171,59173,59175,59177,59179,59181,59183],{"class":38,"line":19277},[36,59172,57800],{"class":42},[36,59174,57939],{"class":50},[36,59176,57806],{"class":42},[36,59178,57944],{"class":50},[36,59180,57812],{"class":42},[36,59182,57949],{"class":50},[36,59184,57952],{"class":42},[36,59186,59187],{"class":38,"line":19282},[36,59188,55457],{"class":42},[36,59190,59191],{"class":38,"line":19287},[36,59192,59193],{"class":2621},"    \u002F\u002F 1.获取元素\n",[36,59195,59196,59198,59200,59202,59204,59206,59208,59210],{"class":38,"line":19300},[36,59197,13599],{"class":46},[36,59199,57963],{"class":62},[36,59201,15941],{"class":46},[36,59203,56744],{"class":42},[36,59205,56747],{"class":79},[36,59207,92],{"class":42},[36,59209,57974],{"class":50},[36,59211,123],{"class":42},[36,59213,59214,59216,59218,59220,59222,59224,59226,59228],{"class":38,"line":19305},[36,59215,13599],{"class":46},[36,59217,9206],{"class":62},[36,59219,15941],{"class":46},[36,59221,56744],{"class":42},[36,59223,56747],{"class":79},[36,59225,92],{"class":42},[36,59227,57993],{"class":50},[36,59229,123],{"class":42},[36,59231,59232,59234,59236,59238],{"class":38,"line":34985},[36,59233,54567],{"class":46},[36,59235,11818],{"class":42},[36,59237,47],{"class":46},[36,59239,49682],{"class":62},[36,59241,59242],{"class":38,"line":34991},[36,59243,59244],{"class":2621},"    \u002F\u002F 2.开启定时器\n",[36,59246,59247],{"class":38,"line":34997},[36,59248,59249],{"class":2621},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,59251,59252,59255,59257,59259],{"class":38,"line":35003},[36,59253,59254],{"class":79},"    setInterval",[36,59256,92],{"class":42},[36,59258,56797],{"class":46},[36,59260,56800],{"class":42},[36,59262,59263,59265],{"class":38,"line":35009},[36,59264,56805],{"class":42},[36,59266,5087],{"class":46},[36,59268,59269,59271,59273,59275,59278,59280],{"class":38,"line":35020},[36,59270,56828],{"class":46},[36,59272,56831],{"class":42},[36,59274,2127],{"class":46},[36,59276,59277],{"class":42}," sliderData.",[36,59279,54316],{"class":62},[36,59281,14819],{"class":42},[36,59283,59284,59287,59289],{"class":38,"line":35026},[36,59285,59286],{"class":42},"        i ",[36,59288,47],{"class":46},[36,59290,49682],{"class":62},[36,59292,59293],{"class":38,"line":35046},[36,59294,54746],{"class":42},[36,59296,59297],{"class":38,"line":35052},[36,59298,59299],{"class":2621},"      \u002F\u002F 更换图片路径\n",[36,59301,59302,59304,59306],{"class":38,"line":35063},[36,59303,58069],{"class":42},[36,59305,47],{"class":46},[36,59307,59308],{"class":42}," sliderData[i].url\n",[36,59310,59311],{"class":38,"line":35069},[36,59312,59313],{"class":2621},"      \u002F\u002F 把文字写到p里面\n",[36,59315,59316,59318,59320],{"class":38,"line":35075},[36,59317,58079],{"class":42},[36,59319,47],{"class":46},[36,59321,59322],{"class":42}," sliderData[i].title\n",[36,59324,59325],{"class":38,"line":35081},[36,59326,59327],{"class":2621},"      \u002F\u002F 小圆点\n",[36,59329,59330],{"class":38,"line":35087},[36,59331,59332],{"class":2621},"      \u002F\u002F 先删除以前的active\n",[36,59334,59335],{"class":38,"line":35093},[36,59336,59337],{"class":2621},"      \u002F\u002F 只让当前li添加active\n",[36,59339,59340,59342,59344,59346,59349,59352,59355,59357,59359],{"class":38,"line":35099},[36,59341,58119],{"class":42},[36,59343,56747],{"class":79},[36,59345,92],{"class":42},[36,59347,59348],{"class":50},"'.slider-footer .activate'",[36,59350,59351],{"class":42},").classList.",[36,59353,59354],{"class":79},"remove",[36,59356,92],{"class":42},[36,59358,58137],{"class":50},[36,59360,123],{"class":42},[36,59362,59363,59365,59367,59369,59372,59374,59376,59378,59381,59383,59385,59387,59389],{"class":38,"line":35105},[36,59364,58119],{"class":42},[36,59366,56747],{"class":79},[36,59368,92],{"class":42},[36,59370,59371],{"class":50},"`.slider-footer ul li:nth-child(${",[36,59373,2997],{"class":42},[36,59375,47915],{"class":46},[36,59377,27489],{"class":62},[36,59379,59380],{"class":50},"})`",[36,59382,59351],{"class":42},[36,59384,7716],{"class":79},[36,59386,92],{"class":42},[36,59388,58137],{"class":50},[36,59390,123],{"class":42},[36,59392,59393],{"class":38,"line":35125},[36,59394,70],{"emptyLinePlaceholder":69},[36,59396,59397,59399,59401],{"class":38,"line":35131},[36,59398,56883],{"class":42},[36,59400,1048],{"class":62},[36,59402,123],{"class":42},[36,59404,59405],{"class":38,"line":35147},[36,59406,70],{"emptyLinePlaceholder":69},[36,59408,59409,59411,59413],{"class":38,"line":35153},[36,59410,54765],{"class":42},[36,59412,54161],{"class":53649},[36,59414,53656],{"class":42},[36,59416,59417,59419,59421],{"class":38,"line":35167},[36,59418,54133],{"class":42},[36,59420,54148],{"class":53649},[36,59422,53656],{"class":42},[36,59424,59425],{"class":38,"line":35173},[36,59426,70],{"emptyLinePlaceholder":69},[36,59428,59429,59431,59433],{"class":38,"line":35188},[36,59430,54133],{"class":42},[36,59432,52984],{"class":53649},[36,59434,53656],{"class":42},[1752,59436,59438],{"id":59437},"_317-重要知识点","3.1.7 重要知识点",[19,59440,59441,59442],{},"浏览器在渲染文本时， ",[667,59443,59444],{},"没有空格或换行符就没有“断行点”",[19,59446,59447],{},[3879,59448],{"alt":31,"src":59449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59451,59452],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59454,59455],{},[3879,59456],{"alt":31,"src":59457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59459,59460],{},[3879,59461],{"alt":31,"src":59462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59464,59466],{"id":59465},"_32-dom事件基础","3.2 DOM事件基础",[1752,59468,59470],{"id":59469},"_321-事件监听","3.2.1 事件监听",[19,59472,59473],{},[3879,59474],{"alt":31,"src":59475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59477,59478],{},"事件监听有响应的发生",[19,59480,59481],{},[3879,59482],{"alt":31,"src":59483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59485,59486],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59488,59489],{},"对于有名函数,要执行的函数名后边不要加()",[1752,59491,59493],{"id":59492},"_322-随机点名案例","3.2.2 随机点名案例",[26,59495,59497],{"className":52982,"code":59496,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,59498,59499,59509,59523,59527,59535,59549,59569,59581,59589,59595,59605,59615,59619,59623,59630,59641,59645,59649,59655,59667,59681,59691,59703,59716,59720,59724,59731,59735,59748,59760,59772,59776,59780,59784,59791,59801,59805,59809,59818,59830,59842,59857,59861,59869,59877,59881,59889,59902,59916,59929,59949,59957,59972,59992,60012,60020,60024,60032,60037,60073,60093,60098,60117,60122,60133,60138,60149,60154,60173,60188,60193,60219,60229,60238,60243,60259,60264,60269,60274,60289,60293,60297,60302,60321,60338,60346,60351,60366,60370,60374,60382,60390,60394],{"__ignoreMap":31},[36,59500,59501,59503,59505,59507],{"class":38,"line":39},[36,59502,53646],{"class":42},[36,59504,53650],{"class":53649},[36,59506,53653],{"class":79},[36,59508,53656],{"class":42},[36,59510,59511,59513,59515,59517,59519,59521],{"class":38,"line":54},[36,59512,3463],{"class":42},[36,59514,52984],{"class":53649},[36,59516,53665],{"class":79},[36,59518,47],{"class":42},[36,59520,53670],{"class":50},[36,59522,53656],{"class":42},[36,59524,59525],{"class":38,"line":66},[36,59526,70],{"emptyLinePlaceholder":69},[36,59528,59529,59531,59533],{"class":38,"line":73},[36,59530,3463],{"class":42},[36,59532,53683],{"class":53649},[36,59534,53656],{"class":42},[36,59536,59537,59539,59541,59543,59545,59547],{"class":38,"line":86},[36,59538,54492],{"class":42},[36,59540,53693],{"class":53649},[36,59542,53696],{"class":79},[36,59544,47],{"class":42},[36,59546,53701],{"class":50},[36,59548,53656],{"class":42},[36,59550,59551,59553,59555,59557,59559,59561,59563,59565,59567],{"class":38,"line":126},[36,59552,54492],{"class":42},[36,59554,53693],{"class":53649},[36,59556,17295],{"class":79},[36,59558,47],{"class":42},[36,59560,53740],{"class":50},[36,59562,53720],{"class":79},[36,59564,47],{"class":42},[36,59566,53747],{"class":50},[36,59568,53656],{"class":42},[36,59570,59571,59573,59575,59577,59579],{"class":38,"line":131},[36,59572,54492],{"class":42},[36,59574,53756],{"class":53649},[36,59576,53759],{"class":42},[36,59578,53756],{"class":53649},[36,59580,53656],{"class":42},[36,59582,59583,59585,59587],{"class":38,"line":225},[36,59584,54492],{"class":42},[36,59586,2467],{"class":53649},[36,59588,53656],{"class":42},[36,59590,59591,59593],{"class":38,"line":235},[36,59592,8785],{"class":53649},[36,59594,2150],{"class":42},[36,59596,59597,59599,59601,59603],{"class":38,"line":377},[36,59598,57054],{"class":62},[36,59600,2158],{"class":42},[36,59602,2751],{"class":62},[36,59604,3711],{"class":42},[36,59606,59607,59609,59611,59613],{"class":38,"line":617},[36,59608,57043],{"class":62},[36,59610,2158],{"class":42},[36,59612,2751],{"class":62},[36,59614,3711],{"class":42},[36,59616,59617],{"class":38,"line":643},[36,59618,4580],{"class":42},[36,59620,59621],{"class":38,"line":921},[36,59622,70],{"emptyLinePlaceholder":69},[36,59624,59625,59628],{"class":38,"line":934},[36,59626,59627],{"class":53649},"    h2",[36,59629,2150],{"class":42},[36,59631,59632,59635,59637,59639],{"class":38,"line":939},[36,59633,59634],{"class":62},"      text-align",[36,59636,2158],{"class":42},[36,59638,53940],{"class":62},[36,59640,3711],{"class":42},[36,59642,59643],{"class":38,"line":949},[36,59644,4580],{"class":42},[36,59646,59647],{"class":38,"line":962},[36,59648,70],{"emptyLinePlaceholder":69},[36,59650,59651,59653],{"class":38,"line":974},[36,59652,57100],{"class":79},[36,59654,2150],{"class":42},[36,59656,59657,59659,59661,59663,59665],{"class":38,"line":979},[36,59658,57119],{"class":62},[36,59660,2158],{"class":42},[36,59662,3956],{"class":62},[36,59664,53840],{"class":46},[36,59666,3711],{"class":42},[36,59668,59669,59671,59673,59675,59677,59679],{"class":38,"line":994},[36,59670,57054],{"class":62},[36,59672,2158],{"class":42},[36,59674,3210],{"class":62},[36,59676,53840],{"class":46},[36,59678,53904],{"class":62},[36,59680,3711],{"class":42},[36,59682,59683,59685,59687,59689],{"class":38,"line":1006},[36,59684,57357],{"class":62},[36,59686,2158],{"class":42},[36,59688,53825],{"class":62},[36,59690,3711],{"class":42},[36,59692,59693,59695,59697,59699,59701],{"class":38,"line":1011},[36,59694,57270],{"class":62},[36,59696,2158],{"class":42},[36,59698,3379],{"class":62},[36,59700,53840],{"class":46},[36,59702,3711],{"class":42},[36,59704,59705,59708,59710,59712,59714],{"class":38,"line":1023},[36,59706,59707],{"class":62},"      line-height",[36,59709,2158],{"class":42},[36,59711,2957],{"class":62},[36,59713,53840],{"class":46},[36,59715,3711],{"class":42},[36,59717,59718],{"class":38,"line":1028},[36,59719,4580],{"class":42},[36,59721,59722],{"class":38,"line":1033},[36,59723,70],{"emptyLinePlaceholder":69},[36,59725,59726,59729],{"class":38,"line":1053},[36,59727,59728],{"class":79},"    .qs",[36,59730,2150],{"class":42},[36,59732,59733],{"class":38,"line":1064},[36,59734,70],{"emptyLinePlaceholder":69},[36,59736,59737,59739,59741,59744,59746],{"class":38,"line":1075},[36,59738,57119],{"class":62},[36,59740,2158],{"class":42},[36,59742,59743],{"class":62},"450",[36,59745,53840],{"class":46},[36,59747,3711],{"class":42},[36,59749,59750,59752,59754,59756,59758],{"class":38,"line":2291},[36,59751,57133],{"class":62},[36,59753,2158],{"class":42},[36,59755,2957],{"class":62},[36,59757,53840],{"class":46},[36,59759,3711],{"class":42},[36,59761,59762,59765,59767,59770],{"class":38,"line":2329},[36,59763,59764],{"class":62},"      color",[36,59766,2158],{"class":42},[36,59768,59769],{"class":62},"red",[36,59771,3711],{"class":42},[36,59773,59774],{"class":38,"line":2334},[36,59775,70],{"emptyLinePlaceholder":69},[36,59777,59778],{"class":38,"line":2339},[36,59779,4580],{"class":42},[36,59781,59782],{"class":38,"line":2365},[36,59783,70],{"emptyLinePlaceholder":69},[36,59785,59786,59789],{"class":38,"line":2373},[36,59787,59788],{"class":79},"    .btns",[36,59790,2150],{"class":42},[36,59792,59793,59795,59797,59799],{"class":38,"line":5001},[36,59794,59634],{"class":62},[36,59796,2158],{"class":42},[36,59798,53940],{"class":62},[36,59800,3711],{"class":42},[36,59802,59803],{"class":38,"line":5006},[36,59804,4580],{"class":42},[36,59806,59807],{"class":38,"line":10328},[36,59808,70],{"emptyLinePlaceholder":69},[36,59810,59811,59813,59816],{"class":38,"line":10352},[36,59812,59788],{"class":79},[36,59814,59815],{"class":53649}," button",[36,59817,2150],{"class":42},[36,59819,59820,59822,59824,59826,59828],{"class":38,"line":10357},[36,59821,57119],{"class":62},[36,59823,2158],{"class":42},[36,59825,3371],{"class":62},[36,59827,53840],{"class":46},[36,59829,3711],{"class":42},[36,59831,59832,59834,59836,59838,59840],{"class":38,"line":10363},[36,59833,57133],{"class":62},[36,59835,2158],{"class":42},[36,59837,2830],{"class":62},[36,59839,53840],{"class":46},[36,59841,3711],{"class":42},[36,59843,59844,59846,59848,59850,59853,59855],{"class":38,"line":10390},[36,59845,57054],{"class":62},[36,59847,2158],{"class":42},[36,59849,2751],{"class":62},[36,59851,59852],{"class":62}," 50",[36,59854,53840],{"class":46},[36,59856,3711],{"class":42},[36,59858,59859],{"class":38,"line":10395},[36,59860,4580],{"class":42},[36,59862,59863,59865,59867],{"class":38,"line":10401},[36,59864,54765],{"class":42},[36,59866,2467],{"class":53649},[36,59868,53656],{"class":42},[36,59870,59871,59873,59875],{"class":38,"line":10413},[36,59872,54133],{"class":42},[36,59874,53683],{"class":53649},[36,59876,53656],{"class":42},[36,59878,59879],{"class":38,"line":10425},[36,59880,70],{"emptyLinePlaceholder":69},[36,59882,59883,59885,59887],{"class":38,"line":10437},[36,59884,3463],{"class":42},[36,59886,54148],{"class":53649},[36,59888,53656],{"class":42},[36,59890,59891,59893,59895,59898,59900],{"class":38,"line":12095},[36,59892,54492],{"class":42},[36,59894,14],{"class":53649},[36,59896,59897],{"class":42},">随机点名\u003C\u002F",[36,59899,14],{"class":53649},[36,59901,53656],{"class":42},[36,59903,59904,59906,59908,59910,59912,59914],{"class":38,"line":12120},[36,59905,54492],{"class":42},[36,59907,53959],{"class":53649},[36,59909,55834],{"class":79},[36,59911,47],{"class":42},[36,59913,55839],{"class":50},[36,59915,53656],{"class":42},[36,59917,59918,59920,59922,59925,59927],{"class":38,"line":12143},[36,59919,53690],{"class":42},[36,59921,36],{"class":53649},[36,59923,59924],{"class":42},">名字是：\u003C\u002F",[36,59926,36],{"class":53649},[36,59928,53656],{"class":42},[36,59930,59931,59933,59935,59937,59939,59942,59945,59947],{"class":38,"line":12167},[36,59932,53690],{"class":42},[36,59934,53959],{"class":53649},[36,59936,55834],{"class":79},[36,59938,47],{"class":42},[36,59940,59941],{"class":50},"\"qs\"",[36,59943,59944],{"class":42},">这里显示姓名\u003C\u002F",[36,59946,53959],{"class":53649},[36,59948,53656],{"class":42},[36,59950,59951,59953,59955],{"class":38,"line":12172},[36,59952,54765],{"class":42},[36,59954,53959],{"class":53649},[36,59956,53656],{"class":42},[36,59958,59959,59961,59963,59965,59967,59970],{"class":38,"line":12177},[36,59960,54492],{"class":42},[36,59962,53959],{"class":53649},[36,59964,55834],{"class":79},[36,59966,47],{"class":42},[36,59968,59969],{"class":50},"\"btns\"",[36,59971,53656],{"class":42},[36,59973,59974,59976,59978,59980,59982,59985,59988,59990],{"class":38,"line":12182},[36,59975,53690],{"class":42},[36,59977,56235],{"class":53649},[36,59979,55834],{"class":79},[36,59981,47],{"class":42},[36,59983,59984],{"class":50},"\"start\"",[36,59986,59987],{"class":42},">开始\u003C\u002F",[36,59989,56235],{"class":53649},[36,59991,53656],{"class":42},[36,59993,59994,59996,59998,60000,60002,60005,60008,60010],{"class":38,"line":12191},[36,59995,53690],{"class":42},[36,59997,56235],{"class":53649},[36,59999,55834],{"class":79},[36,60001,47],{"class":42},[36,60003,60004],{"class":50},"\"end\"",[36,60006,60007],{"class":42},">结束\u003C\u002F",[36,60009,56235],{"class":53649},[36,60011,53656],{"class":42},[36,60013,60014,60016,60018],{"class":38,"line":12196},[36,60015,54765],{"class":42},[36,60017,53959],{"class":53649},[36,60019,53656],{"class":42},[36,60021,60022],{"class":38,"line":12202},[36,60023,70],{"emptyLinePlaceholder":69},[36,60025,60026,60028,60030],{"class":38,"line":12223},[36,60027,54492],{"class":42},[36,60029,54161],{"class":53649},[36,60031,53656],{"class":42},[36,60033,60034],{"class":38,"line":12229},[36,60035,60036],{"class":2621},"    \u002F\u002F 数据数组\n",[36,60038,60039,60041,60044,60046,60048,60051,60053,60056,60058,60061,60063,60066,60068,60071],{"class":38,"line":12243},[36,60040,13599],{"class":46},[36,60042,60043],{"class":62}," arr",[36,60045,15941],{"class":46},[36,60047,54574],{"class":42},[36,60049,60050],{"class":50},"'马超'",[36,60052,630],{"class":42},[36,60054,60055],{"class":50},"'黄忠'",[36,60057,630],{"class":42},[36,60059,60060],{"class":50},"'赵云'",[36,60062,630],{"class":42},[36,60064,60065],{"class":50},"'关羽'",[36,60067,630],{"class":42},[36,60069,60070],{"class":50},"'张飞'",[36,60072,35598],{"class":42},[36,60074,60075,60077,60080,60082,60084,60086,60088,60091],{"class":38,"line":12249},[36,60076,13599],{"class":46},[36,60078,60079],{"class":62}," qs",[36,60081,15941],{"class":46},[36,60083,56744],{"class":42},[36,60085,56747],{"class":79},[36,60087,92],{"class":42},[36,60089,60090],{"class":50},"'.qs'",[36,60092,123],{"class":42},[36,60094,60095],{"class":38,"line":12276},[36,60096,60097],{"class":2621},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,60099,60100,60102,60104,60106,60108,60110,60112,60115],{"class":38,"line":12285},[36,60101,13599],{"class":46},[36,60103,6567],{"class":62},[36,60105,15941],{"class":46},[36,60107,56744],{"class":42},[36,60109,56747],{"class":79},[36,60111,92],{"class":42},[36,60113,60114],{"class":50},"'.start'",[36,60116,123],{"class":42},[36,60118,60119],{"class":38,"line":12291},[36,60120,60121],{"class":2621},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,60123,60124,60126,60129,60131],{"class":38,"line":12299},[36,60125,54567],{"class":46},[36,60127,60128],{"class":42}," timerId ",[36,60130,47],{"class":46},[36,60132,49682],{"class":62},[36,60134,60135],{"class":38,"line":12304},[36,60136,60137],{"class":2621},"    \u002F\u002F 随机号要全局变量\n",[36,60139,60140,60142,60145,60147],{"class":38,"line":18977},[36,60141,54567],{"class":46},[36,60143,60144],{"class":42}," random ",[36,60146,47],{"class":46},[36,60148,49682],{"class":62},[36,60150,60151],{"class":38,"line":18983},[36,60152,60153],{"class":2621},"    \u002F\u002F 1.1 添加点击事件\n",[36,60155,60156,60159,60162,60164,60167,60169,60171],{"class":38,"line":19006},[36,60157,60158],{"class":42},"    start.",[36,60160,60161],{"class":79},"addEventListener",[36,60163,92],{"class":42},[36,60165,60166],{"class":50},"'click'",[36,60168,630],{"class":42},[36,60170,56797],{"class":46},[36,60172,56800],{"class":42},[36,60174,60175,60178,60180,60182,60184,60186],{"class":38,"line":19012},[36,60176,60177],{"class":42},"      timerId ",[36,60179,47],{"class":46},[36,60181,56792],{"class":79},[36,60183,92],{"class":42},[36,60185,56797],{"class":46},[36,60187,56800],{"class":42},[36,60189,60190],{"class":38,"line":19035},[36,60191,60192],{"class":2621},"        \u002F\u002F 随机数\n",[36,60194,60195,60198,60200,60203,60206,60209,60211,60213,60215,60217],{"class":38,"line":19049},[36,60196,60197],{"class":42},"        random ",[36,60199,47],{"class":46},[36,60201,60202],{"class":79}," parseInt",[36,60204,60205],{"class":42},"(Math.",[36,60207,60208],{"class":79},"random",[36,60210,15427],{"class":42},[36,60212,3011],{"class":46},[36,60214,54313],{"class":42},[36,60216,54316],{"class":62},[36,60218,123],{"class":42},[36,60220,60221,60224,60226],{"class":38,"line":19069},[36,60222,60223],{"class":42},"        qs.innerHTML ",[36,60225,47],{"class":46},[36,60227,60228],{"class":42}," arr[random]\n",[36,60230,60231,60234,60236],{"class":38,"line":19075},[36,60232,60233],{"class":42},"      }, ",[36,60235,2830],{"class":62},[36,60237,123],{"class":42},[36,60239,60240],{"class":38,"line":19086},[36,60241,60242],{"class":2621},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,60244,60245,60247,60250,60252,60255,60257],{"class":38,"line":19109},[36,60246,56828],{"class":46},[36,60248,60249],{"class":42}," (arr.",[36,60251,54316],{"class":62},[36,60253,60254],{"class":46}," ===",[36,60256,27489],{"class":62},[36,60258,14819],{"class":42},[36,60260,60261],{"class":38,"line":19131},[36,60262,60263],{"class":2621},"        \u002F\u002F start.disabled = true\n",[36,60265,60266],{"class":38,"line":19136},[36,60267,60268],{"class":2621},"        \u002F\u002F end.disabled = true\n",[36,60270,60271],{"class":38,"line":19142},[36,60272,60273],{"class":2621},"        \u002F\u002F 可以合起来写\n",[36,60275,60276,60279,60281,60284,60286],{"class":38,"line":19156},[36,60277,60278],{"class":42},"        start.disabled ",[36,60280,47],{"class":46},[36,60282,60283],{"class":42}," end.disabled ",[36,60285,47],{"class":46},[36,60287,60288],{"class":62}," true\n",[36,60290,60291],{"class":38,"line":19169},[36,60292,54746],{"class":42},[36,60294,60295],{"class":38,"line":19174},[36,60296,35813],{"class":42},[36,60298,60299],{"class":38,"line":19188},[36,60300,60301],{"class":2621},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,60303,60304,60306,60308,60310,60312,60314,60316,60319],{"class":38,"line":19193},[36,60305,13599],{"class":46},[36,60307,6583],{"class":62},[36,60309,15941],{"class":46},[36,60311,56744],{"class":42},[36,60313,56747],{"class":79},[36,60315,92],{"class":42},[36,60317,60318],{"class":50},"'.end'",[36,60320,123],{"class":42},[36,60322,60323,60326,60328,60330,60332,60334,60336],{"class":38,"line":19199},[36,60324,60325],{"class":42},"    end.",[36,60327,60161],{"class":79},[36,60329,92],{"class":42},[36,60331,60166],{"class":50},[36,60333,630],{"class":42},[36,60335,56797],{"class":46},[36,60337,56800],{"class":42},[36,60339,60340,60343],{"class":38,"line":19204},[36,60341,60342],{"class":79},"      clearInterval",[36,60344,60345],{"class":42},"(timerId)\n",[36,60347,60348],{"class":38,"line":19218},[36,60349,60350],{"class":2621},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,60352,60353,60356,60359,60362,60364],{"class":38,"line":19223},[36,60354,60355],{"class":42},"      arr.",[36,60357,60358],{"class":79},"splice",[36,60360,60361],{"class":42},"(random, ",[36,60363,1906],{"class":62},[36,60365,123],{"class":42},[36,60367,60368],{"class":38,"line":19228},[36,60369,35813],{"class":42},[36,60371,60372],{"class":38,"line":19242},[36,60373,70],{"emptyLinePlaceholder":69},[36,60375,60376,60378,60380],{"class":38,"line":19254},[36,60377,54765],{"class":42},[36,60379,54161],{"class":53649},[36,60381,53656],{"class":42},[36,60383,60384,60386,60388],{"class":38,"line":19259},[36,60385,54133],{"class":42},[36,60387,54148],{"class":53649},[36,60389,53656],{"class":42},[36,60391,60392],{"class":38,"line":19272},[36,60393,70],{"emptyLinePlaceholder":69},[36,60395,60396,60398,60400],{"class":38,"line":19277},[36,60397,54133],{"class":42},[36,60399,52984],{"class":53649},[36,60401,53656],{"class":42},[19,60403,60404],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1752,60406,60408],{"id":60407},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,60410,60412],{"className":52982,"code":60411,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,60413,60414,60424,60438,60442,60450,60464,60484,60496,60504,60508,60516,60528,60536,60555,60572,60588,60598,60602,60610,60618,60622],{"__ignoreMap":31},[36,60415,60416,60418,60420,60422],{"class":38,"line":39},[36,60417,53646],{"class":42},[36,60419,53650],{"class":53649},[36,60421,53653],{"class":79},[36,60423,53656],{"class":42},[36,60425,60426,60428,60430,60432,60434,60436],{"class":38,"line":54},[36,60427,3463],{"class":42},[36,60429,52984],{"class":53649},[36,60431,53665],{"class":79},[36,60433,47],{"class":42},[36,60435,53670],{"class":50},[36,60437,53656],{"class":42},[36,60439,60440],{"class":38,"line":66},[36,60441,70],{"emptyLinePlaceholder":69},[36,60443,60444,60446,60448],{"class":38,"line":73},[36,60445,3463],{"class":42},[36,60447,53683],{"class":53649},[36,60449,53656],{"class":42},[36,60451,60452,60454,60456,60458,60460,60462],{"class":38,"line":86},[36,60453,54492],{"class":42},[36,60455,53693],{"class":53649},[36,60457,53696],{"class":79},[36,60459,47],{"class":42},[36,60461,53701],{"class":50},[36,60463,53656],{"class":42},[36,60465,60466,60468,60470,60472,60474,60476,60478,60480,60482],{"class":38,"line":126},[36,60467,54492],{"class":42},[36,60469,53693],{"class":53649},[36,60471,17295],{"class":79},[36,60473,47],{"class":42},[36,60475,53740],{"class":50},[36,60477,53720],{"class":79},[36,60479,47],{"class":42},[36,60481,53747],{"class":50},[36,60483,53656],{"class":42},[36,60485,60486,60488,60490,60492,60494],{"class":38,"line":131},[36,60487,54492],{"class":42},[36,60489,53756],{"class":53649},[36,60491,53759],{"class":42},[36,60493,53756],{"class":53649},[36,60495,53656],{"class":42},[36,60497,60498,60500,60502],{"class":38,"line":225},[36,60499,54133],{"class":42},[36,60501,53683],{"class":53649},[36,60503,53656],{"class":42},[36,60505,60506],{"class":38,"line":235},[36,60507,70],{"emptyLinePlaceholder":69},[36,60509,60510,60512,60514],{"class":38,"line":377},[36,60511,3463],{"class":42},[36,60513,54148],{"class":53649},[36,60515,53656],{"class":42},[36,60517,60518,60520,60522,60524,60526],{"class":38,"line":617},[36,60519,54492],{"class":42},[36,60521,56235],{"class":53649},[36,60523,56241],{"class":42},[36,60525,56235],{"class":53649},[36,60527,53656],{"class":42},[36,60529,60530,60532,60534],{"class":38,"line":643},[36,60531,54492],{"class":42},[36,60533,54161],{"class":53649},[36,60535,53656],{"class":42},[36,60537,60538,60540,60542,60544,60546,60548,60550,60553],{"class":38,"line":921},[36,60539,13599],{"class":46},[36,60541,56739],{"class":62},[36,60543,15941],{"class":46},[36,60545,56744],{"class":42},[36,60547,56747],{"class":79},[36,60549,92],{"class":42},[36,60551,60552],{"class":50},"'button'",[36,60554,123],{"class":42},[36,60556,60557,60560,60562,60564,60566,60568,60570],{"class":38,"line":934},[36,60558,60559],{"class":42},"    btn.",[36,60561,60161],{"class":79},[36,60563,92],{"class":42},[36,60565,60166],{"class":50},[36,60567,630],{"class":42},[36,60569,56797],{"class":46},[36,60571,56800],{"class":42},[36,60573,60574,60577,60579,60581,60584,60586],{"class":38,"line":939},[36,60575,60576],{"class":46},"      const",[36,60578,4633],{"class":62},[36,60580,15941],{"class":46},[36,60582,60583],{"class":42}," Math.",[36,60585,60208],{"class":79},[36,60587,4369],{"class":42},[36,60589,60590,60593,60596],{"class":38,"line":949},[36,60591,60592],{"class":42},"      console.",[36,60594,60595],{"class":79},"log",[36,60597,2579],{"class":42},[36,60599,60600],{"class":38,"line":962},[36,60601,35813],{"class":42},[36,60603,60604,60606,60608],{"class":38,"line":974},[36,60605,54765],{"class":42},[36,60607,54161],{"class":53649},[36,60609,53656],{"class":42},[36,60611,60612,60614,60616],{"class":38,"line":979},[36,60613,54133],{"class":42},[36,60615,54148],{"class":53649},[36,60617,53656],{"class":42},[36,60619,60620],{"class":38,"line":994},[36,60621,70],{"emptyLinePlaceholder":69},[36,60623,60624,60626,60628],{"class":38,"line":1006},[36,60625,54133],{"class":42},[36,60627,52984],{"class":53649},[36,60629,53656],{"class":42},[19,60631,60632],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60634,60635],{},"常量不可以重新赋值",[19,60637,60638],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,60640,60642],{"className":52982,"code":60641,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,60643,60644,60654,60668,60672,60680,60694,60714,60726,60734,60738,60746,60758,60766,60777,60795,60811,60825,60833,60837,60845,60853,60857],{"__ignoreMap":31},[36,60645,60646,60648,60650,60652],{"class":38,"line":39},[36,60647,53646],{"class":42},[36,60649,53650],{"class":53649},[36,60651,53653],{"class":79},[36,60653,53656],{"class":42},[36,60655,60656,60658,60660,60662,60664,60666],{"class":38,"line":54},[36,60657,3463],{"class":42},[36,60659,52984],{"class":53649},[36,60661,53665],{"class":79},[36,60663,47],{"class":42},[36,60665,53670],{"class":50},[36,60667,53656],{"class":42},[36,60669,60670],{"class":38,"line":66},[36,60671,70],{"emptyLinePlaceholder":69},[36,60673,60674,60676,60678],{"class":38,"line":73},[36,60675,3463],{"class":42},[36,60677,53683],{"class":53649},[36,60679,53656],{"class":42},[36,60681,60682,60684,60686,60688,60690,60692],{"class":38,"line":86},[36,60683,54492],{"class":42},[36,60685,53693],{"class":53649},[36,60687,53696],{"class":79},[36,60689,47],{"class":42},[36,60691,53701],{"class":50},[36,60693,53656],{"class":42},[36,60695,60696,60698,60700,60702,60704,60706,60708,60710,60712],{"class":38,"line":126},[36,60697,54492],{"class":42},[36,60699,53693],{"class":53649},[36,60701,17295],{"class":79},[36,60703,47],{"class":42},[36,60705,53740],{"class":50},[36,60707,53720],{"class":79},[36,60709,47],{"class":42},[36,60711,53747],{"class":50},[36,60713,53656],{"class":42},[36,60715,60716,60718,60720,60722,60724],{"class":38,"line":131},[36,60717,54492],{"class":42},[36,60719,53756],{"class":53649},[36,60721,53759],{"class":42},[36,60723,53756],{"class":53649},[36,60725,53656],{"class":42},[36,60727,60728,60730,60732],{"class":38,"line":225},[36,60729,54133],{"class":42},[36,60731,53683],{"class":53649},[36,60733,53656],{"class":42},[36,60735,60736],{"class":38,"line":235},[36,60737,70],{"emptyLinePlaceholder":69},[36,60739,60740,60742,60744],{"class":38,"line":377},[36,60741,3463],{"class":42},[36,60743,54148],{"class":53649},[36,60745,53656],{"class":42},[36,60747,60748,60750,60752,60754,60756],{"class":38,"line":617},[36,60749,54492],{"class":42},[36,60751,56235],{"class":53649},[36,60753,56241],{"class":42},[36,60755,56235],{"class":53649},[36,60757,53656],{"class":42},[36,60759,60760,60762,60764],{"class":38,"line":643},[36,60761,54492],{"class":42},[36,60763,54161],{"class":53649},[36,60765,53656],{"class":42},[36,60767,60768,60770,60772,60774],{"class":38,"line":921},[36,60769,13599],{"class":46},[36,60771,4633],{"class":62},[36,60773,15941],{"class":46},[36,60775,60776],{"class":62}," 10\n",[36,60778,60779,60781,60783,60785,60787,60789,60791,60793],{"class":38,"line":934},[36,60780,13599],{"class":46},[36,60782,56739],{"class":62},[36,60784,15941],{"class":46},[36,60786,56744],{"class":42},[36,60788,56747],{"class":79},[36,60790,92],{"class":42},[36,60792,60552],{"class":50},[36,60794,123],{"class":42},[36,60796,60797,60799,60801,60803,60805,60807,60809],{"class":38,"line":939},[36,60798,60559],{"class":42},[36,60800,60161],{"class":79},[36,60802,92],{"class":42},[36,60804,60166],{"class":50},[36,60806,630],{"class":42},[36,60808,56797],{"class":46},[36,60810,56800],{"class":42},[36,60812,60813,60815,60817,60819,60821,60823],{"class":38,"line":949},[36,60814,60576],{"class":46},[36,60816,4633],{"class":62},[36,60818,15941],{"class":46},[36,60820,60583],{"class":42},[36,60822,60208],{"class":79},[36,60824,4369],{"class":42},[36,60826,60827,60829,60831],{"class":38,"line":962},[36,60828,60592],{"class":42},[36,60830,60595],{"class":79},[36,60832,2579],{"class":42},[36,60834,60835],{"class":38,"line":974},[36,60836,35813],{"class":42},[36,60838,60839,60841,60843],{"class":38,"line":979},[36,60840,54765],{"class":42},[36,60842,54161],{"class":53649},[36,60844,53656],{"class":42},[36,60846,60847,60849,60851],{"class":38,"line":994},[36,60848,54133],{"class":42},[36,60850,54148],{"class":53649},[36,60852,53656],{"class":42},[36,60854,60855],{"class":38,"line":1006},[36,60856,70],{"emptyLinePlaceholder":69},[36,60858,60859,60861,60863],{"class":38,"line":1011},[36,60860,54133],{"class":42},[36,60862,52984],{"class":53649},[36,60864,53656],{"class":42},[19,60866,60867],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,60869,60871],{"className":52982,"code":60870,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,60872,60873,60883,60897,60901,60909,60923,60943,60955,60963,60967,60975,60987,60995,61005,61023,61039,61052,61060,61064,61072,61080,61084],{"__ignoreMap":31},[36,60874,60875,60877,60879,60881],{"class":38,"line":39},[36,60876,53646],{"class":42},[36,60878,53650],{"class":53649},[36,60880,53653],{"class":79},[36,60882,53656],{"class":42},[36,60884,60885,60887,60889,60891,60893,60895],{"class":38,"line":54},[36,60886,3463],{"class":42},[36,60888,52984],{"class":53649},[36,60890,53665],{"class":79},[36,60892,47],{"class":42},[36,60894,53670],{"class":50},[36,60896,53656],{"class":42},[36,60898,60899],{"class":38,"line":66},[36,60900,70],{"emptyLinePlaceholder":69},[36,60902,60903,60905,60907],{"class":38,"line":73},[36,60904,3463],{"class":42},[36,60906,53683],{"class":53649},[36,60908,53656],{"class":42},[36,60910,60911,60913,60915,60917,60919,60921],{"class":38,"line":86},[36,60912,54492],{"class":42},[36,60914,53693],{"class":53649},[36,60916,53696],{"class":79},[36,60918,47],{"class":42},[36,60920,53701],{"class":50},[36,60922,53656],{"class":42},[36,60924,60925,60927,60929,60931,60933,60935,60937,60939,60941],{"class":38,"line":126},[36,60926,54492],{"class":42},[36,60928,53693],{"class":53649},[36,60930,17295],{"class":79},[36,60932,47],{"class":42},[36,60934,53740],{"class":50},[36,60936,53720],{"class":79},[36,60938,47],{"class":42},[36,60940,53747],{"class":50},[36,60942,53656],{"class":42},[36,60944,60945,60947,60949,60951,60953],{"class":38,"line":131},[36,60946,54492],{"class":42},[36,60948,53756],{"class":53649},[36,60950,53759],{"class":42},[36,60952,53756],{"class":53649},[36,60954,53656],{"class":42},[36,60956,60957,60959,60961],{"class":38,"line":225},[36,60958,54133],{"class":42},[36,60960,53683],{"class":53649},[36,60962,53656],{"class":42},[36,60964,60965],{"class":38,"line":235},[36,60966,70],{"emptyLinePlaceholder":69},[36,60968,60969,60971,60973],{"class":38,"line":377},[36,60970,3463],{"class":42},[36,60972,54148],{"class":53649},[36,60974,53656],{"class":42},[36,60976,60977,60979,60981,60983,60985],{"class":38,"line":617},[36,60978,54492],{"class":42},[36,60980,56235],{"class":53649},[36,60982,56241],{"class":42},[36,60984,56235],{"class":53649},[36,60986,53656],{"class":42},[36,60988,60989,60991,60993],{"class":38,"line":643},[36,60990,54492],{"class":42},[36,60992,54161],{"class":53649},[36,60994,53656],{"class":42},[36,60996,60997,60999,61001,61003],{"class":38,"line":921},[36,60998,13599],{"class":46},[36,61000,4633],{"class":62},[36,61002,15941],{"class":46},[36,61004,60776],{"class":62},[36,61006,61007,61009,61011,61013,61015,61017,61019,61021],{"class":38,"line":934},[36,61008,13599],{"class":46},[36,61010,56739],{"class":62},[36,61012,15941],{"class":46},[36,61014,56744],{"class":42},[36,61016,56747],{"class":79},[36,61018,92],{"class":42},[36,61020,60552],{"class":50},[36,61022,123],{"class":42},[36,61024,61025,61027,61029,61031,61033,61035,61037],{"class":38,"line":939},[36,61026,60559],{"class":42},[36,61028,60161],{"class":79},[36,61030,92],{"class":42},[36,61032,60166],{"class":50},[36,61034,630],{"class":42},[36,61036,56797],{"class":46},[36,61038,56800],{"class":42},[36,61040,61041,61044,61046,61048,61050],{"class":38,"line":949},[36,61042,61043],{"class":42},"      num ",[36,61045,47],{"class":46},[36,61047,60583],{"class":42},[36,61049,60208],{"class":79},[36,61051,4369],{"class":42},[36,61053,61054,61056,61058],{"class":38,"line":962},[36,61055,60592],{"class":42},[36,61057,60595],{"class":79},[36,61059,2579],{"class":42},[36,61061,61062],{"class":38,"line":974},[36,61063,35813],{"class":42},[36,61065,61066,61068,61070],{"class":38,"line":979},[36,61067,54765],{"class":42},[36,61069,54161],{"class":53649},[36,61071,53656],{"class":42},[36,61073,61074,61076,61078],{"class":38,"line":994},[36,61075,54133],{"class":42},[36,61077,54148],{"class":53649},[36,61079,53656],{"class":42},[36,61081,61082],{"class":38,"line":1006},[36,61083,70],{"emptyLinePlaceholder":69},[36,61085,61086,61088,61090],{"class":38,"line":1011},[36,61087,54133],{"class":42},[36,61089,52984],{"class":53649},[36,61091,53656],{"class":42},[19,61093,61094],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1752,61096,61098],{"id":61097},"_324-事件监听版本","3.2.4 事件监听版本",[19,61100,61101],{},[3879,61102],{"alt":31,"src":61103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,61105,61106],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,61108,61109],{},"这种方式会覆盖前边的事件监听:",[26,61111,61113],{"className":52982,"code":61112,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,61114,61115,61125,61139,61143,61151,61165,61185,61197,61205,61209,61217,61229,61237,61255,61269,61280,61284,61296,61306,61310,61318,61326,61330],{"__ignoreMap":31},[36,61116,61117,61119,61121,61123],{"class":38,"line":39},[36,61118,53646],{"class":42},[36,61120,53650],{"class":53649},[36,61122,53653],{"class":79},[36,61124,53656],{"class":42},[36,61126,61127,61129,61131,61133,61135,61137],{"class":38,"line":54},[36,61128,3463],{"class":42},[36,61130,52984],{"class":53649},[36,61132,53665],{"class":79},[36,61134,47],{"class":42},[36,61136,53670],{"class":50},[36,61138,53656],{"class":42},[36,61140,61141],{"class":38,"line":66},[36,61142,70],{"emptyLinePlaceholder":69},[36,61144,61145,61147,61149],{"class":38,"line":73},[36,61146,3463],{"class":42},[36,61148,53683],{"class":53649},[36,61150,53656],{"class":42},[36,61152,61153,61155,61157,61159,61161,61163],{"class":38,"line":86},[36,61154,54492],{"class":42},[36,61156,53693],{"class":53649},[36,61158,53696],{"class":79},[36,61160,47],{"class":42},[36,61162,53701],{"class":50},[36,61164,53656],{"class":42},[36,61166,61167,61169,61171,61173,61175,61177,61179,61181,61183],{"class":38,"line":126},[36,61168,54492],{"class":42},[36,61170,53693],{"class":53649},[36,61172,17295],{"class":79},[36,61174,47],{"class":42},[36,61176,53740],{"class":50},[36,61178,53720],{"class":79},[36,61180,47],{"class":42},[36,61182,53747],{"class":50},[36,61184,53656],{"class":42},[36,61186,61187,61189,61191,61193,61195],{"class":38,"line":131},[36,61188,54492],{"class":42},[36,61190,53756],{"class":53649},[36,61192,53759],{"class":42},[36,61194,53756],{"class":53649},[36,61196,53656],{"class":42},[36,61198,61199,61201,61203],{"class":38,"line":225},[36,61200,54133],{"class":42},[36,61202,53683],{"class":53649},[36,61204,53656],{"class":42},[36,61206,61207],{"class":38,"line":235},[36,61208,70],{"emptyLinePlaceholder":69},[36,61210,61211,61213,61215],{"class":38,"line":377},[36,61212,3463],{"class":42},[36,61214,54148],{"class":53649},[36,61216,53656],{"class":42},[36,61218,61219,61221,61223,61225,61227],{"class":38,"line":617},[36,61220,54492],{"class":42},[36,61222,56235],{"class":53649},[36,61224,56241],{"class":42},[36,61226,56235],{"class":53649},[36,61228,53656],{"class":42},[36,61230,61231,61233,61235],{"class":38,"line":643},[36,61232,54492],{"class":42},[36,61234,54161],{"class":53649},[36,61236,53656],{"class":42},[36,61238,61239,61241,61243,61245,61247,61249,61251,61253],{"class":38,"line":921},[36,61240,13599],{"class":46},[36,61242,56739],{"class":62},[36,61244,15941],{"class":46},[36,61246,56744],{"class":42},[36,61248,56747],{"class":79},[36,61250,92],{"class":42},[36,61252,60552],{"class":50},[36,61254,123],{"class":42},[36,61256,61257,61259,61262,61264,61267],{"class":38,"line":934},[36,61258,60559],{"class":42},[36,61260,61261],{"class":79},"onclick",[36,61263,15941],{"class":46},[36,61265,61266],{"class":46}," function",[36,61268,56800],{"class":42},[36,61270,61271,61274,61276,61278],{"class":38,"line":939},[36,61272,61273],{"class":79},"      alert",[36,61275,92],{"class":42},[36,61277,3028],{"class":62},[36,61279,123],{"class":42},[36,61281,61282],{"class":38,"line":949},[36,61283,4580],{"class":42},[36,61285,61286,61288,61290,61292,61294],{"class":38,"line":962},[36,61287,60559],{"class":42},[36,61289,61261],{"class":79},[36,61291,15941],{"class":46},[36,61293,61266],{"class":46},[36,61295,56800],{"class":42},[36,61297,61298,61300,61302,61304],{"class":38,"line":974},[36,61299,61273],{"class":79},[36,61301,92],{"class":42},[36,61303,3304],{"class":62},[36,61305,123],{"class":42},[36,61307,61308],{"class":38,"line":979},[36,61309,4580],{"class":42},[36,61311,61312,61314,61316],{"class":38,"line":994},[36,61313,54765],{"class":42},[36,61315,54161],{"class":53649},[36,61317,53656],{"class":42},[36,61319,61320,61322,61324],{"class":38,"line":1006},[36,61321,54133],{"class":42},[36,61323,54148],{"class":53649},[36,61325,53656],{"class":42},[36,61327,61328],{"class":38,"line":1011},[36,61329,70],{"emptyLinePlaceholder":69},[36,61331,61332,61334,61336],{"class":38,"line":1023},[36,61333,54133],{"class":42},[36,61335,52984],{"class":53649},[36,61337,53656],{"class":42},[19,61339,61340],{},"只要点击就输出结果为22,前边11被覆盖了",[26,61342,61344],{"className":52982,"code":61343,"language":52984,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,61345,61346,61351,61356,61360,61365,61370],{"__ignoreMap":31},[36,61347,61348],{"class":38,"line":39},[36,61349,61350],{"class":42},"  btn.addEventListener('click', function () {\n",[36,61352,61353],{"class":38,"line":54},[36,61354,61355],{"class":42},"      alert(11)\n",[36,61357,61358],{"class":38,"line":66},[36,61359,35813],{"class":42},[36,61361,61362],{"class":38,"line":73},[36,61363,61364],{"class":42},"    btn.addEventListener('click', function () {\n",[36,61366,61367],{"class":38,"line":86},[36,61368,61369],{"class":42},"      alert(22)\n",[36,61371,61372],{"class":38,"line":126},[36,61373,35813],{"class":42},[19,61375,61376],{},"点击第一次输出11,第二次点击为22",[1752,61378,61380],{"id":61379},"_325-事件类型","3.2.5 事件类型",[19,61382,61383],{},[3879,61384],{"alt":31,"src":61385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24368,61387,61389],{"id":61388},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61391,61392],{},"补充知识:",[19,61394,61395],{},"轮播图自动播放模块,可以使用",[19,61397,61398],{},"let timerId = setInterval(function () {",[19,61400,61401],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61403,61404],{},"用js方法模拟进行点击事件,click必须加()",[19,61406,61407],{},"next.click()",[19,61409,61410],{},"}, 1000)",[19,61412,61413],{},[3879,61414],{"alt":31,"src":61415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,61417,61419],{"className":55415,"code":61418,"language":55417,"meta":31,"style":31},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,61420,61421,61425,61435,61449,61453,61461,61476,61496,61516,61529,61537,61542,61547,61551,61555,61560,61565,61570,61575,61579,61583,61588,61593,61598,61602,61606,61611,61615,61620,61625,61629,61633,61638,61643,61648,61653,61658,61662,61666,61671,61676,61681,61686,61691,61695,61699,61704,61709,61714,61719,61724,61729,61734,61739,61744,61749,61753,61757,61762,61767,61771,61775,61780,61785,61789,61794,61799,61803,61807,61812,61816,61821,61826,61830,61835,61839,61843,61848,61853,61858,61863,61868,61873,61878,61882,61886,61890,61895,61900,61905,61910,61914,61922,61930,61934,61942,61957,61971,61992,62000,62014,62027,62042,62061,62073,62085,62097,62109,62121,62133,62145,62153,62168,62192,62216,62224,62232,62240,62248,62253,62258,62263,62268,62273,62278,62283,62288,62293,62298,62302,62307,62312,62317,62322,62327,62332,62337,62342,62347,62351,62356,62361,62366,62371,62376,62381,62386,62391,62396,62401,62406,62411,62415,62419,62424,62429,62434,62438,62443,62448,62453,62458,62463,62467,62472,62476,62480,62484,62488,62492,62496,62501,62506,62511,62516,62521,62526,62531,62536,62541,62545,62549,62554,62559,62564,62569,62574,62578,62583,62588,62593,62598,62603,62608,62612,62616,62621,62625,62630,62634,62639,62644,62649,62654,62659,62664,62668,62676,62684,62688],{"__ignoreMap":31},[36,61422,61423],{"class":38,"line":39},[36,61424,70],{"emptyLinePlaceholder":69},[36,61426,61427,61429,61431,61433],{"class":38,"line":54},[36,61428,53646],{"class":42},[36,61430,53650],{"class":46},[36,61432,53653],{"class":62},[36,61434,53656],{"class":42},[36,61436,61437,61439,61441,61443,61445,61447],{"class":38,"line":66},[36,61438,3463],{"class":42},[36,61440,52984],{"class":53649},[36,61442,53665],{"class":79},[36,61444,47],{"class":42},[36,61446,53670],{"class":50},[36,61448,53656],{"class":42},[36,61450,61451],{"class":38,"line":73},[36,61452,70],{"emptyLinePlaceholder":69},[36,61454,61455,61457,61459],{"class":38,"line":86},[36,61456,3463],{"class":42},[36,61458,53683],{"class":53649},[36,61460,53656],{"class":42},[36,61462,61463,61465,61467,61469,61471,61473],{"class":38,"line":126},[36,61464,54492],{"class":42},[36,61466,53693],{"class":53649},[36,61468,53696],{"class":79},[36,61470,47],{"class":42},[36,61472,53701],{"class":50},[36,61474,61475],{"class":42}," \u002F>\n",[36,61477,61478,61480,61482,61484,61486,61488,61490,61492,61494],{"class":38,"line":131},[36,61479,54492],{"class":42},[36,61481,53693],{"class":53649},[36,61483,53712],{"class":79},[36,61485,47],{"class":42},[36,61487,53717],{"class":50},[36,61489,53720],{"class":79},[36,61491,47],{"class":42},[36,61493,53725],{"class":50},[36,61495,61475],{"class":42},[36,61497,61498,61500,61502,61504,61506,61508,61510,61512,61514],{"class":38,"line":225},[36,61499,54492],{"class":42},[36,61501,53693],{"class":53649},[36,61503,17295],{"class":79},[36,61505,47],{"class":42},[36,61507,53740],{"class":50},[36,61509,53720],{"class":79},[36,61511,47],{"class":42},[36,61513,53747],{"class":50},[36,61515,61475],{"class":42},[36,61517,61518,61520,61522,61525,61527],{"class":38,"line":235},[36,61519,54492],{"class":42},[36,61521,53756],{"class":53649},[36,61523,61524],{"class":42},">轮播图点击切换\u003C\u002F",[36,61526,53756],{"class":53649},[36,61528,53656],{"class":42},[36,61530,61531,61533,61535],{"class":38,"line":377},[36,61532,54492],{"class":42},[36,61534,2467],{"class":53649},[36,61536,53656],{"class":42},[36,61538,61539],{"class":38,"line":617},[36,61540,61541],{"class":42},"    * {\n",[36,61543,61544],{"class":38,"line":643},[36,61545,61546],{"class":42},"      box-sizing: border-box;\n",[36,61548,61549],{"class":38,"line":921},[36,61550,4580],{"class":42},[36,61552,61553],{"class":38,"line":934},[36,61554,70],{"emptyLinePlaceholder":69},[36,61556,61557],{"class":38,"line":939},[36,61558,61559],{"class":42},"    .slider {\n",[36,61561,61562],{"class":38,"line":949},[36,61563,61564],{"class":42},"      width: 560px;\n",[36,61566,61567],{"class":38,"line":962},[36,61568,61569],{"class":42},"      height: 400px;\n",[36,61571,61572],{"class":38,"line":974},[36,61573,61574],{"class":42},"      overflow: hidden;\n",[36,61576,61577],{"class":38,"line":979},[36,61578,4580],{"class":42},[36,61580,61581],{"class":38,"line":994},[36,61582,70],{"emptyLinePlaceholder":69},[36,61584,61585],{"class":38,"line":1006},[36,61586,61587],{"class":42},"    .slider-wrapper {\n",[36,61589,61590],{"class":38,"line":1011},[36,61591,61592],{"class":42},"      width: 100%;\n",[36,61594,61595],{"class":38,"line":1023},[36,61596,61597],{"class":42},"      height: 320px;\n",[36,61599,61600],{"class":38,"line":1028},[36,61601,4580],{"class":42},[36,61603,61604],{"class":38,"line":1033},[36,61605,70],{"emptyLinePlaceholder":69},[36,61607,61608],{"class":38,"line":1053},[36,61609,61610],{"class":42},"    .slider-wrapper img {\n",[36,61612,61613],{"class":38,"line":1064},[36,61614,61592],{"class":42},[36,61616,61617],{"class":38,"line":1075},[36,61618,61619],{"class":42},"      height: 100%;\n",[36,61621,61622],{"class":38,"line":2291},[36,61623,61624],{"class":42},"      display: block;\n",[36,61626,61627],{"class":38,"line":2329},[36,61628,4580],{"class":42},[36,61630,61631],{"class":38,"line":2334},[36,61632,70],{"emptyLinePlaceholder":69},[36,61634,61635],{"class":38,"line":2339},[36,61636,61637],{"class":42},"    .slider-footer {\n",[36,61639,61640],{"class":38,"line":2365},[36,61641,61642],{"class":42},"      height: 80px;\n",[36,61644,61645],{"class":38,"line":2373},[36,61646,61647],{"class":42},"      background-color: rgb(100, 67, 68);\n",[36,61649,61650],{"class":38,"line":5001},[36,61651,61652],{"class":42},"      padding: 12px 12px 0 12px;\n",[36,61654,61655],{"class":38,"line":5006},[36,61656,61657],{"class":42},"      position: relative;\n",[36,61659,61660],{"class":38,"line":10328},[36,61661,4580],{"class":42},[36,61663,61664],{"class":38,"line":10352},[36,61665,70],{"emptyLinePlaceholder":69},[36,61667,61668],{"class":38,"line":10357},[36,61669,61670],{"class":42},"    .slider-footer .toggle {\n",[36,61672,61673],{"class":38,"line":10363},[36,61674,61675],{"class":42},"      position: absolute;\n",[36,61677,61678],{"class":38,"line":10390},[36,61679,61680],{"class":42},"      right: 0;\n",[36,61682,61683],{"class":38,"line":10395},[36,61684,61685],{"class":42},"      top: 12px;\n",[36,61687,61688],{"class":38,"line":10401},[36,61689,61690],{"class":42},"      display: flex;\n",[36,61692,61693],{"class":38,"line":10413},[36,61694,4580],{"class":42},[36,61696,61697],{"class":38,"line":10425},[36,61698,70],{"emptyLinePlaceholder":69},[36,61700,61701],{"class":38,"line":10437},[36,61702,61703],{"class":42},"    .slider-footer .toggle button {\n",[36,61705,61706],{"class":38,"line":12095},[36,61707,61708],{"class":42},"      margin-right: 12px;\n",[36,61710,61711],{"class":38,"line":12120},[36,61712,61713],{"class":42},"      width: 28px;\n",[36,61715,61716],{"class":38,"line":12143},[36,61717,61718],{"class":42},"      height: 28px;\n",[36,61720,61721],{"class":38,"line":12167},[36,61722,61723],{"class":42},"      appearance: none;\n",[36,61725,61726],{"class":38,"line":12172},[36,61727,61728],{"class":42},"      border: none;\n",[36,61730,61731],{"class":38,"line":12177},[36,61732,61733],{"class":42},"      background: rgba(255, 255, 255, 0.1);\n",[36,61735,61736],{"class":38,"line":12182},[36,61737,61738],{"class":42},"      color: #fff;\n",[36,61740,61741],{"class":38,"line":12191},[36,61742,61743],{"class":42},"      border-radius: 4px;\n",[36,61745,61746],{"class":38,"line":12196},[36,61747,61748],{"class":42},"      cursor: pointer;\n",[36,61750,61751],{"class":38,"line":12202},[36,61752,4580],{"class":42},[36,61754,61755],{"class":38,"line":12223},[36,61756,70],{"emptyLinePlaceholder":69},[36,61758,61759],{"class":38,"line":12229},[36,61760,61761],{"class":42},"    .slider-footer .toggle button:hover {\n",[36,61763,61764],{"class":38,"line":12243},[36,61765,61766],{"class":42},"      background: rgba(255, 255, 255, 0.2);\n",[36,61768,61769],{"class":38,"line":12249},[36,61770,4580],{"class":42},[36,61772,61773],{"class":38,"line":12276},[36,61774,70],{"emptyLinePlaceholder":69},[36,61776,61777],{"class":38,"line":12285},[36,61778,61779],{"class":42},"    .slider-footer p {\n",[36,61781,61782],{"class":38,"line":12291},[36,61783,61784],{"class":42},"      margin: 0;\n",[36,61786,61787],{"class":38,"line":12299},[36,61788,61738],{"class":42},[36,61790,61791],{"class":38,"line":12304},[36,61792,61793],{"class":42},"      font-size: 18px;\n",[36,61795,61796],{"class":38,"line":18977},[36,61797,61798],{"class":42},"      margin-bottom: 10px;\n",[36,61800,61801],{"class":38,"line":18983},[36,61802,4580],{"class":42},[36,61804,61805],{"class":38,"line":19006},[36,61806,70],{"emptyLinePlaceholder":69},[36,61808,61809],{"class":38,"line":19012},[36,61810,61811],{"class":42},"    .slider-indicator {\n",[36,61813,61814],{"class":38,"line":19035},[36,61815,61784],{"class":42},[36,61817,61818],{"class":38,"line":19049},[36,61819,61820],{"class":42},"      padding: 0;\n",[36,61822,61823],{"class":38,"line":19069},[36,61824,61825],{"class":42},"      list-style: none;\n",[36,61827,61828],{"class":38,"line":19075},[36,61829,61690],{"class":42},[36,61831,61832],{"class":38,"line":19086},[36,61833,61834],{"class":42},"      align-items: center;\n",[36,61836,61837],{"class":38,"line":19109},[36,61838,4580],{"class":42},[36,61840,61841],{"class":38,"line":19131},[36,61842,70],{"emptyLinePlaceholder":69},[36,61844,61845],{"class":38,"line":19136},[36,61846,61847],{"class":42},"    .slider-indicator li {\n",[36,61849,61850],{"class":38,"line":19142},[36,61851,61852],{"class":42},"      width: 8px;\n",[36,61854,61855],{"class":38,"line":19156},[36,61856,61857],{"class":42},"      height: 8px;\n",[36,61859,61860],{"class":38,"line":19169},[36,61861,61862],{"class":42},"      margin: 4px;\n",[36,61864,61865],{"class":38,"line":19174},[36,61866,61867],{"class":42},"      border-radius: 50%;\n",[36,61869,61870],{"class":38,"line":19188},[36,61871,61872],{"class":42},"      background: #fff;\n",[36,61874,61875],{"class":38,"line":19193},[36,61876,61877],{"class":42},"      opacity: 0.4;\n",[36,61879,61880],{"class":38,"line":19199},[36,61881,61748],{"class":42},[36,61883,61884],{"class":38,"line":19204},[36,61885,4580],{"class":42},[36,61887,61888],{"class":38,"line":19218},[36,61889,70],{"emptyLinePlaceholder":69},[36,61891,61892],{"class":38,"line":19223},[36,61893,61894],{"class":42},"    .slider-indicator li.active {\n",[36,61896,61897],{"class":38,"line":19228},[36,61898,61899],{"class":42},"      width: 12px;\n",[36,61901,61902],{"class":38,"line":19242},[36,61903,61904],{"class":42},"      height: 12px;\n",[36,61906,61907],{"class":38,"line":19254},[36,61908,61909],{"class":42},"      opacity: 1;\n",[36,61911,61912],{"class":38,"line":19259},[36,61913,4580],{"class":42},[36,61915,61916,61918,61920],{"class":38,"line":19272},[36,61917,54765],{"class":42},[36,61919,2467],{"class":53649},[36,61921,53656],{"class":42},[36,61923,61924,61926,61928],{"class":38,"line":19277},[36,61925,54133],{"class":42},[36,61927,53683],{"class":53649},[36,61929,53656],{"class":42},[36,61931,61932],{"class":38,"line":19282},[36,61933,70],{"emptyLinePlaceholder":69},[36,61935,61936,61938,61940],{"class":38,"line":19287},[36,61937,3463],{"class":42},[36,61939,54148],{"class":53649},[36,61941,53656],{"class":42},[36,61943,61944,61946,61948,61950,61952,61955],{"class":38,"line":19300},[36,61945,54492],{"class":42},[36,61947,53959],{"class":53649},[36,61949,55834],{"class":79},[36,61951,47],{"class":42},[36,61953,61954],{"class":50},"\"slider\"",[36,61956,53656],{"class":42},[36,61958,61959,61961,61963,61965,61967,61969],{"class":38,"line":19305},[36,61960,53690],{"class":42},[36,61962,53959],{"class":53649},[36,61964,55834],{"class":79},[36,61966,47],{"class":42},[36,61968,57575],{"class":50},[36,61970,53656],{"class":42},[36,61972,61973,61975,61977,61979,61981,61984,61986,61988,61990],{"class":38,"line":34985},[36,61974,57582],{"class":42},[36,61976,3879],{"class":53649},[36,61978,57587],{"class":79},[36,61980,47],{"class":42},[36,61982,61983],{"class":50},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,61985,57595],{"class":79},[36,61987,47],{"class":42},[36,61989,10033],{"class":50},[36,61991,61475],{"class":42},[36,61993,61994,61996,61998],{"class":38,"line":34991},[36,61995,54124],{"class":42},[36,61997,53959],{"class":53649},[36,61999,53656],{"class":42},[36,62001,62002,62004,62006,62008,62010,62012],{"class":38,"line":34997},[36,62003,53690],{"class":42},[36,62005,53959],{"class":53649},[36,62007,55834],{"class":79},[36,62009,47],{"class":42},[36,62011,57622],{"class":50},[36,62013,53656],{"class":42},[36,62015,62016,62018,62020,62023,62025],{"class":38,"line":35003},[36,62017,57582],{"class":42},[36,62019,19],{"class":53649},[36,62021,62022],{"class":42},">对人类来说会不会太超前了？\u003C\u002F",[36,62024,19],{"class":53649},[36,62026,53656],{"class":42},[36,62028,62029,62031,62033,62035,62037,62040],{"class":38,"line":35009},[36,62030,57582],{"class":42},[36,62032,3557],{"class":53649},[36,62034,55834],{"class":79},[36,62036,47],{"class":42},[36,62038,62039],{"class":50},"\"slider-indicator\"",[36,62041,53656],{"class":42},[36,62043,62044,62046,62048,62050,62052,62055,62057,62059],{"class":38,"line":35020},[36,62045,57650],{"class":42},[36,62047,653],{"class":53649},[36,62049,55834],{"class":79},[36,62051,47],{"class":42},[36,62053,62054],{"class":50},"\"active\"",[36,62056,57662],{"class":42},[36,62058,653],{"class":53649},[36,62060,53656],{"class":42},[36,62062,62063,62065,62067,62069,62071],{"class":38,"line":35026},[36,62064,57650],{"class":42},[36,62066,653],{"class":53649},[36,62068,57662],{"class":42},[36,62070,653],{"class":53649},[36,62072,53656],{"class":42},[36,62074,62075,62077,62079,62081,62083],{"class":38,"line":35046},[36,62076,57650],{"class":42},[36,62078,653],{"class":53649},[36,62080,57662],{"class":42},[36,62082,653],{"class":53649},[36,62084,53656],{"class":42},[36,62086,62087,62089,62091,62093,62095],{"class":38,"line":35052},[36,62088,57650],{"class":42},[36,62090,653],{"class":53649},[36,62092,57662],{"class":42},[36,62094,653],{"class":53649},[36,62096,53656],{"class":42},[36,62098,62099,62101,62103,62105,62107],{"class":38,"line":35063},[36,62100,57650],{"class":42},[36,62102,653],{"class":53649},[36,62104,57662],{"class":42},[36,62106,653],{"class":53649},[36,62108,53656],{"class":42},[36,62110,62111,62113,62115,62117,62119],{"class":38,"line":35069},[36,62112,57650],{"class":42},[36,62114,653],{"class":53649},[36,62116,57662],{"class":42},[36,62118,653],{"class":53649},[36,62120,53656],{"class":42},[36,62122,62123,62125,62127,62129,62131],{"class":38,"line":35075},[36,62124,57650],{"class":42},[36,62126,653],{"class":53649},[36,62128,57662],{"class":42},[36,62130,653],{"class":53649},[36,62132,53656],{"class":42},[36,62134,62135,62137,62139,62141,62143],{"class":38,"line":35081},[36,62136,57650],{"class":42},[36,62138,653],{"class":53649},[36,62140,57662],{"class":42},[36,62142,653],{"class":53649},[36,62144,53656],{"class":42},[36,62146,62147,62149,62151],{"class":38,"line":35087},[36,62148,57755],{"class":42},[36,62150,3557],{"class":53649},[36,62152,53656],{"class":42},[36,62154,62155,62157,62159,62161,62163,62166],{"class":38,"line":35093},[36,62156,57582],{"class":42},[36,62158,53959],{"class":53649},[36,62160,55834],{"class":79},[36,62162,47],{"class":42},[36,62164,62165],{"class":50},"\"toggle\"",[36,62167,53656],{"class":42},[36,62169,62170,62172,62174,62176,62178,62181,62183,62186,62188,62190],{"class":38,"line":35099},[36,62171,57650],{"class":42},[36,62173,56235],{"class":53649},[36,62175,55834],{"class":79},[36,62177,47],{"class":42},[36,62179,62180],{"class":50},"\"prev\"",[36,62182,986],{"class":42},[36,62184,62185],{"class":62},"&lt;",[36,62187,54133],{"class":42},[36,62189,56235],{"class":53649},[36,62191,53656],{"class":42},[36,62193,62194,62196,62198,62200,62202,62205,62207,62210,62212,62214],{"class":38,"line":35105},[36,62195,57650],{"class":42},[36,62197,56235],{"class":53649},[36,62199,55834],{"class":79},[36,62201,47],{"class":42},[36,62203,62204],{"class":50},"\"next\"",[36,62206,986],{"class":42},[36,62208,62209],{"class":62},"&gt;",[36,62211,54133],{"class":42},[36,62213,56235],{"class":53649},[36,62215,53656],{"class":42},[36,62217,62218,62220,62222],{"class":38,"line":35125},[36,62219,57755],{"class":42},[36,62221,53959],{"class":53649},[36,62223,53656],{"class":42},[36,62225,62226,62228,62230],{"class":38,"line":35131},[36,62227,54124],{"class":42},[36,62229,53959],{"class":53649},[36,62231,53656],{"class":42},[36,62233,62234,62236,62238],{"class":38,"line":35147},[36,62235,54765],{"class":42},[36,62237,53959],{"class":53649},[36,62239,53656],{"class":42},[36,62241,62242,62244,62246],{"class":38,"line":35153},[36,62243,54492],{"class":42},[36,62245,54161],{"class":53649},[36,62247,53656],{"class":42},[36,62249,62250],{"class":38,"line":35167},[36,62251,62252],{"class":42},"    \u002F\u002F 1. 初始数据\n",[36,62254,62255],{"class":38,"line":35173},[36,62256,62257],{"class":42},"    const data = [\n",[36,62259,62260],{"class":38,"line":35188},[36,62261,62262],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,62264,62265],{"class":38,"line":35194},[36,62266,62267],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,62269,62270],{"class":38,"line":35203},[36,62271,62272],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,62274,62275],{"class":38,"line":35209},[36,62276,62277],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,62279,62280],{"class":38,"line":35218},[36,62281,62282],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,62284,62285],{"class":38,"line":35224},[36,62286,62287],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,62289,62290],{"class":38,"line":35230},[36,62291,62292],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,62294,62295],{"class":38,"line":35239},[36,62296,62297],{"class":42},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,62299,62300],{"class":38,"line":35245},[36,62301,55457],{"class":42},[36,62303,62304],{"class":38,"line":35256},[36,62305,62306],{"class":42},"    \u002F\u002F 获取元素\n",[36,62308,62309],{"class":38,"line":35262},[36,62310,62311],{"class":42},"    const img = document.querySelector('.slider-wrapper img')\n",[36,62313,62314],{"class":38,"line":35281},[36,62315,62316],{"class":42},"    const p = document.querySelector('.slider-footer p')\n",[36,62318,62319],{"class":38,"line":35287},[36,62320,62321],{"class":42},"    const footer = document.querySelector('.slider-footer')\n",[36,62323,62324],{"class":38,"line":35298},[36,62325,62326],{"class":42},"    \u002F\u002F 1. 右按钮业务\n",[36,62328,62329],{"class":38,"line":35304},[36,62330,62331],{"class":42},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,62333,62334],{"class":38,"line":35324},[36,62335,62336],{"class":42},"    const next = document.querySelector('.next')\n",[36,62338,62339],{"class":38,"line":35340},[36,62340,62341],{"class":42},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,62343,62344],{"class":38,"line":35346},[36,62345,62346],{"class":42},"    \u002F\u002F 1.2 注册点击事件\n",[36,62348,62349],{"class":38,"line":35360},[36,62350,70],{"emptyLinePlaceholder":69},[36,62352,62353],{"class":38,"line":35366},[36,62354,62355],{"class":42},"    next.addEventListener('click', function () {\n",[36,62357,62358],{"class":38,"line":35372},[36,62359,62360],{"class":42},"      \u002F\u002F console.log(11)\n",[36,62362,62363],{"class":38,"line":35383},[36,62364,62365],{"class":42},"      i++\n",[36,62367,62368],{"class":38,"line":35389},[36,62369,62370],{"class":42},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,62372,62373],{"class":38,"line":35395},[36,62374,62375],{"class":42},"      \u002F\u002F if (i >= 8) {\n",[36,62377,62378],{"class":38,"line":35405},[36,62379,62380],{"class":42},"      \u002F\u002F   i = 0\n",[36,62382,62383],{"class":38,"line":35411},[36,62384,62385],{"class":42},"      \u002F\u002F }\n",[36,62387,62388],{"class":38,"line":35422},[36,62389,62390],{"class":42},"      i = i >= data.length ? 0 : i\n",[36,62392,62393],{"class":38,"line":35428},[36,62394,62395],{"class":42},"      \u002F\u002F 1.3 得到对应的对象\n",[36,62397,62398],{"class":38,"line":35438},[36,62399,62400],{"class":42},"      \u002F\u002F console.log(data[i])\n",[36,62402,62403],{"class":38,"line":35443},[36,62404,62405],{"class":42},"      \u002F\u002F 调用函数\n",[36,62407,62408],{"class":38,"line":35449},[36,62409,62410],{"class":42},"      toggle()\n",[36,62412,62413],{"class":38,"line":35498},[36,62414,35813],{"class":42},[36,62416,62417],{"class":38,"line":35545},[36,62418,70],{"emptyLinePlaceholder":69},[36,62420,62421],{"class":38,"line":35550},[36,62422,62423],{"class":42},"    \u002F\u002F 2. 左侧按钮业务\n",[36,62425,62426],{"class":38,"line":35556},[36,62427,62428],{"class":42},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,62430,62431],{"class":38,"line":35575},[36,62432,62433],{"class":42},"    const prev = document.querySelector('.prev')\n",[36,62435,62436],{"class":38,"line":35581},[36,62437,62346],{"class":42},[36,62439,62440],{"class":38,"line":35601},[36,62441,62442],{"class":42},"    prev.addEventListener('click', function () {\n",[36,62444,62445],{"class":38,"line":35607},[36,62446,62447],{"class":42},"      i--\n",[36,62449,62450],{"class":38,"line":35613},[36,62451,62452],{"class":42},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,62454,62455],{"class":38,"line":35623},[36,62456,62457],{"class":42},"      \u002F\u002F if (i \u003C 0) {\n",[36,62459,62460],{"class":38,"line":35628},[36,62461,62462],{"class":42},"      \u002F\u002F   i = 7\n",[36,62464,62465],{"class":38,"line":35634},[36,62466,62385],{"class":42},[36,62468,62469],{"class":38,"line":35650},[36,62470,62471],{"class":42},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,62473,62474],{"class":38,"line":35695},[36,62475,62395],{"class":42},[36,62477,62478],{"class":38,"line":35701},[36,62479,62400],{"class":42},[36,62481,62482],{"class":38,"line":35707},[36,62483,62405],{"class":42},[36,62485,62486],{"class":38,"line":35713},[36,62487,62410],{"class":42},[36,62489,62490],{"class":38,"line":35724},[36,62491,35813],{"class":42},[36,62493,62494],{"class":38,"line":35730},[36,62495,70],{"emptyLinePlaceholder":69},[36,62497,62498],{"class":38,"line":35736},[36,62499,62500],{"class":42},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,62502,62503],{"class":38,"line":35742},[36,62504,62505],{"class":42},"    function toggle() {\n",[36,62507,62508],{"class":38,"line":35760},[36,62509,62510],{"class":42},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,62512,62513],{"class":38,"line":35774},[36,62514,62515],{"class":42},"      img.src = data[i].url\n",[36,62517,62518],{"class":38,"line":35783},[36,62519,62520],{"class":42},"      p.innerHTML = data[i].title\n",[36,62522,62523],{"class":38,"line":35792},[36,62524,62525],{"class":42},"      footer.style.backgroundColor = data[i].color\n",[36,62527,62528],{"class":38,"line":35801},[36,62529,62530],{"class":42},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,62532,62533],{"class":38,"line":35810},[36,62534,62535],{"class":42},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,62537,62538],{"class":38,"line":35816},[36,62539,62540],{"class":42},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,62542,62543],{"class":38,"line":35822},[36,62544,4580],{"class":42},[36,62546,62547],{"class":38,"line":35830},[36,62548,70],{"emptyLinePlaceholder":69},[36,62550,62551],{"class":38,"line":35835},[36,62552,62553],{"class":42},"    \u002F\u002F 3. 自动播放模块\n",[36,62555,62556],{"class":38,"line":35841},[36,62557,62558],{"class":42},"    let timerId = setInterval(function () {\n",[36,62560,62561],{"class":38,"line":35852},[36,62562,62563],{"class":42},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,62565,62566],{"class":38,"line":35858},[36,62567,62568],{"class":42},"      next.click()\n",[36,62570,62571],{"class":38,"line":35878},[36,62572,62573],{"class":42},"    }, 1000)\n",[36,62575,62576],{"class":38,"line":35884},[36,62577,70],{"emptyLinePlaceholder":69},[36,62579,62580],{"class":38,"line":35890},[36,62581,62582],{"class":42},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,62584,62585],{"class":38,"line":35896},[36,62586,62587],{"class":42},"    const slider = document.querySelector('.slider')\n",[36,62589,62590],{"class":38,"line":35913},[36,62591,62592],{"class":42},"    \u002F\u002F 注册事件\n",[36,62594,62595],{"class":38,"line":35919},[36,62596,62597],{"class":42},"    slider.addEventListener('mouseenter', function () {\n",[36,62599,62600],{"class":38,"line":35925},[36,62601,62602],{"class":42},"      \u002F\u002F 停止定时器\n",[36,62604,62605],{"class":38,"line":35931},[36,62606,62607],{"class":42},"      clearInterval(timerId)\n",[36,62609,62610],{"class":38,"line":35937},[36,62611,35813],{"class":42},[36,62613,62614],{"class":38,"line":35943},[36,62615,70],{"emptyLinePlaceholder":69},[36,62617,62618],{"class":38,"line":35970},[36,62619,62620],{"class":42},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,62622,62623],{"class":38,"line":35994},[36,62624,62592],{"class":42},[36,62626,62627],{"class":38,"line":36000},[36,62628,62629],{"class":42},"    slider.addEventListener('mouseleave', function () {\n",[36,62631,62632],{"class":38,"line":36006},[36,62633,62602],{"class":42},[36,62635,62636],{"class":38,"line":36012},[36,62637,62638],{"class":42},"      if (timerId) clearInterval(timerId)\n",[36,62640,62641],{"class":38,"line":36023},[36,62642,62643],{"class":42},"      \u002F\u002F 开启定时器\n",[36,62645,62646],{"class":38,"line":36034},[36,62647,62648],{"class":42},"      timerId = setInterval(function () {\n",[36,62650,62651],{"class":38,"line":36040},[36,62652,62653],{"class":42},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,62655,62656],{"class":38,"line":36057},[36,62657,62658],{"class":42},"        next.click()\n",[36,62660,62661],{"class":38,"line":36080},[36,62662,62663],{"class":42},"      }, 1000)\n",[36,62665,62666],{"class":38,"line":36103},[36,62667,35813],{"class":42},[36,62669,62670,62672,62674],{"class":38,"line":36109},[36,62671,54765],{"class":42},[36,62673,54161],{"class":53649},[36,62675,53656],{"class":42},[36,62677,62678,62680,62682],{"class":38,"line":36114},[36,62679,54133],{"class":42},[36,62681,54148],{"class":53649},[36,62683,53656],{"class":42},[36,62685,62686],{"class":38,"line":36123},[36,62687,70],{"emptyLinePlaceholder":69},[36,62689,62690,62692,62694],{"class":38,"line":36133},[36,62691,54133],{"class":42},[36,62693,52984],{"class":53649},[36,62695,53656],{"class":42},[24368,62697,62699],{"id":62698},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62701,62702],{},"小米搜索框案例：",[26,62704,62706],{"className":52982,"code":62705,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,62707,62708,62718,62732,62736,62744,62758,62778,62798,62810,62818,62824,62834,62844,62856,62860,62864,62871,62875,62886,62890,62894,62901,62912,62925,62939,62943,62947,62956,62968,62980,62994,63007,63020,63038,63049,63053,63057,63066,63083,63087,63091,63098,63108,63118,63129,63142,63154,63170,63181,63193,63197,63201,63209,63220,63237,63249,63261,63272,63276,63280,63291,63302,63306,63314,63318,63326,63330,63338,63353,63376,63391,63422,63449,63476,63503,63530,63557,63584,63593,63601,63609,63614,63634,63654,63659,63664,63682,63687,63697,63702,63716,63721,63726,63743,63752,63764,63768,63776,63784,63788],{"__ignoreMap":31},[36,62709,62710,62712,62714,62716],{"class":38,"line":39},[36,62711,53646],{"class":42},[36,62713,53650],{"class":53649},[36,62715,53653],{"class":79},[36,62717,53656],{"class":42},[36,62719,62720,62722,62724,62726,62728,62730],{"class":38,"line":54},[36,62721,3463],{"class":42},[36,62723,52984],{"class":53649},[36,62725,53665],{"class":79},[36,62727,47],{"class":42},[36,62729,53670],{"class":50},[36,62731,53656],{"class":42},[36,62733,62734],{"class":38,"line":66},[36,62735,70],{"emptyLinePlaceholder":69},[36,62737,62738,62740,62742],{"class":38,"line":73},[36,62739,3463],{"class":42},[36,62741,53683],{"class":53649},[36,62743,53656],{"class":42},[36,62745,62746,62748,62750,62752,62754,62756],{"class":38,"line":86},[36,62747,53690],{"class":42},[36,62749,53693],{"class":53649},[36,62751,53696],{"class":79},[36,62753,47],{"class":42},[36,62755,53701],{"class":50},[36,62757,53656],{"class":42},[36,62759,62760,62762,62764,62766,62768,62770,62772,62774,62776],{"class":38,"line":126},[36,62761,53690],{"class":42},[36,62763,53693],{"class":53649},[36,62765,53712],{"class":79},[36,62767,47],{"class":42},[36,62769,53717],{"class":50},[36,62771,53720],{"class":79},[36,62773,47],{"class":42},[36,62775,53725],{"class":50},[36,62777,53656],{"class":42},[36,62779,62780,62782,62784,62786,62788,62790,62792,62794,62796],{"class":38,"line":131},[36,62781,53690],{"class":42},[36,62783,53693],{"class":53649},[36,62785,17295],{"class":79},[36,62787,47],{"class":42},[36,62789,53740],{"class":50},[36,62791,53720],{"class":79},[36,62793,47],{"class":42},[36,62795,53747],{"class":50},[36,62797,53656],{"class":42},[36,62799,62800,62802,62804,62806,62808],{"class":38,"line":225},[36,62801,53690],{"class":42},[36,62803,53756],{"class":53649},[36,62805,53759],{"class":42},[36,62807,53756],{"class":53649},[36,62809,53656],{"class":42},[36,62811,62812,62814,62816],{"class":38,"line":235},[36,62813,53690],{"class":42},[36,62815,2467],{"class":53649},[36,62817,53656],{"class":42},[36,62819,62820,62822],{"class":38,"line":377},[36,62821,53776],{"class":53649},[36,62823,2150],{"class":42},[36,62825,62826,62828,62830,62832],{"class":38,"line":617},[36,62827,53783],{"class":62},[36,62829,2158],{"class":42},[36,62831,2751],{"class":62},[36,62833,3711],{"class":42},[36,62835,62836,62838,62840,62842],{"class":38,"line":643},[36,62837,53794],{"class":62},[36,62839,2158],{"class":42},[36,62841,2751],{"class":62},[36,62843,3711],{"class":42},[36,62845,62846,62849,62851,62854],{"class":38,"line":921},[36,62847,62848],{"class":62},"            box-sizing",[36,62850,2158],{"class":42},[36,62852,62853],{"class":62},"border-box",[36,62855,3711],{"class":42},[36,62857,62858],{"class":38,"line":934},[36,62859,2204],{"class":42},[36,62861,62862],{"class":38,"line":939},[36,62863,70],{"emptyLinePlaceholder":69},[36,62865,62866,62869],{"class":38,"line":949},[36,62867,62868],{"class":53649},"        ul",[36,62870,2150],{"class":42},[36,62872,62873],{"class":38,"line":962},[36,62874,70],{"emptyLinePlaceholder":69},[36,62876,62877,62880,62882,62884],{"class":38,"line":974},[36,62878,62879],{"class":62},"            list-style",[36,62881,2158],{"class":42},[36,62883,57085],{"class":62},[36,62885,3711],{"class":42},[36,62887,62888],{"class":38,"line":979},[36,62889,2204],{"class":42},[36,62891,62892],{"class":38,"line":994},[36,62893,70],{"emptyLinePlaceholder":69},[36,62895,62896,62899],{"class":38,"line":1006},[36,62897,62898],{"class":79},"        .mi",[36,62900,2150],{"class":42},[36,62902,62903,62906,62908,62910],{"class":38,"line":1011},[36,62904,62905],{"class":62},"            position",[36,62907,2158],{"class":42},[36,62909,57112],{"class":62},[36,62911,3711],{"class":42},[36,62913,62914,62916,62918,62921,62923],{"class":38,"line":1023},[36,62915,53832],{"class":62},[36,62917,2158],{"class":42},[36,62919,62920],{"class":62},"223",[36,62922,53840],{"class":46},[36,62924,3711],{"class":42},[36,62926,62927,62929,62931,62933,62935,62937],{"class":38,"line":1028},[36,62928,53783],{"class":62},[36,62930,2158],{"class":42},[36,62932,1070],{"class":62},[36,62934,53840],{"class":46},[36,62936,53904],{"class":62},[36,62938,3711],{"class":42},[36,62940,62941],{"class":38,"line":1033},[36,62942,2204],{"class":42},[36,62944,62945],{"class":38,"line":1053},[36,62946,70],{"emptyLinePlaceholder":69},[36,62948,62949,62951,62954],{"class":38,"line":1064},[36,62950,62898],{"class":79},[36,62952,62953],{"class":53649}," input",[36,62955,2150],{"class":42},[36,62957,62958,62960,62962,62964,62966],{"class":38,"line":1075},[36,62959,53832],{"class":62},[36,62961,2158],{"class":42},[36,62963,62920],{"class":62},[36,62965,53840],{"class":46},[36,62967,3711],{"class":42},[36,62969,62970,62972,62974,62976,62978],{"class":38,"line":2291},[36,62971,53847],{"class":62},[36,62973,2158],{"class":42},[36,62975,3162],{"class":62},[36,62977,53840],{"class":46},[36,62979,3711],{"class":42},[36,62981,62982,62984,62986,62988,62990,62992],{"class":38,"line":2329},[36,62983,53794],{"class":62},[36,62985,2158],{"class":42},[36,62987,2751],{"class":62},[36,62989,4431],{"class":62},[36,62991,53840],{"class":46},[36,62993,3711],{"class":42},[36,62995,62996,62999,63001,63003,63005],{"class":38,"line":2334},[36,62997,62998],{"class":62},"            font-size",[36,63000,2158],{"class":42},[36,63002,3104],{"class":62},[36,63004,53840],{"class":46},[36,63006,3711],{"class":42},[36,63008,63009,63012,63014,63016,63018],{"class":38,"line":2339},[36,63010,63011],{"class":62},"            line-height",[36,63013,2158],{"class":42},[36,63015,3162],{"class":62},[36,63017,53840],{"class":46},[36,63019,3711],{"class":42},[36,63021,63022,63025,63027,63029,63031,63033,63036],{"class":38,"line":2365},[36,63023,63024],{"class":62},"            border",[36,63026,2158],{"class":42},[36,63028,1906],{"class":62},[36,63030,53840],{"class":46},[36,63032,53869],{"class":62},[36,63034,63035],{"class":62}," #e0e0e0",[36,63037,3711],{"class":42},[36,63039,63040,63043,63045,63047],{"class":38,"line":2373},[36,63041,63042],{"class":62},"            outline",[36,63044,2158],{"class":42},[36,63046,57085],{"class":62},[36,63048,3711],{"class":42},[36,63050,63051],{"class":38,"line":5001},[36,63052,2204],{"class":42},[36,63054,63055],{"class":38,"line":5006},[36,63056,70],{"emptyLinePlaceholder":69},[36,63058,63059,63061,63064],{"class":38,"line":10328},[36,63060,62898],{"class":79},[36,63062,63063],{"class":79}," .search",[36,63065,2150],{"class":42},[36,63067,63068,63070,63072,63074,63076,63078,63081],{"class":38,"line":10352},[36,63069,63024],{"class":62},[36,63071,2158],{"class":42},[36,63073,1906],{"class":62},[36,63075,53840],{"class":46},[36,63077,53869],{"class":62},[36,63079,63080],{"class":62}," #ff6700",[36,63082,3711],{"class":42},[36,63084,63085],{"class":38,"line":10357},[36,63086,2204],{"class":42},[36,63088,63089],{"class":38,"line":10363},[36,63090,70],{"emptyLinePlaceholder":69},[36,63092,63093,63096],{"class":38,"line":10390},[36,63094,63095],{"class":79},"        .result-list",[36,63097,2150],{"class":42},[36,63099,63100,63102,63104,63106],{"class":38,"line":10395},[36,63101,53820],{"class":62},[36,63103,2158],{"class":42},[36,63105,57085],{"class":62},[36,63107,3711],{"class":42},[36,63109,63110,63112,63114,63116],{"class":38,"line":10401},[36,63111,62905],{"class":62},[36,63113,2158],{"class":42},[36,63115,57179],{"class":62},[36,63117,3711],{"class":42},[36,63119,63120,63123,63125,63127],{"class":38,"line":10413},[36,63121,63122],{"class":62},"            left",[36,63124,2158],{"class":42},[36,63126,2751],{"class":62},[36,63128,3711],{"class":42},[36,63130,63131,63134,63136,63138,63140],{"class":38,"line":10425},[36,63132,63133],{"class":62},"            top",[36,63135,2158],{"class":42},[36,63137,3162],{"class":62},[36,63139,53840],{"class":46},[36,63141,3711],{"class":42},[36,63143,63144,63146,63148,63150,63152],{"class":38,"line":10437},[36,63145,53832],{"class":62},[36,63147,2158],{"class":42},[36,63149,62920],{"class":62},[36,63151,53840],{"class":46},[36,63153,3711],{"class":42},[36,63155,63156,63158,63160,63162,63164,63166,63168],{"class":38,"line":12095},[36,63157,63024],{"class":62},[36,63159,2158],{"class":42},[36,63161,1906],{"class":62},[36,63163,53840],{"class":46},[36,63165,53869],{"class":62},[36,63167,63080],{"class":62},[36,63169,3711],{"class":42},[36,63171,63172,63175,63177,63179],{"class":38,"line":12120},[36,63173,63174],{"class":62},"            border-top",[36,63176,2158],{"class":42},[36,63178,2751],{"class":62},[36,63180,3711],{"class":42},[36,63182,63183,63186,63188,63191],{"class":38,"line":12143},[36,63184,63185],{"class":62},"            background",[36,63187,2158],{"class":42},[36,63189,63190],{"class":62},"#fff",[36,63192,3711],{"class":42},[36,63194,63195],{"class":38,"line":12167},[36,63196,2204],{"class":42},[36,63198,63199],{"class":38,"line":12172},[36,63200,70],{"emptyLinePlaceholder":69},[36,63202,63203,63205,63207],{"class":38,"line":12177},[36,63204,63095],{"class":79},[36,63206,3815],{"class":53649},[36,63208,2150],{"class":42},[36,63210,63211,63213,63215,63218],{"class":38,"line":12182},[36,63212,53820],{"class":62},[36,63214,2158],{"class":42},[36,63216,63217],{"class":62},"block",[36,63219,3711],{"class":42},[36,63221,63222,63224,63226,63228,63230,63233,63235],{"class":38,"line":12191},[36,63223,53794],{"class":62},[36,63225,2158],{"class":42},[36,63227,2900],{"class":62},[36,63229,53840],{"class":46},[36,63231,63232],{"class":62}," 15",[36,63234,53840],{"class":46},[36,63236,3711],{"class":42},[36,63238,63239,63241,63243,63245,63247],{"class":38,"line":12196},[36,63240,62998],{"class":62},[36,63242,2158],{"class":42},[36,63244,3053],{"class":62},[36,63246,53840],{"class":46},[36,63248,3711],{"class":42},[36,63250,63251,63254,63256,63259],{"class":38,"line":12202},[36,63252,63253],{"class":62},"            color",[36,63255,2158],{"class":42},[36,63257,63258],{"class":62},"#424242",[36,63260,3711],{"class":42},[36,63262,63263,63266,63268,63270],{"class":38,"line":12223},[36,63264,63265],{"class":62},"            text-decoration",[36,63267,2158],{"class":42},[36,63269,57085],{"class":62},[36,63271,3711],{"class":42},[36,63273,63274],{"class":38,"line":12229},[36,63275,2204],{"class":42},[36,63277,63278],{"class":38,"line":12243},[36,63279,70],{"emptyLinePlaceholder":69},[36,63281,63282,63284,63286,63289],{"class":38,"line":12249},[36,63283,63095],{"class":79},[36,63285,3815],{"class":53649},[36,63287,63288],{"class":79},":hover",[36,63290,2150],{"class":42},[36,63292,63293,63295,63297,63300],{"class":38,"line":12276},[36,63294,53988],{"class":62},[36,63296,2158],{"class":42},[36,63298,63299],{"class":62},"#eee",[36,63301,3711],{"class":42},[36,63303,63304],{"class":38,"line":12285},[36,63305,2204],{"class":42},[36,63307,63308,63310,63312],{"class":38,"line":12291},[36,63309,54124],{"class":42},[36,63311,2467],{"class":53649},[36,63313,53656],{"class":42},[36,63315,63316],{"class":38,"line":12299},[36,63317,70],{"emptyLinePlaceholder":69},[36,63319,63320,63322,63324],{"class":38,"line":12304},[36,63321,54133],{"class":42},[36,63323,53683],{"class":53649},[36,63325,53656],{"class":42},[36,63327,63328],{"class":38,"line":18977},[36,63329,70],{"emptyLinePlaceholder":69},[36,63331,63332,63334,63336],{"class":38,"line":18983},[36,63333,3463],{"class":42},[36,63335,54148],{"class":53649},[36,63337,53656],{"class":42},[36,63339,63340,63342,63344,63346,63348,63351],{"class":38,"line":19006},[36,63341,53690],{"class":42},[36,63343,53959],{"class":53649},[36,63345,55834],{"class":79},[36,63347,47],{"class":42},[36,63349,63350],{"class":50},"\"mi\"",[36,63352,53656],{"class":42},[36,63354,63355,63357,63359,63361,63363,63366,63369,63371,63374],{"class":38,"line":19012},[36,63356,57650],{"class":42},[36,63358,56169],{"class":53649},[36,63360,56172],{"class":79},[36,63362,47],{"class":42},[36,63364,63365],{"class":50},"\"search\"",[36,63367,63368],{"class":79}," placeholder",[36,63370,47],{"class":42},[36,63372,63373],{"class":50},"\"小米笔记本\"",[36,63375,53656],{"class":42},[36,63377,63378,63380,63382,63384,63386,63389],{"class":38,"line":19035},[36,63379,57650],{"class":42},[36,63381,3557],{"class":53649},[36,63383,55834],{"class":79},[36,63385,47],{"class":42},[36,63387,63388],{"class":50},"\"result-list\"",[36,63390,53656],{"class":42},[36,63392,63393,63396,63398,63401,63403,63406,63408,63411,63414,63416,63418,63420],{"class":38,"line":19049},[36,63394,63395],{"class":42},"            \u003C",[36,63397,653],{"class":53649},[36,63399,63400],{"class":42},">\u003C",[36,63402,2796],{"class":53649},[36,63404,63405],{"class":79}," href",[36,63407,47],{"class":42},[36,63409,63410],{"class":50},"\"#\"",[36,63412,63413],{"class":42},">全部商品\u003C\u002F",[36,63415,2796],{"class":53649},[36,63417,57662],{"class":42},[36,63419,653],{"class":53649},[36,63421,53656],{"class":42},[36,63423,63424,63426,63428,63430,63432,63434,63436,63438,63441,63443,63445,63447],{"class":38,"line":19069},[36,63425,63395],{"class":42},[36,63427,653],{"class":53649},[36,63429,63400],{"class":42},[36,63431,2796],{"class":53649},[36,63433,63405],{"class":79},[36,63435,47],{"class":42},[36,63437,63410],{"class":50},[36,63439,63440],{"class":42},">小米11\u003C\u002F",[36,63442,2796],{"class":53649},[36,63444,57662],{"class":42},[36,63446,653],{"class":53649},[36,63448,53656],{"class":42},[36,63450,63451,63453,63455,63457,63459,63461,63463,63465,63468,63470,63472,63474],{"class":38,"line":19075},[36,63452,63395],{"class":42},[36,63454,653],{"class":53649},[36,63456,63400],{"class":42},[36,63458,2796],{"class":53649},[36,63460,63405],{"class":79},[36,63462,47],{"class":42},[36,63464,63410],{"class":50},[36,63466,63467],{"class":42},">小米10S\u003C\u002F",[36,63469,2796],{"class":53649},[36,63471,57662],{"class":42},[36,63473,653],{"class":53649},[36,63475,53656],{"class":42},[36,63477,63478,63480,63482,63484,63486,63488,63490,63492,63495,63497,63499,63501],{"class":38,"line":19086},[36,63479,63395],{"class":42},[36,63481,653],{"class":53649},[36,63483,63400],{"class":42},[36,63485,2796],{"class":53649},[36,63487,63405],{"class":79},[36,63489,47],{"class":42},[36,63491,63410],{"class":50},[36,63493,63494],{"class":42},">小米笔记本\u003C\u002F",[36,63496,2796],{"class":53649},[36,63498,57662],{"class":42},[36,63500,653],{"class":53649},[36,63502,53656],{"class":42},[36,63504,63505,63507,63509,63511,63513,63515,63517,63519,63522,63524,63526,63528],{"class":38,"line":19109},[36,63506,63395],{"class":42},[36,63508,653],{"class":53649},[36,63510,63400],{"class":42},[36,63512,2796],{"class":53649},[36,63514,63405],{"class":79},[36,63516,47],{"class":42},[36,63518,63410],{"class":50},[36,63520,63521],{"class":42},">小米手机\u003C\u002F",[36,63523,2796],{"class":53649},[36,63525,57662],{"class":42},[36,63527,653],{"class":53649},[36,63529,53656],{"class":42},[36,63531,63532,63534,63536,63538,63540,63542,63544,63546,63549,63551,63553,63555],{"class":38,"line":19131},[36,63533,63395],{"class":42},[36,63535,653],{"class":53649},[36,63537,63400],{"class":42},[36,63539,2796],{"class":53649},[36,63541,63405],{"class":79},[36,63543,47],{"class":42},[36,63545,63410],{"class":50},[36,63547,63548],{"class":42},">黑鲨4\u003C\u002F",[36,63550,2796],{"class":53649},[36,63552,57662],{"class":42},[36,63554,653],{"class":53649},[36,63556,53656],{"class":42},[36,63558,63559,63561,63563,63565,63567,63569,63571,63573,63576,63578,63580,63582],{"class":38,"line":19136},[36,63560,63395],{"class":42},[36,63562,653],{"class":53649},[36,63564,63400],{"class":42},[36,63566,2796],{"class":53649},[36,63568,63405],{"class":79},[36,63570,47],{"class":42},[36,63572,63410],{"class":50},[36,63574,63575],{"class":42},">空调\u003C\u002F",[36,63577,2796],{"class":53649},[36,63579,57662],{"class":42},[36,63581,653],{"class":53649},[36,63583,53656],{"class":42},[36,63585,63586,63589,63591],{"class":38,"line":19142},[36,63587,63588],{"class":42},"        \u003C\u002F",[36,63590,3557],{"class":53649},[36,63592,53656],{"class":42},[36,63594,63595,63597,63599],{"class":38,"line":19156},[36,63596,54124],{"class":42},[36,63598,53959],{"class":53649},[36,63600,53656],{"class":42},[36,63602,63603,63605,63607],{"class":38,"line":19169},[36,63604,53690],{"class":42},[36,63606,54161],{"class":53649},[36,63608,53656],{"class":42},[36,63610,63611],{"class":38,"line":19174},[36,63612,63613],{"class":2621},"        \u002F\u002F 1. 获取元素\n",[36,63615,63616,63619,63621,63623,63625,63627,63629,63632],{"class":38,"line":19188},[36,63617,63618],{"class":46},"        const",[36,63620,62953],{"class":62},[36,63622,15941],{"class":46},[36,63624,56744],{"class":42},[36,63626,56747],{"class":79},[36,63628,92],{"class":42},[36,63630,63631],{"class":50},"'[type=search]'",[36,63633,123],{"class":42},[36,63635,63636,63638,63641,63643,63645,63647,63649,63652],{"class":38,"line":19193},[36,63637,63618],{"class":46},[36,63639,63640],{"class":62}," ul",[36,63642,15941],{"class":46},[36,63644,56744],{"class":42},[36,63646,56747],{"class":79},[36,63648,92],{"class":42},[36,63650,63651],{"class":50},"'.result-list'",[36,63653,123],{"class":42},[36,63655,63656],{"class":38,"line":19199},[36,63657,63658],{"class":2621},"        \u002F\u002F console.log(input)\n",[36,63660,63661],{"class":38,"line":19204},[36,63662,63663],{"class":2621},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,63665,63666,63669,63671,63673,63676,63678,63680],{"class":38,"line":19218},[36,63667,63668],{"class":42},"        input.",[36,63670,60161],{"class":79},[36,63672,92],{"class":42},[36,63674,63675],{"class":50},"'focus'",[36,63677,630],{"class":42},[36,63679,56797],{"class":46},[36,63681,56800],{"class":42},[36,63683,63684],{"class":38,"line":19223},[36,63685,63686],{"class":2621},"            \u002F\u002F ul显示\n",[36,63688,63689,63692,63694],{"class":38,"line":19228},[36,63690,63691],{"class":42},"            ul.style.display ",[36,63693,47],{"class":46},[36,63695,63696],{"class":50}," 'block'\n",[36,63698,63699],{"class":38,"line":19242},[36,63700,63701],{"class":2621},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,63703,63704,63707,63709,63711,63714],{"class":38,"line":19254},[36,63705,63706],{"class":42},"            input.classList.",[36,63708,7716],{"class":79},[36,63710,92],{"class":42},[36,63712,63713],{"class":50},"'search'",[36,63715,123],{"class":42},[36,63717,63718],{"class":38,"line":19259},[36,63719,63720],{"class":42},"        })\n",[36,63722,63723],{"class":38,"line":19272},[36,63724,63725],{"class":2621},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,63727,63728,63730,63732,63734,63737,63739,63741],{"class":38,"line":19277},[36,63729,63668],{"class":42},[36,63731,60161],{"class":79},[36,63733,92],{"class":42},[36,63735,63736],{"class":50},"'blur'",[36,63738,630],{"class":42},[36,63740,56797],{"class":46},[36,63742,56800],{"class":42},[36,63744,63745,63747,63749],{"class":38,"line":19282},[36,63746,63691],{"class":42},[36,63748,47],{"class":46},[36,63750,63751],{"class":50}," 'none'\n",[36,63753,63754,63756,63758,63760,63762],{"class":38,"line":19287},[36,63755,63706],{"class":42},[36,63757,59354],{"class":79},[36,63759,92],{"class":42},[36,63761,63713],{"class":50},[36,63763,123],{"class":42},[36,63765,63766],{"class":38,"line":19300},[36,63767,63720],{"class":42},[36,63769,63770,63772,63774],{"class":38,"line":19305},[36,63771,54124],{"class":42},[36,63773,54161],{"class":53649},[36,63775,53656],{"class":42},[36,63777,63778,63780,63782],{"class":38,"line":34985},[36,63779,54133],{"class":42},[36,63781,54148],{"class":53649},[36,63783,53656],{"class":42},[36,63785,63786],{"class":38,"line":34991},[36,63787,70],{"emptyLinePlaceholder":69},[36,63789,63790,63792,63794],{"class":38,"line":34997},[36,63791,54133],{"class":42},[36,63793,52984],{"class":53649},[36,63795,53656],{"class":42},[24368,63797,63799],{"id":63798},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63801,63802],{},"评论字数统计案例",[19,63804,63805],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63807,63808],{},"牢记focus伪类选择器",[53693,63810],{"charSet":63811},"UTF-8",[53693,63813],{"name":63814,"content":63815},"viewport","width=device-width, initial-scale=1.0",[53756,63817,63818],{},"Document",[2467,63820,63821],{},"\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",[56169,63823],{"type":7570},[3557,63825,63826,63829],{},[653,63827,63828],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[653,63830,63831],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,63833,63835],{"className":52982,"code":63834,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,63836,63837,63847,63861,63865,63873,63887,63907,63927,63940,63948,63955,63968,63982,63992,64002,64006,64010,64017,64029,64041,64053,64065,64094,64107,64111,64115,64124,64135,64147,64158,64169,64181,64192,64204,64220,64232,64236,64240,64251,64262,64272,64284,64288,64292,64300,64311,64321,64332,64344,64357,64369,64381,64385,64389,64398,64410,64421,64434,64445,64459,64463,64467,64474,64486,64498,64508,64512,64516,64525,64537,64547,64551,64555,64566,64576,64595,64608,64612,64616,64626,64636,64640,64644,64655,64666,64678,64690,64694,64698,64709,64720,64734,64738,64742,64753,64763,64775,64779,64787,64795,64799,64807,64822,64841,64881,64894,64902,64916,64936,64944,64959,64982,65000,65015,65034,65054,65074,65082,65090,65098,65106,65126,65146,65151,65168,65177,65181,65186,65202,65210,65214,65219,65236,65241,65266,65270,65274,65279,65284,65292,65300,65304],{"__ignoreMap":31},[36,63838,63839,63841,63843,63845],{"class":38,"line":39},[36,63840,53646],{"class":42},[36,63842,53650],{"class":53649},[36,63844,53653],{"class":79},[36,63846,53656],{"class":42},[36,63848,63849,63851,63853,63855,63857,63859],{"class":38,"line":54},[36,63850,3463],{"class":42},[36,63852,52984],{"class":53649},[36,63854,53665],{"class":79},[36,63856,47],{"class":42},[36,63858,53670],{"class":50},[36,63860,53656],{"class":42},[36,63862,63863],{"class":38,"line":66},[36,63864,70],{"emptyLinePlaceholder":69},[36,63866,63867,63869,63871],{"class":38,"line":73},[36,63868,3463],{"class":42},[36,63870,53683],{"class":53649},[36,63872,53656],{"class":42},[36,63874,63875,63877,63879,63881,63883,63885],{"class":38,"line":86},[36,63876,54492],{"class":42},[36,63878,53693],{"class":53649},[36,63880,53696],{"class":79},[36,63882,47],{"class":42},[36,63884,53701],{"class":50},[36,63886,53656],{"class":42},[36,63888,63889,63891,63893,63895,63897,63899,63901,63903,63905],{"class":38,"line":126},[36,63890,54492],{"class":42},[36,63892,53693],{"class":53649},[36,63894,53712],{"class":79},[36,63896,47],{"class":42},[36,63898,53717],{"class":50},[36,63900,53720],{"class":79},[36,63902,47],{"class":42},[36,63904,53725],{"class":50},[36,63906,53656],{"class":42},[36,63908,63909,63911,63913,63915,63917,63919,63921,63923,63925],{"class":38,"line":131},[36,63910,54492],{"class":42},[36,63912,53693],{"class":53649},[36,63914,17295],{"class":79},[36,63916,47],{"class":42},[36,63918,53740],{"class":50},[36,63920,53720],{"class":79},[36,63922,47],{"class":42},[36,63924,53747],{"class":50},[36,63926,53656],{"class":42},[36,63928,63929,63931,63933,63936,63938],{"class":38,"line":225},[36,63930,54492],{"class":42},[36,63932,53756],{"class":53649},[36,63934,63935],{"class":42},">评论回车发布\u003C\u002F",[36,63937,53756],{"class":53649},[36,63939,53656],{"class":42},[36,63941,63942,63944,63946],{"class":38,"line":235},[36,63943,54492],{"class":42},[36,63945,2467],{"class":53649},[36,63947,53656],{"class":42},[36,63949,63950,63953],{"class":38,"line":377},[36,63951,63952],{"class":79},"    .wrapper",[36,63954,2150],{"class":42},[36,63956,63957,63960,63962,63964,63966],{"class":38,"line":617},[36,63958,63959],{"class":62},"      min-width",[36,63961,2158],{"class":42},[36,63963,6371],{"class":62},[36,63965,53840],{"class":46},[36,63967,3711],{"class":42},[36,63969,63970,63973,63975,63978,63980],{"class":38,"line":643},[36,63971,63972],{"class":62},"      max-width",[36,63974,2158],{"class":42},[36,63976,63977],{"class":62},"800",[36,63979,53840],{"class":46},[36,63981,3711],{"class":42},[36,63983,63984,63986,63988,63990],{"class":38,"line":921},[36,63985,57357],{"class":62},[36,63987,2158],{"class":42},[36,63989,53825],{"class":62},[36,63991,3711],{"class":42},[36,63993,63994,63996,63998,64000],{"class":38,"line":934},[36,63995,57368],{"class":62},[36,63997,2158],{"class":42},[36,63999,53928],{"class":62},[36,64001,3711],{"class":42},[36,64003,64004],{"class":38,"line":939},[36,64005,4580],{"class":42},[36,64007,64008],{"class":38,"line":949},[36,64009,70],{"emptyLinePlaceholder":69},[36,64011,64012,64015],{"class":38,"line":962},[36,64013,64014],{"class":79},"    .avatar",[36,64016,2150],{"class":42},[36,64018,64019,64021,64023,64025,64027],{"class":38,"line":974},[36,64020,57119],{"class":62},[36,64022,2158],{"class":42},[36,64024,3162],{"class":62},[36,64026,53840],{"class":46},[36,64028,3711],{"class":42},[36,64030,64031,64033,64035,64037,64039],{"class":38,"line":979},[36,64032,57133],{"class":62},[36,64034,2158],{"class":42},[36,64036,3162],{"class":62},[36,64038,53840],{"class":46},[36,64040,3711],{"class":42},[36,64042,64043,64045,64047,64049,64051],{"class":38,"line":994},[36,64044,57482],{"class":62},[36,64046,2158],{"class":42},[36,64048,3210],{"class":62},[36,64050,2884],{"class":46},[36,64052,3711],{"class":42},[36,64054,64055,64058,64060,64063],{"class":38,"line":1006},[36,64056,64057],{"class":62},"      overflow",[36,64059,2158],{"class":42},[36,64061,64062],{"class":62},"hidden",[36,64064,3711],{"class":42},[36,64066,64067,64070,64072,64075,64077,64080,64082,64085,64087,64089,64092],{"class":38,"line":1011},[36,64068,64069],{"class":62},"      background",[36,64071,2158],{"class":42},[36,64073,64074],{"class":62},"url",[36,64076,92],{"class":42},[36,64078,64079],{"class":7598},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,64081,16091],{"class":42},[36,64083,64084],{"class":62},"no-repeat",[36,64086,19517],{"class":62},[36,64088,27349],{"class":42},[36,64090,64091],{"class":62},"cover",[36,64093,3711],{"class":42},[36,64095,64096,64099,64101,64103,64105],{"class":38,"line":1023},[36,64097,64098],{"class":62},"      margin-right",[36,64100,2158],{"class":42},[36,64102,3254],{"class":62},[36,64104,53840],{"class":46},[36,64106,3711],{"class":42},[36,64108,64109],{"class":38,"line":1028},[36,64110,4580],{"class":42},[36,64112,64113],{"class":38,"line":1033},[36,64114,70],{"emptyLinePlaceholder":69},[36,64116,64117,64119,64122],{"class":38,"line":1053},[36,64118,63952],{"class":79},[36,64120,64121],{"class":53649}," textarea",[36,64123,2150],{"class":42},[36,64125,64126,64129,64131,64133],{"class":38,"line":1064},[36,64127,64128],{"class":62},"      outline",[36,64130,2158],{"class":42},[36,64132,57085],{"class":62},[36,64134,3711],{"class":42},[36,64136,64137,64140,64142,64145],{"class":38,"line":1075},[36,64138,64139],{"class":62},"      border-color",[36,64141,2158],{"class":42},[36,64143,64144],{"class":62},"transparent",[36,64146,3711],{"class":42},[36,64148,64149,64152,64154,64156],{"class":38,"line":2291},[36,64150,64151],{"class":62},"      resize",[36,64153,2158],{"class":42},[36,64155,57085],{"class":62},[36,64157,3711],{"class":42},[36,64159,64160,64162,64164,64167],{"class":38,"line":2329},[36,64161,64069],{"class":62},[36,64163,2158],{"class":42},[36,64165,64166],{"class":62},"#f5f5f5",[36,64168,3711],{"class":42},[36,64170,64171,64173,64175,64177,64179],{"class":38,"line":2334},[36,64172,57482],{"class":62},[36,64174,2158],{"class":42},[36,64176,2850],{"class":62},[36,64178,53840],{"class":46},[36,64180,3711],{"class":42},[36,64182,64183,64186,64188,64190],{"class":38,"line":2339},[36,64184,64185],{"class":62},"      flex",[36,64187,2158],{"class":42},[36,64189,1906],{"class":62},[36,64191,3711],{"class":42},[36,64193,64194,64196,64198,64200,64202],{"class":38,"line":2365},[36,64195,57043],{"class":62},[36,64197,2158],{"class":42},[36,64199,3002],{"class":62},[36,64201,53840],{"class":46},[36,64203,3711],{"class":42},[36,64205,64206,64209,64211,64213,64216,64218],{"class":38,"line":2373},[36,64207,64208],{"class":62},"      transition",[36,64210,2158],{"class":42},[36,64212,30491],{"class":62},[36,64214,64215],{"class":62}," 0.5",[36,64217,3249],{"class":46},[36,64219,3711],{"class":42},[36,64221,64222,64224,64226,64228,64230],{"class":38,"line":5001},[36,64223,57133],{"class":62},[36,64225,2158],{"class":42},[36,64227,3503],{"class":62},[36,64229,53840],{"class":46},[36,64231,3711],{"class":42},[36,64233,64234],{"class":38,"line":5006},[36,64235,4580],{"class":42},[36,64237,64238],{"class":38,"line":10328},[36,64239,70],{"emptyLinePlaceholder":69},[36,64241,64242,64244,64246,64249],{"class":38,"line":10352},[36,64243,63952],{"class":79},[36,64245,64121],{"class":53649},[36,64247,64248],{"class":79},":focus",[36,64250,2150],{"class":42},[36,64252,64253,64255,64257,64260],{"class":38,"line":10357},[36,64254,64139],{"class":62},[36,64256,2158],{"class":42},[36,64258,64259],{"class":62},"#e4e4e4",[36,64261,3711],{"class":42},[36,64263,64264,64266,64268,64270],{"class":38,"line":10363},[36,64265,64069],{"class":62},[36,64267,2158],{"class":42},[36,64269,63190],{"class":62},[36,64271,3711],{"class":42},[36,64273,64274,64276,64278,64280,64282],{"class":38,"line":10390},[36,64275,57133],{"class":62},[36,64277,2158],{"class":42},[36,64279,3210],{"class":62},[36,64281,53840],{"class":46},[36,64283,3711],{"class":42},[36,64285,64286],{"class":38,"line":10395},[36,64287,4580],{"class":42},[36,64289,64290],{"class":38,"line":10401},[36,64291,70],{"emptyLinePlaceholder":69},[36,64293,64294,64296,64298],{"class":38,"line":10413},[36,64295,63952],{"class":79},[36,64297,59815],{"class":53649},[36,64299,2150],{"class":42},[36,64301,64302,64304,64306,64309],{"class":38,"line":10425},[36,64303,64069],{"class":62},[36,64305,2158],{"class":42},[36,64307,64308],{"class":62},"#00aeec",[36,64310,3711],{"class":42},[36,64312,64313,64315,64317,64319],{"class":38,"line":10437},[36,64314,59764],{"class":62},[36,64316,2158],{"class":42},[36,64318,63190],{"class":62},[36,64320,3711],{"class":42},[36,64322,64323,64326,64328,64330],{"class":38,"line":12095},[36,64324,64325],{"class":62},"      border",[36,64327,2158],{"class":42},[36,64329,57085],{"class":62},[36,64331,3711],{"class":42},[36,64333,64334,64336,64338,64340,64342],{"class":38,"line":12120},[36,64335,57482],{"class":62},[36,64337,2158],{"class":42},[36,64339,2850],{"class":62},[36,64341,53840],{"class":46},[36,64343,3711],{"class":42},[36,64345,64346,64349,64351,64353,64355],{"class":38,"line":12143},[36,64347,64348],{"class":62},"      margin-left",[36,64350,2158],{"class":42},[36,64352,3002],{"class":62},[36,64354,53840],{"class":46},[36,64356,3711],{"class":42},[36,64358,64359,64361,64363,64365,64367],{"class":38,"line":12167},[36,64360,57119],{"class":62},[36,64362,2158],{"class":42},[36,64364,2912],{"class":62},[36,64366,53840],{"class":46},[36,64368,3711],{"class":42},[36,64370,64371,64374,64376,64379],{"class":38,"line":12172},[36,64372,64373],{"class":62},"      cursor",[36,64375,2158],{"class":42},[36,64377,64378],{"class":62},"pointer",[36,64380,3711],{"class":42},[36,64382,64383],{"class":38,"line":12177},[36,64384,4580],{"class":42},[36,64386,64387],{"class":38,"line":12182},[36,64388,70],{"emptyLinePlaceholder":69},[36,64390,64391,64393,64396],{"class":38,"line":12191},[36,64392,63952],{"class":79},[36,64394,64395],{"class":79}," .total",[36,64397,2150],{"class":42},[36,64399,64400,64402,64404,64406,64408],{"class":38,"line":12196},[36,64401,64098],{"class":62},[36,64403,2158],{"class":42},[36,64405,3167],{"class":62},[36,64407,53840],{"class":46},[36,64409,3711],{"class":42},[36,64411,64412,64414,64416,64419],{"class":38,"line":12202},[36,64413,59764],{"class":62},[36,64415,2158],{"class":42},[36,64417,64418],{"class":62},"#999",[36,64420,3711],{"class":42},[36,64422,64423,64426,64428,64430,64432],{"class":38,"line":12223},[36,64424,64425],{"class":62},"      margin-top",[36,64427,2158],{"class":42},[36,64429,2875],{"class":62},[36,64431,53840],{"class":46},[36,64433,3711],{"class":42},[36,64435,64436,64439,64441,64443],{"class":38,"line":12229},[36,64437,64438],{"class":62},"      opacity",[36,64440,2158],{"class":42},[36,64442,2751],{"class":62},[36,64444,3711],{"class":42},[36,64446,64447,64449,64451,64453,64455,64457],{"class":38,"line":12243},[36,64448,64208],{"class":62},[36,64450,2158],{"class":42},[36,64452,30491],{"class":62},[36,64454,64215],{"class":62},[36,64456,3249],{"class":46},[36,64458,3711],{"class":42},[36,64460,64461],{"class":38,"line":12249},[36,64462,4580],{"class":42},[36,64464,64465],{"class":38,"line":12276},[36,64466,70],{"emptyLinePlaceholder":69},[36,64468,64469,64472],{"class":38,"line":12285},[36,64470,64471],{"class":79},"    .list",[36,64473,2150],{"class":42},[36,64475,64476,64478,64480,64482,64484],{"class":38,"line":12291},[36,64477,63959],{"class":62},[36,64479,2158],{"class":42},[36,64481,6371],{"class":62},[36,64483,53840],{"class":46},[36,64485,3711],{"class":42},[36,64487,64488,64490,64492,64494,64496],{"class":38,"line":12299},[36,64489,63972],{"class":62},[36,64491,2158],{"class":42},[36,64493,63977],{"class":62},[36,64495,53840],{"class":46},[36,64497,3711],{"class":42},[36,64499,64500,64502,64504,64506],{"class":38,"line":12304},[36,64501,57357],{"class":62},[36,64503,2158],{"class":42},[36,64505,53825],{"class":62},[36,64507,3711],{"class":42},[36,64509,64510],{"class":38,"line":18977},[36,64511,4580],{"class":42},[36,64513,64514],{"class":38,"line":18983},[36,64515,70],{"emptyLinePlaceholder":69},[36,64517,64518,64520,64523],{"class":38,"line":19006},[36,64519,64471],{"class":79},[36,64521,64522],{"class":79}," .item",[36,64524,2150],{"class":42},[36,64526,64527,64529,64531,64533,64535],{"class":38,"line":19012},[36,64528,57119],{"class":62},[36,64530,2158],{"class":42},[36,64532,1070],{"class":62},[36,64534,2884],{"class":46},[36,64536,3711],{"class":42},[36,64538,64539,64541,64543,64545],{"class":38,"line":19035},[36,64540,57357],{"class":62},[36,64542,2158],{"class":42},[36,64544,53825],{"class":62},[36,64546,3711],{"class":42},[36,64548,64549],{"class":38,"line":19049},[36,64550,4580],{"class":42},[36,64552,64553],{"class":38,"line":19069},[36,64554,70],{"emptyLinePlaceholder":69},[36,64556,64557,64559,64561,64564],{"class":38,"line":19075},[36,64558,64471],{"class":79},[36,64560,64522],{"class":79},[36,64562,64563],{"class":79}," .info",[36,64565,2150],{"class":42},[36,64567,64568,64570,64572,64574],{"class":38,"line":19086},[36,64569,64185],{"class":62},[36,64571,2158],{"class":42},[36,64573,1906],{"class":62},[36,64575,3711],{"class":42},[36,64577,64578,64581,64583,64585,64587,64590,64593],{"class":38,"line":19109},[36,64579,64580],{"class":62},"      border-bottom",[36,64582,2158],{"class":42},[36,64584,1906],{"class":62},[36,64586,53840],{"class":46},[36,64588,64589],{"class":62}," dashed",[36,64591,64592],{"class":62}," #e4e4e4",[36,64594,3711],{"class":42},[36,64596,64597,64600,64602,64604,64606],{"class":38,"line":19131},[36,64598,64599],{"class":62},"      padding-bottom",[36,64601,2158],{"class":42},[36,64603,3002],{"class":62},[36,64605,53840],{"class":46},[36,64607,3711],{"class":42},[36,64609,64610],{"class":38,"line":19136},[36,64611,4580],{"class":42},[36,64613,64614],{"class":38,"line":19142},[36,64615,70],{"emptyLinePlaceholder":69},[36,64617,64618,64620,64622,64624],{"class":38,"line":19156},[36,64619,64471],{"class":79},[36,64621,64522],{"class":79},[36,64623,9206],{"class":53649},[36,64625,2150],{"class":42},[36,64627,64628,64630,64632,64634],{"class":38,"line":19169},[36,64629,57054],{"class":62},[36,64631,2158],{"class":42},[36,64633,2751],{"class":62},[36,64635,3711],{"class":42},[36,64637,64638],{"class":38,"line":19174},[36,64639,4580],{"class":42},[36,64641,64642],{"class":38,"line":19188},[36,64643,70],{"emptyLinePlaceholder":69},[36,64645,64646,64648,64650,64653],{"class":38,"line":19193},[36,64647,64471],{"class":79},[36,64649,64522],{"class":79},[36,64651,64652],{"class":79}," .name",[36,64654,2150],{"class":42},[36,64656,64657,64659,64661,64664],{"class":38,"line":19199},[36,64658,59764],{"class":62},[36,64660,2158],{"class":42},[36,64662,64663],{"class":62},"#FB7299",[36,64665,3711],{"class":42},[36,64667,64668,64670,64672,64674,64676],{"class":38,"line":19204},[36,64669,57270],{"class":62},[36,64671,2158],{"class":42},[36,64673,3104],{"class":62},[36,64675,53840],{"class":46},[36,64677,3711],{"class":42},[36,64679,64680,64683,64685,64688],{"class":38,"line":19218},[36,64681,64682],{"class":62},"      font-weight",[36,64684,2158],{"class":42},[36,64686,64687],{"class":62},"bold",[36,64689,3711],{"class":42},[36,64691,64692],{"class":38,"line":19223},[36,64693,4580],{"class":42},[36,64695,64696],{"class":38,"line":19228},[36,64697,70],{"emptyLinePlaceholder":69},[36,64699,64700,64702,64704,64707],{"class":38,"line":19242},[36,64701,64471],{"class":79},[36,64703,64522],{"class":79},[36,64705,64706],{"class":79}," .text",[36,64708,2150],{"class":42},[36,64710,64711,64713,64715,64718],{"class":38,"line":19254},[36,64712,59764],{"class":62},[36,64714,2158],{"class":42},[36,64716,64717],{"class":62},"#333",[36,64719,3711],{"class":42},[36,64721,64722,64724,64726,64728,64730,64732],{"class":38,"line":19259},[36,64723,57043],{"class":62},[36,64725,2158],{"class":42},[36,64727,3002],{"class":62},[36,64729,53840],{"class":46},[36,64731,899],{"class":62},[36,64733,3711],{"class":42},[36,64735,64736],{"class":38,"line":19272},[36,64737,4580],{"class":42},[36,64739,64740],{"class":38,"line":19277},[36,64741,70],{"emptyLinePlaceholder":69},[36,64743,64744,64746,64748,64751],{"class":38,"line":19282},[36,64745,64471],{"class":79},[36,64747,64522],{"class":79},[36,64749,64750],{"class":79}," .time",[36,64752,2150],{"class":42},[36,64754,64755,64757,64759,64761],{"class":38,"line":19287},[36,64756,59764],{"class":62},[36,64758,2158],{"class":42},[36,64760,64418],{"class":62},[36,64762,3711],{"class":42},[36,64764,64765,64767,64769,64771,64773],{"class":38,"line":19300},[36,64766,57270],{"class":62},[36,64768,2158],{"class":42},[36,64770,3053],{"class":62},[36,64772,53840],{"class":46},[36,64774,3711],{"class":42},[36,64776,64777],{"class":38,"line":19305},[36,64778,4580],{"class":42},[36,64780,64781,64783,64785],{"class":38,"line":34985},[36,64782,54765],{"class":42},[36,64784,2467],{"class":53649},[36,64786,53656],{"class":42},[36,64788,64789,64791,64793],{"class":38,"line":34991},[36,64790,54133],{"class":42},[36,64792,53683],{"class":53649},[36,64794,53656],{"class":42},[36,64796,64797],{"class":38,"line":34997},[36,64798,70],{"emptyLinePlaceholder":69},[36,64800,64801,64803,64805],{"class":38,"line":35003},[36,64802,3463],{"class":42},[36,64804,54148],{"class":53649},[36,64806,53656],{"class":42},[36,64808,64809,64811,64813,64815,64817,64820],{"class":38,"line":35009},[36,64810,54492],{"class":42},[36,64812,53959],{"class":53649},[36,64814,55834],{"class":79},[36,64816,47],{"class":42},[36,64818,64819],{"class":50},"\"wrapper\"",[36,64821,53656],{"class":42},[36,64823,64824,64826,64828,64830,64832,64835,64837,64839],{"class":38,"line":35020},[36,64825,53690],{"class":42},[36,64827,2997],{"class":53649},[36,64829,55834],{"class":79},[36,64831,47],{"class":42},[36,64833,64834],{"class":50},"\"avatar\"",[36,64836,57662],{"class":42},[36,64838,2997],{"class":53649},[36,64840,53656],{"class":42},[36,64842,64843,64845,64847,64849,64851,64854,64856,64858,64861,64863,64865,64867,64870,64872,64875,64877,64879],{"class":38,"line":35026},[36,64844,53690],{"class":42},[36,64846,56636],{"class":53649},[36,64848,17334],{"class":79},[36,64850,47],{"class":42},[36,64852,64853],{"class":50},"\"tx\"",[36,64855,63368],{"class":79},[36,64857,47],{"class":42},[36,64859,64860],{"class":50},"\"发一条友善的评论\"",[36,64862,56659],{"class":79},[36,64864,47],{"class":42},[36,64866,6086],{"class":50},[36,64868,64869],{"class":79}," maxlength",[36,64871,47],{"class":42},[36,64873,64874],{"class":50},"\"200\"",[36,64876,57662],{"class":42},[36,64878,56636],{"class":53649},[36,64880,53656],{"class":42},[36,64882,64883,64885,64887,64890,64892],{"class":38,"line":35046},[36,64884,53690],{"class":42},[36,64886,56235],{"class":53649},[36,64888,64889],{"class":42},">发布\u003C\u002F",[36,64891,56235],{"class":53649},[36,64893,53656],{"class":42},[36,64895,64896,64898,64900],{"class":38,"line":35052},[36,64897,54765],{"class":42},[36,64899,53959],{"class":53649},[36,64901,53656],{"class":42},[36,64903,64904,64906,64908,64910,64912,64914],{"class":38,"line":35063},[36,64905,54492],{"class":42},[36,64907,53959],{"class":53649},[36,64909,55834],{"class":79},[36,64911,47],{"class":42},[36,64913,64819],{"class":50},[36,64915,53656],{"class":42},[36,64917,64918,64920,64922,64924,64926,64929,64932,64934],{"class":38,"line":35069},[36,64919,53690],{"class":42},[36,64921,36],{"class":53649},[36,64923,55834],{"class":79},[36,64925,47],{"class":42},[36,64927,64928],{"class":50},"\"total\"",[36,64930,64931],{"class":42},">0\u002F200字\u003C\u002F",[36,64933,36],{"class":53649},[36,64935,53656],{"class":42},[36,64937,64938,64940,64942],{"class":38,"line":35075},[36,64939,54765],{"class":42},[36,64941,53959],{"class":53649},[36,64943,53656],{"class":42},[36,64945,64946,64948,64950,64952,64954,64957],{"class":38,"line":35081},[36,64947,54492],{"class":42},[36,64949,53959],{"class":53649},[36,64951,55834],{"class":79},[36,64953,47],{"class":42},[36,64955,64956],{"class":50},"\"list\"",[36,64958,53656],{"class":42},[36,64960,64961,64963,64965,64967,64969,64972,64975,64977,64980],{"class":38,"line":35087},[36,64962,53690],{"class":42},[36,64964,53959],{"class":53649},[36,64966,55834],{"class":79},[36,64968,47],{"class":42},[36,64970,64971],{"class":50},"\"item\"",[36,64973,64974],{"class":79}," style",[36,64976,47],{"class":42},[36,64978,64979],{"class":50},"\"display: none;\"",[36,64981,53656],{"class":42},[36,64983,64984,64986,64988,64990,64992,64994,64996,64998],{"class":38,"line":35093},[36,64985,57582],{"class":42},[36,64987,2997],{"class":53649},[36,64989,55834],{"class":79},[36,64991,47],{"class":42},[36,64993,64834],{"class":50},[36,64995,57662],{"class":42},[36,64997,2997],{"class":53649},[36,64999,53656],{"class":42},[36,65001,65002,65004,65006,65008,65010,65013],{"class":38,"line":35099},[36,65003,57582],{"class":42},[36,65005,53959],{"class":53649},[36,65007,55834],{"class":79},[36,65009,47],{"class":42},[36,65011,65012],{"class":50},"\"info\"",[36,65014,53656],{"class":42},[36,65016,65017,65019,65021,65023,65025,65027,65030,65032],{"class":38,"line":35105},[36,65018,57650],{"class":42},[36,65020,19],{"class":53649},[36,65022,55834],{"class":79},[36,65024,47],{"class":42},[36,65026,2251],{"class":50},[36,65028,65029],{"class":42},">清风徐来\u003C\u002F",[36,65031,19],{"class":53649},[36,65033,53656],{"class":42},[36,65035,65036,65038,65040,65042,65044,65047,65050,65052],{"class":38,"line":35125},[36,65037,57650],{"class":42},[36,65039,19],{"class":53649},[36,65041,55834],{"class":79},[36,65043,47],{"class":42},[36,65045,65046],{"class":50},"\"text\"",[36,65048,65049],{"class":42},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,65051,19],{"class":53649},[36,65053,53656],{"class":42},[36,65055,65056,65058,65060,65062,65064,65067,65070,65072],{"class":38,"line":35131},[36,65057,57650],{"class":42},[36,65059,19],{"class":53649},[36,65061,55834],{"class":79},[36,65063,47],{"class":42},[36,65065,65066],{"class":50},"\"time\"",[36,65068,65069],{"class":42},">2022-10-10 20:29:21\u003C\u002F",[36,65071,19],{"class":53649},[36,65073,53656],{"class":42},[36,65075,65076,65078,65080],{"class":38,"line":35147},[36,65077,57755],{"class":42},[36,65079,53959],{"class":53649},[36,65081,53656],{"class":42},[36,65083,65084,65086,65088],{"class":38,"line":35153},[36,65085,54124],{"class":42},[36,65087,53959],{"class":53649},[36,65089,53656],{"class":42},[36,65091,65092,65094,65096],{"class":38,"line":35167},[36,65093,54765],{"class":42},[36,65095,53959],{"class":53649},[36,65097,53656],{"class":42},[36,65099,65100,65102,65104],{"class":38,"line":35173},[36,65101,54492],{"class":42},[36,65103,54161],{"class":53649},[36,65105,53656],{"class":42},[36,65107,65108,65110,65113,65115,65117,65119,65121,65124],{"class":38,"line":35188},[36,65109,13599],{"class":46},[36,65111,65112],{"class":62}," tx",[36,65114,15941],{"class":46},[36,65116,56744],{"class":42},[36,65118,56747],{"class":79},[36,65120,92],{"class":42},[36,65122,65123],{"class":50},"'#tx'",[36,65125,123],{"class":42},[36,65127,65128,65130,65133,65135,65137,65139,65141,65144],{"class":38,"line":35194},[36,65129,13599],{"class":46},[36,65131,65132],{"class":62}," total",[36,65134,15941],{"class":46},[36,65136,56744],{"class":42},[36,65138,56747],{"class":79},[36,65140,92],{"class":42},[36,65142,65143],{"class":50},"'.total'",[36,65145,123],{"class":42},[36,65147,65148],{"class":38,"line":35203},[36,65149,65150],{"class":2621},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,65152,65153,65156,65158,65160,65162,65164,65166],{"class":38,"line":35209},[36,65154,65155],{"class":42},"    tx.",[36,65157,60161],{"class":79},[36,65159,92],{"class":42},[36,65161,63675],{"class":50},[36,65163,630],{"class":42},[36,65165,56797],{"class":46},[36,65167,56800],{"class":42},[36,65169,65170,65173,65175],{"class":38,"line":35218},[36,65171,65172],{"class":42},"      total.style.opacity ",[36,65174,47],{"class":46},[36,65176,58047],{"class":62},[36,65178,65179],{"class":38,"line":35224},[36,65180,35813],{"class":42},[36,65182,65183],{"class":38,"line":35230},[36,65184,65185],{"class":2621},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,65187,65188,65190,65192,65194,65196,65198,65200],{"class":38,"line":35239},[36,65189,65155],{"class":42},[36,65191,60161],{"class":79},[36,65193,92],{"class":42},[36,65195,63736],{"class":50},[36,65197,630],{"class":42},[36,65199,56797],{"class":46},[36,65201,56800],{"class":42},[36,65203,65204,65206,65208],{"class":38,"line":35245},[36,65205,65172],{"class":42},[36,65207,47],{"class":46},[36,65209,49682],{"class":62},[36,65211,65212],{"class":38,"line":35256},[36,65213,35813],{"class":42},[36,65215,65216],{"class":38,"line":35262},[36,65217,65218],{"class":2621},"    \u002F\u002F 3. 检测用户输入\n",[36,65220,65221,65223,65225,65227,65230,65232,65234],{"class":38,"line":35281},[36,65222,65155],{"class":42},[36,65224,60161],{"class":79},[36,65226,92],{"class":42},[36,65228,65229],{"class":50},"'input'",[36,65231,630],{"class":42},[36,65233,56797],{"class":46},[36,65235,56800],{"class":42},[36,65237,65238],{"class":38,"line":35287},[36,65239,65240],{"class":2621},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,65242,65243,65246,65248,65251,65254,65256,65259,65261,65263],{"class":38,"line":35298},[36,65244,65245],{"class":42},"      total.innerHTML ",[36,65247,47],{"class":46},[36,65249,65250],{"class":50}," `${",[36,65252,65253],{"class":42},"tx",[36,65255,3113],{"class":50},[36,65257,65258],{"class":42},"value",[36,65260,3113],{"class":50},[36,65262,54316],{"class":62},[36,65264,65265],{"class":50},"}\u002F200字`\n",[36,65267,65268],{"class":38,"line":35304},[36,65269,35813],{"class":42},[36,65271,65272],{"class":38,"line":35324},[36,65273,70],{"emptyLinePlaceholder":69},[36,65275,65276],{"class":38,"line":35340},[36,65277,65278],{"class":2621},"    \u002F\u002F const str = 'andy'\n",[36,65280,65281],{"class":38,"line":35346},[36,65282,65283],{"class":2621},"    \u002F\u002F console.log(str.length)\n",[36,65285,65286,65288,65290],{"class":38,"line":35360},[36,65287,54765],{"class":42},[36,65289,54161],{"class":53649},[36,65291,53656],{"class":42},[36,65293,65294,65296,65298],{"class":38,"line":35366},[36,65295,54133],{"class":42},[36,65297,54148],{"class":53649},[36,65299,53656],{"class":42},[36,65301,65302],{"class":38,"line":35372},[36,65303,70],{"emptyLinePlaceholder":69},[36,65305,65306,65308,65310],{"class":38,"line":35383},[36,65307,54133],{"class":42},[36,65309,52984],{"class":53649},[36,65311,53656],{"class":42},[24368,65313,65315],{"id":65314},"_3254-change事件","3.2.5.4 change事件",[19,65317,65318],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65320,65321],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65323,65324],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,65326,65328],{"className":52982,"code":65327,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,65329,65330,65340,65354,65358,65366,65380,65400,65412,65420,65424,65432,65446,65454,65472,65490,65502,65506,65514,65522,65526],{"__ignoreMap":31},[36,65331,65332,65334,65336,65338],{"class":38,"line":39},[36,65333,53646],{"class":42},[36,65335,53650],{"class":53649},[36,65337,53653],{"class":79},[36,65339,53656],{"class":42},[36,65341,65342,65344,65346,65348,65350,65352],{"class":38,"line":54},[36,65343,3463],{"class":42},[36,65345,52984],{"class":53649},[36,65347,53665],{"class":79},[36,65349,47],{"class":42},[36,65351,53670],{"class":50},[36,65353,53656],{"class":42},[36,65355,65356],{"class":38,"line":66},[36,65357,70],{"emptyLinePlaceholder":69},[36,65359,65360,65362,65364],{"class":38,"line":73},[36,65361,3463],{"class":42},[36,65363,53683],{"class":53649},[36,65365,53656],{"class":42},[36,65367,65368,65370,65372,65374,65376,65378],{"class":38,"line":86},[36,65369,54492],{"class":42},[36,65371,53693],{"class":53649},[36,65373,53696],{"class":79},[36,65375,47],{"class":42},[36,65377,53701],{"class":50},[36,65379,53656],{"class":42},[36,65381,65382,65384,65386,65388,65390,65392,65394,65396,65398],{"class":38,"line":126},[36,65383,54492],{"class":42},[36,65385,53693],{"class":53649},[36,65387,17295],{"class":79},[36,65389,47],{"class":42},[36,65391,53740],{"class":50},[36,65393,53720],{"class":79},[36,65395,47],{"class":42},[36,65397,53747],{"class":50},[36,65399,53656],{"class":42},[36,65401,65402,65404,65406,65408,65410],{"class":38,"line":131},[36,65403,54492],{"class":42},[36,65405,53756],{"class":53649},[36,65407,53759],{"class":42},[36,65409,53756],{"class":53649},[36,65411,53656],{"class":42},[36,65413,65414,65416,65418],{"class":38,"line":225},[36,65415,54133],{"class":42},[36,65417,53683],{"class":53649},[36,65419,53656],{"class":42},[36,65421,65422],{"class":38,"line":235},[36,65423,70],{"emptyLinePlaceholder":69},[36,65425,65426,65428,65430],{"class":38,"line":377},[36,65427,3463],{"class":42},[36,65429,54148],{"class":53649},[36,65431,53656],{"class":42},[36,65433,65434,65436,65438,65440,65442,65444],{"class":38,"line":617},[36,65435,54492],{"class":42},[36,65437,56169],{"class":53649},[36,65439,56172],{"class":79},[36,65441,47],{"class":42},[36,65443,65046],{"class":50},[36,65445,53656],{"class":42},[36,65447,65448,65450,65452],{"class":38,"line":643},[36,65449,54492],{"class":42},[36,65451,54161],{"class":53649},[36,65453,53656],{"class":42},[36,65455,65456,65458,65460,65462,65464,65466,65468,65470],{"class":38,"line":921},[36,65457,13599],{"class":46},[36,65459,62953],{"class":62},[36,65461,15941],{"class":46},[36,65463,56744],{"class":42},[36,65465,56747],{"class":79},[36,65467,92],{"class":42},[36,65469,65229],{"class":50},[36,65471,123],{"class":42},[36,65473,65474,65477,65479,65481,65484,65486,65488],{"class":38,"line":934},[36,65475,65476],{"class":42},"    input.",[36,65478,60161],{"class":79},[36,65480,92],{"class":42},[36,65482,65483],{"class":50},"'change'",[36,65485,630],{"class":42},[36,65487,56797],{"class":46},[36,65489,56800],{"class":42},[36,65491,65492,65494,65496,65498,65500],{"class":38,"line":939},[36,65493,60592],{"class":42},[36,65495,60595],{"class":79},[36,65497,92],{"class":42},[36,65499,3148],{"class":62},[36,65501,123],{"class":42},[36,65503,65504],{"class":38,"line":949},[36,65505,35813],{"class":42},[36,65507,65508,65510,65512],{"class":38,"line":962},[36,65509,54765],{"class":42},[36,65511,54161],{"class":53649},[36,65513,53656],{"class":42},[36,65515,65516,65518,65520],{"class":38,"line":974},[36,65517,54133],{"class":42},[36,65519,54148],{"class":53649},[36,65521,53656],{"class":42},[36,65523,65524],{"class":38,"line":979},[36,65525,70],{"emptyLinePlaceholder":69},[36,65527,65528,65530,65532],{"class":38,"line":994},[36,65529,54133],{"class":42},[36,65531,52984],{"class":53649},[36,65533,53656],{"class":42},[19,65535,65536],{},"总结：内容发生改变才回去触发",[1752,65538,65540],{"id":65539},"_326-事件对象","3.2.6 事件对象",[24368,65542,65544],{"id":65543},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65546,65547],{},[3879,65548],{"alt":31,"src":65549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65551,65552],{},[3879,65553],{"alt":31,"src":65554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65556,65557],{},"点击一次，就输出了事件对象，它是个对象",[19,65559,65560],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65562,65563],{},[3879,65564],{"alt":31,"src":65565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24368,65567,65569],{"id":65568},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65571,65572],{},[3879,65573],{"alt":31,"src":65574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65576,65577],{},"实现按特殊字符才是实现打印输出效果：",[26,65579,65581],{"className":55415,"code":65580,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,65582,65583,65591,65596,65610,65618,65623,65628,65633,65638,65643,65648,65653,65658,65663,65667,65671,65679],{"__ignoreMap":31},[36,65584,65585,65587,65589],{"class":38,"line":39},[36,65586,3463],{"class":42},[36,65588,54148],{"class":53649},[36,65590,53656],{"class":42},[36,65592,65593],{"class":38,"line":54},[36,65594,65595],{"class":2621},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,65597,65598,65600,65602,65604,65606,65608],{"class":38,"line":66},[36,65599,54492],{"class":42},[36,65601,56169],{"class":53649},[36,65603,56172],{"class":79},[36,65605,47],{"class":42},[36,65607,65046],{"class":50},[36,65609,53656],{"class":42},[36,65611,65612,65614,65616],{"class":38,"line":73},[36,65613,54492],{"class":42},[36,65615,54161],{"class":53649},[36,65617,53656],{"class":42},[36,65619,65620],{"class":38,"line":86},[36,65621,65622],{"class":42},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,65624,65625],{"class":38,"line":126},[36,65626,65627],{"class":42},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,65629,65630],{"class":38,"line":131},[36,65631,65632],{"class":42},"    \u002F\u002F   console.log(e);\n",[36,65634,65635],{"class":38,"line":225},[36,65636,65637],{"class":42},"    \u002F\u002F })\n",[36,65639,65640],{"class":38,"line":235},[36,65641,65642],{"class":42},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,65644,65645],{"class":38,"line":377},[36,65646,65647],{"class":42},"    const input = document.querySelector('input')\n",[36,65649,65650],{"class":38,"line":617},[36,65651,65652],{"class":42},"    input.addEventListener('keyup', function (e) {\n",[36,65654,65655],{"class":38,"line":643},[36,65656,65657],{"class":42},"      if (e.key === 'Enter') {\n",[36,65659,65660],{"class":38,"line":921},[36,65661,65662],{"class":42},"        console.log('我按下了回车键')\n",[36,65664,65665],{"class":38,"line":934},[36,65666,54746],{"class":42},[36,65668,65669],{"class":38,"line":939},[36,65670,35813],{"class":42},[36,65672,65673,65675,65677],{"class":38,"line":949},[36,65674,54765],{"class":42},[36,65676,54161],{"class":53649},[36,65678,53656],{"class":42},[36,65680,65681,65683,65685],{"class":38,"line":962},[36,65682,54133],{"class":42},[36,65684,54148],{"class":53649},[36,65686,53656],{"class":42},[24368,65688,65690],{"id":65689},"_3263-trim方法","3.2.6.3 trim方法",[19,65692,65693],{},[3879,65694],{"alt":31,"src":65695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65697,65698],{},[3879,65699],{"alt":31,"src":65700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65702,65703],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65705,65706],{},"str.trim()",[1752,65708,65710],{"id":65709},"_327-环境对象","3.2.7 环境对象",[19,65712,65713],{},[3879,65714],{"alt":31,"src":65715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65717,65718],{},[3879,65719],{"alt":31,"src":65720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65722,65723],{},[3879,65724],{"alt":31,"src":65725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65727,65728],{},"实际函数调用是window.fn()",[19,65730,65731],{},"普通函数里面this指向的是window",[3557,65733,65734,65737,65740],{},[653,65735,65736],{},"在普通函数下，this指向的是window",[653,65738,65739],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[653,65741,65742],{},"箭头函数没有this",[19,65744,65745],{},"粗略记法就是：谁调用，this就指向谁",[19,65747,65748],{},[3879,65749],{"alt":31,"src":65750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65752,65753],{},[3879,65754],{"alt":31,"src":65755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65757,65758],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65760,65761],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,65763,65765],{"className":55415,"code":65764,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,65766,65767,65775,65787,65795,65800,65805,65810,65815,65819,65827],{"__ignoreMap":31},[36,65768,65769,65771,65773],{"class":38,"line":39},[36,65770,3463],{"class":42},[36,65772,54148],{"class":53649},[36,65774,53656],{"class":42},[36,65776,65777,65779,65781,65783,65785],{"class":38,"line":54},[36,65778,54492],{"class":42},[36,65780,56235],{"class":53649},[36,65782,56241],{"class":42},[36,65784,56235],{"class":53649},[36,65786,53656],{"class":42},[36,65788,65789,65791,65793],{"class":38,"line":66},[36,65790,54492],{"class":42},[36,65792,54161],{"class":53649},[36,65794,53656],{"class":42},[36,65796,65797],{"class":38,"line":73},[36,65798,65799],{"class":42},"    const button = document.querySelector('button')\n",[36,65801,65802],{"class":38,"line":86},[36,65803,65804],{"class":42},"    button.addEventListener('click', function () {\n",[36,65806,65807],{"class":38,"line":126},[36,65808,65809],{"class":42},"      \u002F\u002F console.log(this);\n",[36,65811,65812],{"class":38,"line":131},[36,65813,65814],{"class":42},"      this.style.color = 'pink'\n",[36,65816,65817],{"class":38,"line":225},[36,65818,35813],{"class":42},[36,65820,65821,65823,65825],{"class":38,"line":235},[36,65822,54765],{"class":42},[36,65824,54161],{"class":53649},[36,65826,53656],{"class":42},[36,65828,65829,65831,65833],{"class":38,"line":377},[36,65830,54133],{"class":42},[36,65832,54148],{"class":53649},[36,65834,53656],{"class":42},[1752,65836,65838],{"id":65837},"_328-回调函数","3.2.8 回调函数",[19,65840,65841],{},[3879,65842],{"alt":31,"src":65843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65845,65846],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65848,13710],{},[3557,65850,65851,65854,65857],{},[653,65852,65853],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[653,65855,65856],{},"回调函数本质还是函数，只不过把它当成参数使用",[653,65858,65859],{},"使用匿名函数做为回调函数比较常见",[1752,65861,65863],{"id":65862},"_329-tab栏切换","3.2.9 tab栏切换",[19,65865,65866],{},[3879,65867],{"alt":31,"src":65868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,65870,65872],{"className":52982,"code":65871,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,65873,65874,65884,65898,65902,65910,65924,65944,65964,65977,65985,65991,66001,66011,66015,66019,66026,66039,66052,66064,66080,66084,66088,66095,66107,66119,66131,66141,66151,66155,66159,66168,66180,66191,66203,66207,66211,66219,66229,66239,66249,66253,66257,66267,66281,66293,66297,66301,66313,66324,66341,66351,66355,66359,66374,66385,66395,66399,66403,66410,66425,66429,66433,66441,66451,66455,66459,66468,66478,66482,66490,66498,66502,66510,66525,66540,66553,66561,66595,66622,66649,66676,66703,66711,66719,66734,66771,66806,66841,66876,66911,66919,66927,66935,66940,66945,66965,66970,66999,67004,67009,67027,67032,67037,67042,67064,67069,67085,67089,67094,67099,67120,67125,67154,67158,67163,67167,67175,67183,67187],{"__ignoreMap":31},[36,65875,65876,65878,65880,65882],{"class":38,"line":39},[36,65877,53646],{"class":42},[36,65879,53650],{"class":53649},[36,65881,53653],{"class":79},[36,65883,53656],{"class":42},[36,65885,65886,65888,65890,65892,65894,65896],{"class":38,"line":54},[36,65887,3463],{"class":42},[36,65889,52984],{"class":53649},[36,65891,53665],{"class":79},[36,65893,47],{"class":42},[36,65895,53670],{"class":50},[36,65897,53656],{"class":42},[36,65899,65900],{"class":38,"line":66},[36,65901,70],{"emptyLinePlaceholder":69},[36,65903,65904,65906,65908],{"class":38,"line":73},[36,65905,3463],{"class":42},[36,65907,53683],{"class":53649},[36,65909,53656],{"class":42},[36,65911,65912,65914,65916,65918,65920,65922],{"class":38,"line":86},[36,65913,54492],{"class":42},[36,65915,53693],{"class":53649},[36,65917,53696],{"class":79},[36,65919,47],{"class":42},[36,65921,53701],{"class":50},[36,65923,61475],{"class":42},[36,65925,65926,65928,65930,65932,65934,65936,65938,65940,65942],{"class":38,"line":126},[36,65927,54492],{"class":42},[36,65929,53693],{"class":53649},[36,65931,53712],{"class":79},[36,65933,47],{"class":42},[36,65935,53717],{"class":50},[36,65937,53720],{"class":79},[36,65939,47],{"class":42},[36,65941,53725],{"class":50},[36,65943,61475],{"class":42},[36,65945,65946,65948,65950,65952,65954,65956,65958,65960,65962],{"class":38,"line":131},[36,65947,54492],{"class":42},[36,65949,53693],{"class":53649},[36,65951,17295],{"class":79},[36,65953,47],{"class":42},[36,65955,53740],{"class":50},[36,65957,53720],{"class":79},[36,65959,47],{"class":42},[36,65961,53747],{"class":50},[36,65963,61475],{"class":42},[36,65965,65966,65968,65970,65973,65975],{"class":38,"line":225},[36,65967,54492],{"class":42},[36,65969,53756],{"class":53649},[36,65971,65972],{"class":42},">tab栏切换\u003C\u002F",[36,65974,53756],{"class":53649},[36,65976,53656],{"class":42},[36,65978,65979,65981,65983],{"class":38,"line":235},[36,65980,54492],{"class":42},[36,65982,2467],{"class":53649},[36,65984,53656],{"class":42},[36,65986,65987,65989],{"class":38,"line":377},[36,65988,8785],{"class":53649},[36,65990,2150],{"class":42},[36,65992,65993,65995,65997,65999],{"class":38,"line":617},[36,65994,57054],{"class":62},[36,65996,2158],{"class":42},[36,65998,2751],{"class":62},[36,66000,3711],{"class":42},[36,66002,66003,66005,66007,66009],{"class":38,"line":643},[36,66004,57043],{"class":62},[36,66006,2158],{"class":42},[36,66008,2751],{"class":62},[36,66010,3711],{"class":42},[36,66012,66013],{"class":38,"line":921},[36,66014,4580],{"class":42},[36,66016,66017],{"class":38,"line":934},[36,66018,70],{"emptyLinePlaceholder":69},[36,66020,66021,66024],{"class":38,"line":939},[36,66022,66023],{"class":79},"    .tab",[36,66025,2150],{"class":42},[36,66027,66028,66030,66032,66035,66037],{"class":38,"line":949},[36,66029,57119],{"class":62},[36,66031,2158],{"class":42},[36,66033,66034],{"class":62},"590",[36,66036,53840],{"class":46},[36,66038,3711],{"class":42},[36,66040,66041,66043,66045,66048,66050],{"class":38,"line":962},[36,66042,57133],{"class":62},[36,66044,2158],{"class":42},[36,66046,66047],{"class":62},"340",[36,66049,53840],{"class":46},[36,66051,3711],{"class":42},[36,66053,66054,66056,66058,66060,66062],{"class":38,"line":974},[36,66055,57054],{"class":62},[36,66057,2158],{"class":42},[36,66059,3254],{"class":62},[36,66061,53840],{"class":46},[36,66063,3711],{"class":42},[36,66065,66066,66068,66070,66072,66074,66076,66078],{"class":38,"line":979},[36,66067,64325],{"class":62},[36,66069,2158],{"class":42},[36,66071,1906],{"class":62},[36,66073,53840],{"class":46},[36,66075,53869],{"class":62},[36,66077,64592],{"class":62},[36,66079,3711],{"class":42},[36,66081,66082],{"class":38,"line":994},[36,66083,4580],{"class":42},[36,66085,66086],{"class":38,"line":1006},[36,66087,70],{"emptyLinePlaceholder":69},[36,66089,66090,66093],{"class":38,"line":1011},[36,66091,66092],{"class":79},"    .tab-nav",[36,66094,2150],{"class":42},[36,66096,66097,66099,66101,66103,66105],{"class":38,"line":1023},[36,66098,57119],{"class":62},[36,66100,2158],{"class":42},[36,66102,1070],{"class":62},[36,66104,2884],{"class":46},[36,66106,3711],{"class":42},[36,66108,66109,66111,66113,66115,66117],{"class":38,"line":1028},[36,66110,57133],{"class":62},[36,66112,2158],{"class":42},[36,66114,3460],{"class":62},[36,66116,53840],{"class":46},[36,66118,3711],{"class":42},[36,66120,66121,66123,66125,66127,66129],{"class":38,"line":1033},[36,66122,59707],{"class":62},[36,66124,2158],{"class":42},[36,66126,3460],{"class":62},[36,66128,53840],{"class":46},[36,66130,3711],{"class":42},[36,66132,66133,66135,66137,66139],{"class":38,"line":1053},[36,66134,57357],{"class":62},[36,66136,2158],{"class":42},[36,66138,53825],{"class":62},[36,66140,3711],{"class":42},[36,66142,66143,66145,66147,66149],{"class":38,"line":1064},[36,66144,57368],{"class":62},[36,66146,2158],{"class":42},[36,66148,54016],{"class":62},[36,66150,3711],{"class":42},[36,66152,66153],{"class":38,"line":1075},[36,66154,4580],{"class":42},[36,66156,66157],{"class":38,"line":2291},[36,66158,70],{"emptyLinePlaceholder":69},[36,66160,66161,66163,66166],{"class":38,"line":2329},[36,66162,66092],{"class":79},[36,66164,66165],{"class":53649}," h3",[36,66167,2150],{"class":42},[36,66169,66170,66172,66174,66176,66178],{"class":38,"line":2334},[36,66171,57270],{"class":62},[36,66173,2158],{"class":42},[36,66175,3354],{"class":62},[36,66177,53840],{"class":46},[36,66179,3711],{"class":42},[36,66181,66182,66184,66186,66189],{"class":38,"line":2339},[36,66183,64682],{"class":62},[36,66185,2158],{"class":42},[36,66187,66188],{"class":62},"normal",[36,66190,3711],{"class":42},[36,66192,66193,66195,66197,66199,66201],{"class":38,"line":2365},[36,66194,64348],{"class":62},[36,66196,2158],{"class":42},[36,66198,3254],{"class":62},[36,66200,53840],{"class":46},[36,66202,3711],{"class":42},[36,66204,66205],{"class":38,"line":2373},[36,66206,4580],{"class":42},[36,66208,66209],{"class":38,"line":5001},[36,66210,70],{"emptyLinePlaceholder":69},[36,66212,66213,66215,66217],{"class":38,"line":5006},[36,66214,66092],{"class":79},[36,66216,63640],{"class":53649},[36,66218,2150],{"class":42},[36,66220,66221,66223,66225,66227],{"class":38,"line":10328},[36,66222,57080],{"class":62},[36,66224,2158],{"class":42},[36,66226,57085],{"class":62},[36,66228,3711],{"class":42},[36,66230,66231,66233,66235,66237],{"class":38,"line":10352},[36,66232,57357],{"class":62},[36,66234,2158],{"class":42},[36,66236,53825],{"class":62},[36,66238,3711],{"class":42},[36,66240,66241,66243,66245,66247],{"class":38,"line":10357},[36,66242,57368],{"class":62},[36,66244,2158],{"class":42},[36,66246,53928],{"class":62},[36,66248,3711],{"class":42},[36,66250,66251],{"class":38,"line":10363},[36,66252,4580],{"class":42},[36,66254,66255],{"class":38,"line":10390},[36,66256,70],{"emptyLinePlaceholder":69},[36,66258,66259,66261,66263,66265],{"class":38,"line":10395},[36,66260,66092],{"class":79},[36,66262,63640],{"class":53649},[36,66264,57423],{"class":53649},[36,66266,2150],{"class":42},[36,66268,66269,66271,66273,66275,66277,66279],{"class":38,"line":10401},[36,66270,57054],{"class":62},[36,66272,2158],{"class":42},[36,66274,2751],{"class":62},[36,66276,11330],{"class":62},[36,66278,53840],{"class":46},[36,66280,3711],{"class":42},[36,66282,66283,66285,66287,66289,66291],{"class":38,"line":10413},[36,66284,57270],{"class":62},[36,66286,2158],{"class":42},[36,66288,3104],{"class":62},[36,66290,53840],{"class":46},[36,66292,3711],{"class":42},[36,66294,66295],{"class":38,"line":10425},[36,66296,4580],{"class":42},[36,66298,66299],{"class":38,"line":10437},[36,66300,70],{"emptyLinePlaceholder":69},[36,66302,66303,66305,66307,66309,66311],{"class":38,"line":12095},[36,66304,66092],{"class":79},[36,66306,63640],{"class":53649},[36,66308,57423],{"class":53649},[36,66310,3815],{"class":53649},[36,66312,2150],{"class":42},[36,66314,66315,66318,66320,66322],{"class":38,"line":12120},[36,66316,66317],{"class":62},"      text-decoration",[36,66319,2158],{"class":42},[36,66321,57085],{"class":62},[36,66323,3711],{"class":42},[36,66325,66326,66328,66330,66332,66334,66336,66339],{"class":38,"line":12143},[36,66327,64580],{"class":62},[36,66329,2158],{"class":42},[36,66331,1911],{"class":62},[36,66333,53840],{"class":46},[36,66335,53869],{"class":62},[36,66337,66338],{"class":62}," transparent",[36,66340,3711],{"class":42},[36,66342,66343,66345,66347,66349],{"class":38,"line":12167},[36,66344,59764],{"class":62},[36,66346,2158],{"class":42},[36,66348,64717],{"class":62},[36,66350,3711],{"class":42},[36,66352,66353],{"class":38,"line":12172},[36,66354,4580],{"class":42},[36,66356,66357],{"class":38,"line":12177},[36,66358,70],{"emptyLinePlaceholder":69},[36,66360,66361,66363,66365,66367,66369,66372],{"class":38,"line":12182},[36,66362,66092],{"class":79},[36,66364,63640],{"class":53649},[36,66366,57423],{"class":53649},[36,66368,3815],{"class":53649},[36,66370,66371],{"class":79},".active",[36,66373,2150],{"class":42},[36,66375,66376,66378,66380,66383],{"class":38,"line":12191},[36,66377,64139],{"class":62},[36,66379,2158],{"class":42},[36,66381,66382],{"class":62},"#e1251b",[36,66384,3711],{"class":42},[36,66386,66387,66389,66391,66393],{"class":38,"line":12196},[36,66388,59764],{"class":62},[36,66390,2158],{"class":42},[36,66392,66382],{"class":62},[36,66394,3711],{"class":42},[36,66396,66397],{"class":38,"line":12202},[36,66398,4580],{"class":42},[36,66400,66401],{"class":38,"line":12223},[36,66402,70],{"emptyLinePlaceholder":69},[36,66404,66405,66408],{"class":38,"line":12229},[36,66406,66407],{"class":79},"    .tab-content",[36,66409,2150],{"class":42},[36,66411,66412,66414,66416,66418,66421,66423],{"class":38,"line":12243},[36,66413,57043],{"class":62},[36,66415,2158],{"class":42},[36,66417,2751],{"class":62},[36,66419,66420],{"class":62}," 16",[36,66422,53840],{"class":46},[36,66424,3711],{"class":42},[36,66426,66427],{"class":38,"line":12249},[36,66428,4580],{"class":42},[36,66430,66431],{"class":38,"line":12276},[36,66432,70],{"emptyLinePlaceholder":69},[36,66434,66435,66437,66439],{"class":38,"line":12285},[36,66436,66407],{"class":79},[36,66438,64522],{"class":79},[36,66440,2150],{"class":42},[36,66442,66443,66445,66447,66449],{"class":38,"line":12291},[36,66444,57357],{"class":62},[36,66446,2158],{"class":42},[36,66448,57085],{"class":62},[36,66450,3711],{"class":42},[36,66452,66453],{"class":38,"line":12299},[36,66454,4580],{"class":42},[36,66456,66457],{"class":38,"line":12304},[36,66458,70],{"emptyLinePlaceholder":69},[36,66460,66461,66463,66466],{"class":38,"line":18977},[36,66462,66407],{"class":79},[36,66464,66465],{"class":79}," .item.active",[36,66467,2150],{"class":42},[36,66469,66470,66472,66474,66476],{"class":38,"line":18983},[36,66471,57357],{"class":62},[36,66473,2158],{"class":42},[36,66475,63217],{"class":62},[36,66477,3711],{"class":42},[36,66479,66480],{"class":38,"line":19006},[36,66481,4580],{"class":42},[36,66483,66484,66486,66488],{"class":38,"line":19012},[36,66485,54765],{"class":42},[36,66487,2467],{"class":53649},[36,66489,53656],{"class":42},[36,66491,66492,66494,66496],{"class":38,"line":19035},[36,66493,54133],{"class":42},[36,66495,53683],{"class":53649},[36,66497,53656],{"class":42},[36,66499,66500],{"class":38,"line":19049},[36,66501,70],{"emptyLinePlaceholder":69},[36,66503,66504,66506,66508],{"class":38,"line":19069},[36,66505,3463],{"class":42},[36,66507,54148],{"class":53649},[36,66509,53656],{"class":42},[36,66511,66512,66514,66516,66518,66520,66523],{"class":38,"line":19075},[36,66513,54492],{"class":42},[36,66515,53959],{"class":53649},[36,66517,55834],{"class":79},[36,66519,47],{"class":42},[36,66521,66522],{"class":50},"\"tab\"",[36,66524,53656],{"class":42},[36,66526,66527,66529,66531,66533,66535,66538],{"class":38,"line":19086},[36,66528,53690],{"class":42},[36,66530,53959],{"class":53649},[36,66532,55834],{"class":79},[36,66534,47],{"class":42},[36,66536,66537],{"class":50},"\"tab-nav\"",[36,66539,53656],{"class":42},[36,66541,66542,66544,66546,66549,66551],{"class":38,"line":19109},[36,66543,57582],{"class":42},[36,66545,1752],{"class":53649},[36,66547,66548],{"class":42},">每日特价\u003C\u002F",[36,66550,1752],{"class":53649},[36,66552,53656],{"class":42},[36,66554,66555,66557,66559],{"class":38,"line":19131},[36,66556,57582],{"class":42},[36,66558,3557],{"class":53649},[36,66560,53656],{"class":42},[36,66562,66563,66565,66567,66569,66571,66573,66575,66577,66579,66581,66584,66587,66589,66591,66593],{"class":38,"line":19136},[36,66564,57650],{"class":42},[36,66566,653],{"class":53649},[36,66568,63400],{"class":42},[36,66570,2796],{"class":53649},[36,66572,55834],{"class":79},[36,66574,47],{"class":42},[36,66576,62054],{"class":50},[36,66578,63405],{"class":79},[36,66580,47],{"class":42},[36,66582,66583],{"class":50},"\"javascript:;\"",[36,66585,66586],{"class":42},">精选\u003C\u002F",[36,66588,2796],{"class":53649},[36,66590,57662],{"class":42},[36,66592,653],{"class":53649},[36,66594,53656],{"class":42},[36,66596,66597,66599,66601,66603,66605,66607,66609,66611,66614,66616,66618,66620],{"class":38,"line":19142},[36,66598,57650],{"class":42},[36,66600,653],{"class":53649},[36,66602,63400],{"class":42},[36,66604,2796],{"class":53649},[36,66606,63405],{"class":79},[36,66608,47],{"class":42},[36,66610,66583],{"class":50},[36,66612,66613],{"class":42},">美食\u003C\u002F",[36,66615,2796],{"class":53649},[36,66617,57662],{"class":42},[36,66619,653],{"class":53649},[36,66621,53656],{"class":42},[36,66623,66624,66626,66628,66630,66632,66634,66636,66638,66641,66643,66645,66647],{"class":38,"line":19156},[36,66625,57650],{"class":42},[36,66627,653],{"class":53649},[36,66629,63400],{"class":42},[36,66631,2796],{"class":53649},[36,66633,63405],{"class":79},[36,66635,47],{"class":42},[36,66637,66583],{"class":50},[36,66639,66640],{"class":42},">百货\u003C\u002F",[36,66642,2796],{"class":53649},[36,66644,57662],{"class":42},[36,66646,653],{"class":53649},[36,66648,53656],{"class":42},[36,66650,66651,66653,66655,66657,66659,66661,66663,66665,66668,66670,66672,66674],{"class":38,"line":19169},[36,66652,57650],{"class":42},[36,66654,653],{"class":53649},[36,66656,63400],{"class":42},[36,66658,2796],{"class":53649},[36,66660,63405],{"class":79},[36,66662,47],{"class":42},[36,66664,66583],{"class":50},[36,66666,66667],{"class":42},">个护\u003C\u002F",[36,66669,2796],{"class":53649},[36,66671,57662],{"class":42},[36,66673,653],{"class":53649},[36,66675,53656],{"class":42},[36,66677,66678,66680,66682,66684,66686,66688,66690,66692,66695,66697,66699,66701],{"class":38,"line":19174},[36,66679,57650],{"class":42},[36,66681,653],{"class":53649},[36,66683,63400],{"class":42},[36,66685,2796],{"class":53649},[36,66687,63405],{"class":79},[36,66689,47],{"class":42},[36,66691,66583],{"class":50},[36,66693,66694],{"class":42},">预告\u003C\u002F",[36,66696,2796],{"class":53649},[36,66698,57662],{"class":42},[36,66700,653],{"class":53649},[36,66702,53656],{"class":42},[36,66704,66705,66707,66709],{"class":38,"line":19188},[36,66706,57755],{"class":42},[36,66708,3557],{"class":53649},[36,66710,53656],{"class":42},[36,66712,66713,66715,66717],{"class":38,"line":19193},[36,66714,54124],{"class":42},[36,66716,53959],{"class":53649},[36,66718,53656],{"class":42},[36,66720,66721,66723,66725,66727,66729,66732],{"class":38,"line":19199},[36,66722,53690],{"class":42},[36,66724,53959],{"class":53649},[36,66726,55834],{"class":79},[36,66728,47],{"class":42},[36,66730,66731],{"class":50},"\"tab-content\"",[36,66733,53656],{"class":42},[36,66735,66736,66738,66740,66742,66744,66747,66749,66751,66753,66755,66758,66760,66762,66764,66767,66769],{"class":38,"line":19204},[36,66737,57582],{"class":42},[36,66739,53959],{"class":53649},[36,66741,55834],{"class":79},[36,66743,47],{"class":42},[36,66745,66746],{"class":50},"\"item active\"",[36,66748,63400],{"class":42},[36,66750,3879],{"class":53649},[36,66752,57587],{"class":79},[36,66754,47],{"class":42},[36,66756,66757],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,66759,57595],{"class":79},[36,66761,47],{"class":42},[36,66763,10033],{"class":50},[36,66765,66766],{"class":42}," \u002F>\u003C\u002F",[36,66768,53959],{"class":53649},[36,66770,53656],{"class":42},[36,66772,66773,66775,66777,66779,66781,66783,66785,66787,66789,66791,66794,66796,66798,66800,66802,66804],{"class":38,"line":19218},[36,66774,57582],{"class":42},[36,66776,53959],{"class":53649},[36,66778,55834],{"class":79},[36,66780,47],{"class":42},[36,66782,64971],{"class":50},[36,66784,63400],{"class":42},[36,66786,3879],{"class":53649},[36,66788,57587],{"class":79},[36,66790,47],{"class":42},[36,66792,66793],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,66795,57595],{"class":79},[36,66797,47],{"class":42},[36,66799,10033],{"class":50},[36,66801,66766],{"class":42},[36,66803,53959],{"class":53649},[36,66805,53656],{"class":42},[36,66807,66808,66810,66812,66814,66816,66818,66820,66822,66824,66826,66829,66831,66833,66835,66837,66839],{"class":38,"line":19223},[36,66809,57582],{"class":42},[36,66811,53959],{"class":53649},[36,66813,55834],{"class":79},[36,66815,47],{"class":42},[36,66817,64971],{"class":50},[36,66819,63400],{"class":42},[36,66821,3879],{"class":53649},[36,66823,57587],{"class":79},[36,66825,47],{"class":42},[36,66827,66828],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,66830,57595],{"class":79},[36,66832,47],{"class":42},[36,66834,10033],{"class":50},[36,66836,66766],{"class":42},[36,66838,53959],{"class":53649},[36,66840,53656],{"class":42},[36,66842,66843,66845,66847,66849,66851,66853,66855,66857,66859,66861,66864,66866,66868,66870,66872,66874],{"class":38,"line":19228},[36,66844,57582],{"class":42},[36,66846,53959],{"class":53649},[36,66848,55834],{"class":79},[36,66850,47],{"class":42},[36,66852,64971],{"class":50},[36,66854,63400],{"class":42},[36,66856,3879],{"class":53649},[36,66858,57587],{"class":79},[36,66860,47],{"class":42},[36,66862,66863],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,66865,57595],{"class":79},[36,66867,47],{"class":42},[36,66869,10033],{"class":50},[36,66871,66766],{"class":42},[36,66873,53959],{"class":53649},[36,66875,53656],{"class":42},[36,66877,66878,66880,66882,66884,66886,66888,66890,66892,66894,66896,66899,66901,66903,66905,66907,66909],{"class":38,"line":19242},[36,66879,57582],{"class":42},[36,66881,53959],{"class":53649},[36,66883,55834],{"class":79},[36,66885,47],{"class":42},[36,66887,64971],{"class":50},[36,66889,63400],{"class":42},[36,66891,3879],{"class":53649},[36,66893,57587],{"class":79},[36,66895,47],{"class":42},[36,66897,66898],{"class":50},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,66900,57595],{"class":79},[36,66902,47],{"class":42},[36,66904,10033],{"class":50},[36,66906,66766],{"class":42},[36,66908,53959],{"class":53649},[36,66910,53656],{"class":42},[36,66912,66913,66915,66917],{"class":38,"line":19254},[36,66914,54124],{"class":42},[36,66916,53959],{"class":53649},[36,66918,53656],{"class":42},[36,66920,66921,66923,66925],{"class":38,"line":19259},[36,66922,54765],{"class":42},[36,66924,53959],{"class":53649},[36,66926,53656],{"class":42},[36,66928,66929,66931,66933],{"class":38,"line":19272},[36,66930,54492],{"class":42},[36,66932,54161],{"class":53649},[36,66934,53656],{"class":42},[36,66936,66937],{"class":38,"line":19277},[36,66938,66939],{"class":2621},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,66941,66942],{"class":38,"line":19282},[36,66943,66944],{"class":2621},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,66946,66947,66949,66952,66954,66956,66958,66960,66963],{"class":38,"line":19287},[36,66948,13599],{"class":46},[36,66950,66951],{"class":62}," as",[36,66953,15941],{"class":46},[36,66955,56744],{"class":42},[36,66957,58029],{"class":79},[36,66959,92],{"class":42},[36,66961,66962],{"class":50},"'.tab-nav a'",[36,66964,123],{"class":42},[36,66966,66967],{"class":38,"line":19300},[36,66968,66969],{"class":2621},"    \u002F\u002F console.log(as) \n",[36,66971,66972,66974,66976,66978,66980,66982,66984,66986,66988,66991,66993,66995,66997],{"class":38,"line":19305},[36,66973,5586],{"class":46},[36,66975,4066],{"class":42},[36,66977,54195],{"class":46},[36,66979,11818],{"class":42},[36,66981,47],{"class":46},[36,66983,899],{"class":62},[36,66985,11825],{"class":42},[36,66987,3463],{"class":46},[36,66989,66990],{"class":42}," as.",[36,66992,54316],{"class":62},[36,66994,5599],{"class":42},[36,66996,4685],{"class":46},[36,66998,14819],{"class":42},[36,67000,67001],{"class":38,"line":34985},[36,67002,67003],{"class":2621},"      \u002F\u002F console.log(as[i])\n",[36,67005,67006],{"class":38,"line":34991},[36,67007,67008],{"class":2621},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,67010,67011,67014,67016,67018,67021,67023,67025],{"class":38,"line":34997},[36,67012,67013],{"class":42},"      as[i].",[36,67015,60161],{"class":79},[36,67017,92],{"class":42},[36,67019,67020],{"class":50},"'mouseenter'",[36,67022,630],{"class":42},[36,67024,56797],{"class":46},[36,67026,56800],{"class":42},[36,67028,67029],{"class":38,"line":35003},[36,67030,67031],{"class":2621},"        \u002F\u002F console.log('鼠标经过')\n",[36,67033,67034],{"class":38,"line":35009},[36,67035,67036],{"class":2621},"        \u002F\u002F 排他思想  \n",[36,67038,67039],{"class":38,"line":35020},[36,67040,67041],{"class":2621},"        \u002F\u002F 干掉别人 移除类active\n",[36,67043,67044,67046,67048,67050,67053,67055,67057,67059,67062],{"class":38,"line":35026},[36,67045,54273],{"class":42},[36,67047,56747],{"class":79},[36,67049,92],{"class":42},[36,67051,67052],{"class":50},"'.tab-nav .active'",[36,67054,59351],{"class":42},[36,67056,59354],{"class":79},[36,67058,92],{"class":42},[36,67060,67061],{"class":50},"'active'",[36,67063,123],{"class":42},[36,67065,67066],{"class":38,"line":35046},[36,67067,67068],{"class":2621},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,67070,67071,67074,67077,67079,67081,67083],{"class":38,"line":35052},[36,67072,67073],{"class":62},"        this",[36,67075,67076],{"class":42},".classList.",[36,67078,7716],{"class":79},[36,67080,92],{"class":42},[36,67082,67061],{"class":50},[36,67084,123],{"class":42},[36,67086,67087],{"class":38,"line":35063},[36,67088,70],{"emptyLinePlaceholder":69},[36,67090,67091],{"class":38,"line":35069},[36,67092,67093],{"class":2621},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,67095,67096],{"class":38,"line":35075},[36,67097,67098],{"class":2621},"        \u002F\u002F 干掉别人\n",[36,67100,67101,67103,67105,67107,67110,67112,67114,67116,67118],{"class":38,"line":35081},[36,67102,54273],{"class":42},[36,67104,56747],{"class":79},[36,67106,92],{"class":42},[36,67108,67109],{"class":50},"'.tab-content .active'",[36,67111,59351],{"class":42},[36,67113,59354],{"class":79},[36,67115,92],{"class":42},[36,67117,67061],{"class":50},[36,67119,123],{"class":42},[36,67121,67122],{"class":38,"line":35087},[36,67123,67124],{"class":2621},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,67126,67127,67129,67131,67133,67136,67138,67140,67142,67144,67146,67148,67150,67152],{"class":38,"line":35093},[36,67128,54273],{"class":42},[36,67130,56747],{"class":79},[36,67132,92],{"class":42},[36,67134,67135],{"class":50},"`.tab-content .item:nth-child(${",[36,67137,2997],{"class":42},[36,67139,47915],{"class":46},[36,67141,27489],{"class":62},[36,67143,59380],{"class":50},[36,67145,59351],{"class":42},[36,67147,7716],{"class":79},[36,67149,92],{"class":42},[36,67151,67061],{"class":50},[36,67153,123],{"class":42},[36,67155,67156],{"class":38,"line":35099},[36,67157,70],{"emptyLinePlaceholder":69},[36,67159,67160],{"class":38,"line":35105},[36,67161,67162],{"class":42},"      })\n",[36,67164,67165],{"class":38,"line":35125},[36,67166,4580],{"class":42},[36,67168,67169,67171,67173],{"class":38,"line":35131},[36,67170,54765],{"class":42},[36,67172,54161],{"class":53649},[36,67174,53656],{"class":42},[36,67176,67177,67179,67181],{"class":38,"line":35147},[36,67178,54133],{"class":42},[36,67180,54148],{"class":53649},[36,67182,53656],{"class":42},[36,67184,67185],{"class":38,"line":35153},[36,67186,70],{"emptyLinePlaceholder":69},[36,67188,67189,67191,67193],{"class":38,"line":35167},[36,67190,54133],{"class":42},[36,67192,52984],{"class":53649},[36,67194,53656],{"class":42},[19,67196,67197],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67199,67200],{},"在监听事件中，this指向的就是他的调用者",[19,67202,67203],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67205,56068],{},[19,67207,67208],{},"(function () {",[19,67210,67211],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67213,67214],{},"list.addEventListener('click', function (e) {",[19,67216,67217],{},"if (e.target.tagName === 'A') {",[19,67219,67220],{},"\u002F\u002F 排他思想",[19,67222,67223],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67225,67226],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67228,67229],{},"\u002F\u002F console.log(old);",[19,67231,67232],{},"\u002F\u002F 判断",[19,67234,67235],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67237,67238],{},"if (old) old.classList.remove('active')",[19,67240,67241],{},"e.target.classList.add('active')",[19,67243,107],{},[19,67245,54812],{},[19,67247,67248],{},"})();",[1752,67250,67252],{"id":67251},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,67254,67256],{"className":52982,"code":67255,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,67257,67258,67268,67272,67280,67284,67298,67312,67324,67332,67338,67348,67358,67362,67366,67373,67385,67396,67413,67426,67440,67450,67454,67458,67465,67476,67494,67504,67516,67520,67524,67531,67548,67559,67571,67575,67579,67586,67598,67602,67610,67618,67622,67630,67638,67646,67661,67705,67713,67726,67739,67752,67760,67768,67776,67804,67812,67824,67837,67850,67858,67866,67874,67900,67908,67921,67933,67946,67954,67962,67970,67996,68004,68017,68029,68042,68050,68058,68066,68071,68091,68096,68116,68121,68138,68143,68151,68156,68185,68198,68202,68206,68211,68215,68243,68248,68265,68270,68275,68280,68285,68311,68315,68319,68327,68335,68339],{"__ignoreMap":31},[36,67259,67260,67262,67264,67266],{"class":38,"line":39},[36,67261,53646],{"class":42},[36,67263,53650],{"class":53649},[36,67265,53653],{"class":79},[36,67267,53656],{"class":42},[36,67269,67270],{"class":38,"line":54},[36,67271,70],{"emptyLinePlaceholder":69},[36,67273,67274,67276,67278],{"class":38,"line":66},[36,67275,3463],{"class":42},[36,67277,52984],{"class":53649},[36,67279,53656],{"class":42},[36,67281,67282],{"class":38,"line":73},[36,67283,70],{"emptyLinePlaceholder":69},[36,67285,67286,67288,67290,67292,67294,67296],{"class":38,"line":86},[36,67287,3463],{"class":42},[36,67289,53683],{"class":53649},[36,67291,53665],{"class":79},[36,67293,47],{"class":42},[36,67295,53670],{"class":50},[36,67297,53656],{"class":42},[36,67299,67300,67302,67304,67306,67308,67310],{"class":38,"line":126},[36,67301,54492],{"class":42},[36,67303,53693],{"class":53649},[36,67305,53696],{"class":79},[36,67307,47],{"class":42},[36,67309,53701],{"class":50},[36,67311,53656],{"class":42},[36,67313,67314,67316,67318,67320,67322],{"class":38,"line":131},[36,67315,54492],{"class":42},[36,67317,53756],{"class":53649},[36,67319,57662],{"class":42},[36,67321,53756],{"class":53649},[36,67323,53656],{"class":42},[36,67325,67326,67328,67330],{"class":38,"line":225},[36,67327,54492],{"class":42},[36,67329,2467],{"class":53649},[36,67331,53656],{"class":42},[36,67333,67334,67336],{"class":38,"line":235},[36,67335,8785],{"class":53649},[36,67337,2150],{"class":42},[36,67339,67340,67342,67344,67346],{"class":38,"line":377},[36,67341,57054],{"class":62},[36,67343,2158],{"class":42},[36,67345,2751],{"class":62},[36,67347,3711],{"class":42},[36,67349,67350,67352,67354,67356],{"class":38,"line":617},[36,67351,57043],{"class":62},[36,67353,2158],{"class":42},[36,67355,2751],{"class":62},[36,67357,3711],{"class":42},[36,67359,67360],{"class":38,"line":643},[36,67361,4580],{"class":42},[36,67363,67364],{"class":38,"line":921},[36,67365,70],{"emptyLinePlaceholder":69},[36,67367,67368,67371],{"class":38,"line":934},[36,67369,67370],{"class":53649},"    table",[36,67372,2150],{"class":42},[36,67374,67375,67378,67380,67383],{"class":38,"line":939},[36,67376,67377],{"class":62},"      border-collapse",[36,67379,2158],{"class":42},[36,67381,67382],{"class":62},"collapse",[36,67384,3711],{"class":42},[36,67386,67387,67390,67392,67394],{"class":38,"line":949},[36,67388,67389],{"class":62},"      border-spacing",[36,67391,2158],{"class":42},[36,67393,2751],{"class":62},[36,67395,3711],{"class":42},[36,67397,67398,67400,67402,67404,67406,67408,67411],{"class":38,"line":962},[36,67399,64325],{"class":62},[36,67401,2158],{"class":42},[36,67403,1906],{"class":62},[36,67405,53840],{"class":46},[36,67407,53869],{"class":62},[36,67409,67410],{"class":62}," #c0c0c0",[36,67412,3711],{"class":42},[36,67414,67415,67417,67419,67422,67424],{"class":38,"line":974},[36,67416,57119],{"class":62},[36,67418,2158],{"class":42},[36,67420,67421],{"class":62},"500",[36,67423,53840],{"class":46},[36,67425,3711],{"class":42},[36,67427,67428,67430,67432,67434,67436,67438],{"class":38,"line":979},[36,67429,57054],{"class":62},[36,67431,2158],{"class":42},[36,67433,1070],{"class":62},[36,67435,53840],{"class":46},[36,67437,53904],{"class":62},[36,67439,3711],{"class":42},[36,67441,67442,67444,67446,67448],{"class":38,"line":994},[36,67443,59634],{"class":62},[36,67445,2158],{"class":42},[36,67447,53940],{"class":62},[36,67449,3711],{"class":42},[36,67451,67452],{"class":38,"line":1006},[36,67453,4580],{"class":42},[36,67455,67456],{"class":38,"line":1011},[36,67457,70],{"emptyLinePlaceholder":69},[36,67459,67460,67463],{"class":38,"line":1023},[36,67461,67462],{"class":53649},"    th",[36,67464,2150],{"class":42},[36,67466,67467,67469,67471,67474],{"class":38,"line":1028},[36,67468,57232],{"class":62},[36,67470,2158],{"class":42},[36,67472,67473],{"class":62},"#09c",[36,67475,3711],{"class":42},[36,67477,67478,67481,67483,67485,67487,67489,67492],{"class":38,"line":1033},[36,67479,67480],{"class":62},"      font",[36,67482,2158],{"class":42},[36,67484,64687],{"class":62},[36,67486,66420],{"class":62},[36,67488,53840],{"class":46},[36,67490,67491],{"class":50}," \"微软雅黑\"",[36,67493,3711],{"class":42},[36,67495,67496,67498,67500,67502],{"class":38,"line":1053},[36,67497,59764],{"class":62},[36,67499,2158],{"class":42},[36,67501,63190],{"class":62},[36,67503,3711],{"class":42},[36,67505,67506,67508,67510,67512,67514],{"class":38,"line":1064},[36,67507,57133],{"class":62},[36,67509,2158],{"class":42},[36,67511,3354],{"class":62},[36,67513,53840],{"class":46},[36,67515,3711],{"class":42},[36,67517,67518],{"class":38,"line":1075},[36,67519,4580],{"class":42},[36,67521,67522],{"class":38,"line":2291},[36,67523,70],{"emptyLinePlaceholder":69},[36,67525,67526,67529],{"class":38,"line":2329},[36,67527,67528],{"class":53649},"    td",[36,67530,2150],{"class":42},[36,67532,67533,67535,67537,67539,67541,67543,67546],{"class":38,"line":2334},[36,67534,64325],{"class":62},[36,67536,2158],{"class":42},[36,67538,1906],{"class":62},[36,67540,53840],{"class":46},[36,67542,53869],{"class":62},[36,67544,67545],{"class":62}," #d0d0d0",[36,67547,3711],{"class":42},[36,67549,67550,67552,67554,67557],{"class":38,"line":2339},[36,67551,59764],{"class":62},[36,67553,2158],{"class":42},[36,67555,67556],{"class":62},"#404060",[36,67558,3711],{"class":42},[36,67560,67561,67563,67565,67567,67569],{"class":38,"line":2365},[36,67562,57043],{"class":62},[36,67564,2158],{"class":42},[36,67566,3002],{"class":62},[36,67568,53840],{"class":46},[36,67570,3711],{"class":42},[36,67572,67573],{"class":38,"line":2373},[36,67574,4580],{"class":42},[36,67576,67577],{"class":38,"line":5001},[36,67578,70],{"emptyLinePlaceholder":69},[36,67580,67581,67584],{"class":38,"line":5006},[36,67582,67583],{"class":79},"    .allCheck",[36,67585,2150],{"class":42},[36,67587,67588,67590,67592,67594,67596],{"class":38,"line":10328},[36,67589,57119],{"class":62},[36,67591,2158],{"class":42},[36,67593,3167],{"class":62},[36,67595,53840],{"class":46},[36,67597,3711],{"class":42},[36,67599,67600],{"class":38,"line":10352},[36,67601,4580],{"class":42},[36,67603,67604,67606,67608],{"class":38,"line":10357},[36,67605,54765],{"class":42},[36,67607,2467],{"class":53649},[36,67609,53656],{"class":42},[36,67611,67612,67614,67616],{"class":38,"line":10363},[36,67613,54133],{"class":42},[36,67615,53683],{"class":53649},[36,67617,53656],{"class":42},[36,67619,67620],{"class":38,"line":10390},[36,67621,70],{"emptyLinePlaceholder":69},[36,67623,67624,67626,67628],{"class":38,"line":10395},[36,67625,3463],{"class":42},[36,67627,54148],{"class":53649},[36,67629,53656],{"class":42},[36,67631,67632,67634,67636],{"class":38,"line":10401},[36,67633,54492],{"class":42},[36,67635,2698],{"class":53649},[36,67637,53656],{"class":42},[36,67639,67640,67642,67644],{"class":38,"line":10413},[36,67641,53690],{"class":42},[36,67643,2704],{"class":53649},[36,67645,53656],{"class":42},[36,67647,67648,67650,67652,67654,67656,67659],{"class":38,"line":10425},[36,67649,57582],{"class":42},[36,67651,2707],{"class":53649},[36,67653,55834],{"class":79},[36,67655,47],{"class":42},[36,67657,67658],{"class":50},"\"allCheck\"",[36,67660,53656],{"class":42},[36,67662,67663,67665,67667,67669,67671,67673,67675,67677,67679,67681,67683,67686,67689,67691,67693,67695,67698,67701,67703],{"class":38,"line":10437},[36,67664,57650],{"class":42},[36,67666,56169],{"class":53649},[36,67668,56172],{"class":79},[36,67670,47],{"class":42},[36,67672,56177],{"class":50},[36,67674,17295],{"class":79},[36,67676,47],{"class":42},[36,67678,10033],{"class":50},[36,67680,17334],{"class":79},[36,67682,47],{"class":42},[36,67684,67685],{"class":50},"\"checkAll\"",[36,67687,67688],{"class":42},"> \u003C",[36,67690,36],{"class":53649},[36,67692,55834],{"class":79},[36,67694,47],{"class":42},[36,67696,67697],{"class":50},"\"all\"",[36,67699,67700],{"class":42},">全选\u003C\u002F",[36,67702,36],{"class":53649},[36,67704,53656],{"class":42},[36,67706,67707,67709,67711],{"class":38,"line":12095},[36,67708,57755],{"class":42},[36,67710,2707],{"class":53649},[36,67712,53656],{"class":42},[36,67714,67715,67717,67719,67722,67724],{"class":38,"line":12120},[36,67716,57582],{"class":42},[36,67718,2707],{"class":53649},[36,67720,67721],{"class":42},">商品\u003C\u002F",[36,67723,2707],{"class":53649},[36,67725,53656],{"class":42},[36,67727,67728,67730,67732,67735,67737],{"class":38,"line":12143},[36,67729,57582],{"class":42},[36,67731,2707],{"class":53649},[36,67733,67734],{"class":42},">商家\u003C\u002F",[36,67736,2707],{"class":53649},[36,67738,53656],{"class":42},[36,67740,67741,67743,67745,67748,67750],{"class":38,"line":12167},[36,67742,57582],{"class":42},[36,67744,2707],{"class":53649},[36,67746,67747],{"class":42},">价格\u003C\u002F",[36,67749,2707],{"class":53649},[36,67751,53656],{"class":42},[36,67753,67754,67756,67758],{"class":38,"line":12172},[36,67755,54124],{"class":42},[36,67757,2704],{"class":53649},[36,67759,53656],{"class":42},[36,67761,67762,67764,67766],{"class":38,"line":12177},[36,67763,53690],{"class":42},[36,67765,2704],{"class":53649},[36,67767,53656],{"class":42},[36,67769,67770,67772,67774],{"class":38,"line":12182},[36,67771,57582],{"class":42},[36,67773,2749],{"class":53649},[36,67775,53656],{"class":42},[36,67777,67778,67780,67782,67784,67786,67788,67790,67792,67795,67797,67799,67802],{"class":38,"line":12191},[36,67779,57650],{"class":42},[36,67781,56169],{"class":53649},[36,67783,56172],{"class":79},[36,67785,47],{"class":42},[36,67787,56177],{"class":50},[36,67789,17295],{"class":79},[36,67791,47],{"class":42},[36,67793,67794],{"class":50},"\"check\"",[36,67796,55834],{"class":79},[36,67798,47],{"class":42},[36,67800,67801],{"class":50},"\"ck\"",[36,67803,53656],{"class":42},[36,67805,67806,67808,67810],{"class":38,"line":12196},[36,67807,57755],{"class":42},[36,67809,2749],{"class":53649},[36,67811,53656],{"class":42},[36,67813,67814,67816,67818,67820,67822],{"class":38,"line":12202},[36,67815,57582],{"class":42},[36,67817,2749],{"class":53649},[36,67819,63521],{"class":42},[36,67821,2749],{"class":53649},[36,67823,53656],{"class":42},[36,67825,67826,67828,67830,67833,67835],{"class":38,"line":12223},[36,67827,57582],{"class":42},[36,67829,2749],{"class":53649},[36,67831,67832],{"class":42},">小米\u003C\u002F",[36,67834,2749],{"class":53649},[36,67836,53656],{"class":42},[36,67838,67839,67841,67843,67846,67848],{"class":38,"line":12229},[36,67840,57582],{"class":42},[36,67842,2749],{"class":53649},[36,67844,67845],{"class":42},">￥1999\u003C\u002F",[36,67847,2749],{"class":53649},[36,67849,53656],{"class":42},[36,67851,67852,67854,67856],{"class":38,"line":12243},[36,67853,54124],{"class":42},[36,67855,2704],{"class":53649},[36,67857,53656],{"class":42},[36,67859,67860,67862,67864],{"class":38,"line":12249},[36,67861,53690],{"class":42},[36,67863,2704],{"class":53649},[36,67865,53656],{"class":42},[36,67867,67868,67870,67872],{"class":38,"line":12276},[36,67869,57582],{"class":42},[36,67871,2749],{"class":53649},[36,67873,53656],{"class":42},[36,67875,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898],{"class":38,"line":12285},[36,67877,57650],{"class":42},[36,67879,56169],{"class":53649},[36,67881,56172],{"class":79},[36,67883,47],{"class":42},[36,67885,56177],{"class":50},[36,67887,17295],{"class":79},[36,67889,47],{"class":42},[36,67891,67794],{"class":50},[36,67893,55834],{"class":79},[36,67895,47],{"class":42},[36,67897,67801],{"class":50},[36,67899,53656],{"class":42},[36,67901,67902,67904,67906],{"class":38,"line":12291},[36,67903,57755],{"class":42},[36,67905,2749],{"class":53649},[36,67907,53656],{"class":42},[36,67909,67910,67912,67914,67917,67919],{"class":38,"line":12299},[36,67911,57582],{"class":42},[36,67913,2749],{"class":53649},[36,67915,67916],{"class":42},">小米净水器\u003C\u002F",[36,67918,2749],{"class":53649},[36,67920,53656],{"class":42},[36,67922,67923,67925,67927,67929,67931],{"class":38,"line":12304},[36,67924,57582],{"class":42},[36,67926,2749],{"class":53649},[36,67928,67832],{"class":42},[36,67930,2749],{"class":53649},[36,67932,53656],{"class":42},[36,67934,67935,67937,67939,67942,67944],{"class":38,"line":18977},[36,67936,57582],{"class":42},[36,67938,2749],{"class":53649},[36,67940,67941],{"class":42},">￥4999\u003C\u002F",[36,67943,2749],{"class":53649},[36,67945,53656],{"class":42},[36,67947,67948,67950,67952],{"class":38,"line":18983},[36,67949,54124],{"class":42},[36,67951,2704],{"class":53649},[36,67953,53656],{"class":42},[36,67955,67956,67958,67960],{"class":38,"line":19006},[36,67957,53690],{"class":42},[36,67959,2704],{"class":53649},[36,67961,53656],{"class":42},[36,67963,67964,67966,67968],{"class":38,"line":19012},[36,67965,57582],{"class":42},[36,67967,2749],{"class":53649},[36,67969,53656],{"class":42},[36,67971,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994],{"class":38,"line":19035},[36,67973,57650],{"class":42},[36,67975,56169],{"class":53649},[36,67977,56172],{"class":79},[36,67979,47],{"class":42},[36,67981,56177],{"class":50},[36,67983,17295],{"class":79},[36,67985,47],{"class":42},[36,67987,67794],{"class":50},[36,67989,55834],{"class":79},[36,67991,47],{"class":42},[36,67993,67801],{"class":50},[36,67995,53656],{"class":42},[36,67997,67998,68000,68002],{"class":38,"line":19049},[36,67999,57755],{"class":42},[36,68001,2749],{"class":53649},[36,68003,53656],{"class":42},[36,68005,68006,68008,68010,68013,68015],{"class":38,"line":19069},[36,68007,57582],{"class":42},[36,68009,2749],{"class":53649},[36,68011,68012],{"class":42},">小米电视\u003C\u002F",[36,68014,2749],{"class":53649},[36,68016,53656],{"class":42},[36,68018,68019,68021,68023,68025,68027],{"class":38,"line":19075},[36,68020,57582],{"class":42},[36,68022,2749],{"class":53649},[36,68024,67832],{"class":42},[36,68026,2749],{"class":53649},[36,68028,53656],{"class":42},[36,68030,68031,68033,68035,68038,68040],{"class":38,"line":19086},[36,68032,57582],{"class":42},[36,68034,2749],{"class":53649},[36,68036,68037],{"class":42},">￥5999\u003C\u002F",[36,68039,2749],{"class":53649},[36,68041,53656],{"class":42},[36,68043,68044,68046,68048],{"class":38,"line":19109},[36,68045,54124],{"class":42},[36,68047,2704],{"class":53649},[36,68049,53656],{"class":42},[36,68051,68052,68054,68056],{"class":38,"line":19131},[36,68053,54765],{"class":42},[36,68055,2698],{"class":53649},[36,68057,53656],{"class":42},[36,68059,68060,68062,68064],{"class":38,"line":19136},[36,68061,54492],{"class":42},[36,68063,54161],{"class":53649},[36,68065,53656],{"class":42},[36,68067,68068],{"class":38,"line":19142},[36,68069,68070],{"class":2621},"    \u002F\u002F 1. 获取大复选框\n",[36,68072,68073,68075,68078,68080,68082,68084,68086,68089],{"class":38,"line":19156},[36,68074,13599],{"class":46},[36,68076,68077],{"class":62}," checkAll",[36,68079,15941],{"class":46},[36,68081,56744],{"class":42},[36,68083,56747],{"class":79},[36,68085,92],{"class":42},[36,68087,68088],{"class":50},"'#checkAll'",[36,68090,123],{"class":42},[36,68092,68093],{"class":38,"line":19169},[36,68094,68095],{"class":2621},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,68097,68098,68100,68103,68105,68107,68109,68111,68114],{"class":38,"line":19174},[36,68099,13599],{"class":46},[36,68101,68102],{"class":62}," cks",[36,68104,15941],{"class":46},[36,68106,56744],{"class":42},[36,68108,58029],{"class":79},[36,68110,92],{"class":42},[36,68112,68113],{"class":50},"'.ck'",[36,68115,123],{"class":42},[36,68117,68118],{"class":38,"line":19188},[36,68119,68120],{"class":2621},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,68122,68123,68126,68128,68130,68132,68134,68136],{"class":38,"line":19193},[36,68124,68125],{"class":42},"    checkAll.",[36,68127,60161],{"class":79},[36,68129,92],{"class":42},[36,68131,60166],{"class":50},[36,68133,630],{"class":42},[36,68135,56797],{"class":46},[36,68137,56800],{"class":42},[36,68139,68140],{"class":38,"line":19199},[36,68141,68142],{"class":2621},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,68144,68145,68148],{"class":38,"line":19204},[36,68146,68147],{"class":2621},"      \u002F\u002F console.log(checkAll.checked)",[36,68149,68150],{"class":2621},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,68152,68153],{"class":38,"line":19218},[36,68154,68155],{"class":2621},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,68157,68158,68160,68162,68164,68166,68168,68170,68172,68174,68177,68179,68181,68183],{"class":38,"line":19223},[36,68159,54632],{"class":46},[36,68161,4066],{"class":42},[36,68163,54195],{"class":46},[36,68165,11818],{"class":42},[36,68167,47],{"class":46},[36,68169,899],{"class":62},[36,68171,11825],{"class":42},[36,68173,3463],{"class":46},[36,68175,68176],{"class":42}," cks.",[36,68178,54316],{"class":62},[36,68180,5599],{"class":42},[36,68182,4685],{"class":46},[36,68184,14819],{"class":42},[36,68186,68187,68190,68192,68195],{"class":38,"line":19228},[36,68188,68189],{"class":42},"        cks[i].checked ",[36,68191,47],{"class":46},[36,68193,68194],{"class":62}," this",[36,68196,68197],{"class":42},".checked\n",[36,68199,68200],{"class":38,"line":19242},[36,68201,54746],{"class":42},[36,68203,68204],{"class":38,"line":19254},[36,68205,35813],{"class":42},[36,68207,68208],{"class":38,"line":19259},[36,68209,68210],{"class":2621},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,68212,68213],{"class":38,"line":19272},[36,68214,70],{"emptyLinePlaceholder":69},[36,68216,68217,68219,68221,68223,68225,68227,68229,68231,68233,68235,68237,68239,68241],{"class":38,"line":19277},[36,68218,5586],{"class":46},[36,68220,4066],{"class":42},[36,68222,54195],{"class":46},[36,68224,11818],{"class":42},[36,68226,47],{"class":46},[36,68228,899],{"class":62},[36,68230,11825],{"class":42},[36,68232,3463],{"class":46},[36,68234,68176],{"class":42},[36,68236,54316],{"class":62},[36,68238,5599],{"class":42},[36,68240,4685],{"class":46},[36,68242,14819],{"class":42},[36,68244,68245],{"class":38,"line":19282},[36,68246,68247],{"class":2621},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,68249,68250,68253,68255,68257,68259,68261,68263],{"class":38,"line":19287},[36,68251,68252],{"class":42},"      cks[i].",[36,68254,60161],{"class":79},[36,68256,92],{"class":42},[36,68258,60166],{"class":50},[36,68260,630],{"class":42},[36,68262,56797],{"class":46},[36,68264,56800],{"class":42},[36,68266,68267],{"class":38,"line":19300},[36,68268,68269],{"class":2621},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,68271,68272],{"class":38,"line":19305},[36,68273,68274],{"class":2621},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,68276,68277],{"class":38,"line":34985},[36,68278,68279],{"class":2621},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,68281,68282],{"class":38,"line":34991},[36,68283,68284],{"class":2621},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,68286,68287,68290,68292,68294,68296,68298,68301,68303,68305,68307,68309],{"class":38,"line":34997},[36,68288,68289],{"class":42},"        checkAll.checked ",[36,68291,47],{"class":46},[36,68293,56744],{"class":42},[36,68295,58029],{"class":79},[36,68297,92],{"class":42},[36,68299,68300],{"class":50},"'.ck:checked'",[36,68302,33183],{"class":42},[36,68304,54316],{"class":62},[36,68306,60254],{"class":46},[36,68308,68176],{"class":42},[36,68310,58179],{"class":62},[36,68312,68313],{"class":38,"line":35003},[36,68314,67162],{"class":42},[36,68316,68317],{"class":38,"line":35009},[36,68318,4580],{"class":42},[36,68320,68321,68323,68325],{"class":38,"line":35020},[36,68322,54765],{"class":42},[36,68324,54161],{"class":53649},[36,68326,53656],{"class":42},[36,68328,68329,68331,68333],{"class":38,"line":35026},[36,68330,54133],{"class":42},[36,68332,54148],{"class":53649},[36,68334,53656],{"class":42},[36,68336,68337],{"class":38,"line":35046},[36,68338,70],{"emptyLinePlaceholder":69},[36,68340,68341,68343,68345],{"class":38,"line":35052},[36,68342,54133],{"class":42},[36,68344,52984],{"class":53649},[36,68346,53656],{"class":42},[19,68348,68349],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68351,68352],{},"用好之间比较得到的布尔值！！！",[19,68354,68355,68356,68359,68360,4066,68363,3139,68365,68368],{},"在 JS 里访问的时候，",[33,68357,68358],{},"checkbox.checked"," 是一个 ",[667,68361,68362],{},"布尔值",[33,68364,3779],{},[33,68366,68367],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68370,68371,68372,68375,68376],{},"HTML 的 ",[33,68373,68374],{},"checked=\"checked\""," 只是 ",[667,68377,68378,68379,68382],{},"初始值；JS 的 ",[33,68380,68381],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68384,68385],{},"：checked是一个伪类选择器",[19,68387,68388],{},[3879,68389],{"alt":31,"src":68390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68392,68393,68396],{},[68394,68395],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68398,68399],{},[3879,68400],{"alt":31,"src":68401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68403,68405],{"id":68404},"_33-dom事件进阶","3.3 DOM事件进阶",[1752,68407,68409],{"id":68408},"_331-事件流","3.3.1 事件流",[19,68411,68412],{},[3879,68413],{"alt":31,"src":68414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24368,68416,68418],{"id":68417},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68420,68421],{},[3879,68422],{"alt":31,"src":68423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,68425,68427],{"className":52982,"code":68426,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,68428,68429,68439,68453,68457,68465,68479,68499,68511,68519,68526,68538,68550,68560,68564,68568,68575,68587,68599,68609,68613,68621,68629,68633,68641,68656,68675,68683,68691,68711,68731,68747,68758,68766,68783,68794,68802,68819,68830,68838,68846,68854,68858],{"__ignoreMap":31},[36,68430,68431,68433,68435,68437],{"class":38,"line":39},[36,68432,53646],{"class":42},[36,68434,53650],{"class":53649},[36,68436,53653],{"class":79},[36,68438,53656],{"class":42},[36,68440,68441,68443,68445,68447,68449,68451],{"class":38,"line":54},[36,68442,3463],{"class":42},[36,68444,52984],{"class":53649},[36,68446,53665],{"class":79},[36,68448,47],{"class":42},[36,68450,53670],{"class":50},[36,68452,53656],{"class":42},[36,68454,68455],{"class":38,"line":66},[36,68456,70],{"emptyLinePlaceholder":69},[36,68458,68459,68461,68463],{"class":38,"line":73},[36,68460,3463],{"class":42},[36,68462,53683],{"class":53649},[36,68464,53656],{"class":42},[36,68466,68467,68469,68471,68473,68475,68477],{"class":38,"line":86},[36,68468,54492],{"class":42},[36,68470,53693],{"class":53649},[36,68472,53696],{"class":79},[36,68474,47],{"class":42},[36,68476,53701],{"class":50},[36,68478,53656],{"class":42},[36,68480,68481,68483,68485,68487,68489,68491,68493,68495,68497],{"class":38,"line":126},[36,68482,54492],{"class":42},[36,68484,53693],{"class":53649},[36,68486,17295],{"class":79},[36,68488,47],{"class":42},[36,68490,53740],{"class":50},[36,68492,53720],{"class":79},[36,68494,47],{"class":42},[36,68496,53747],{"class":50},[36,68498,53656],{"class":42},[36,68500,68501,68503,68505,68507,68509],{"class":38,"line":131},[36,68502,54492],{"class":42},[36,68504,53756],{"class":53649},[36,68506,53759],{"class":42},[36,68508,53756],{"class":53649},[36,68510,53656],{"class":42},[36,68512,68513,68515,68517],{"class":38,"line":225},[36,68514,54492],{"class":42},[36,68516,2467],{"class":53649},[36,68518,53656],{"class":42},[36,68520,68521,68524],{"class":38,"line":235},[36,68522,68523],{"class":79},"    .father",[36,68525,2150],{"class":42},[36,68527,68528,68530,68532,68534,68536],{"class":38,"line":377},[36,68529,57119],{"class":62},[36,68531,2158],{"class":42},[36,68533,67421],{"class":62},[36,68535,53840],{"class":46},[36,68537,3711],{"class":42},[36,68539,68540,68542,68544,68546,68548],{"class":38,"line":617},[36,68541,57133],{"class":62},[36,68543,2158],{"class":42},[36,68545,67421],{"class":62},[36,68547,53840],{"class":46},[36,68549,3711],{"class":42},[36,68551,68552,68554,68556,68558],{"class":38,"line":643},[36,68553,57232],{"class":62},[36,68555,2158],{"class":42},[36,68557,53993],{"class":62},[36,68559,3711],{"class":42},[36,68561,68562],{"class":38,"line":921},[36,68563,4580],{"class":42},[36,68565,68566],{"class":38,"line":934},[36,68567,70],{"emptyLinePlaceholder":69},[36,68569,68570,68573],{"class":38,"line":939},[36,68571,68572],{"class":79},"    .son",[36,68574,2150],{"class":42},[36,68576,68577,68579,68581,68583,68585],{"class":38,"line":949},[36,68578,57119],{"class":62},[36,68580,2158],{"class":42},[36,68582,1059],{"class":62},[36,68584,53840],{"class":46},[36,68586,3711],{"class":42},[36,68588,68589,68591,68593,68595,68597],{"class":38,"line":962},[36,68590,57133],{"class":62},[36,68592,2158],{"class":42},[36,68594,1059],{"class":62},[36,68596,53840],{"class":46},[36,68598,3711],{"class":42},[36,68600,68601,68603,68605,68607],{"class":38,"line":974},[36,68602,57232],{"class":62},[36,68604,2158],{"class":42},[36,68606,57237],{"class":62},[36,68608,3711],{"class":42},[36,68610,68611],{"class":38,"line":979},[36,68612,4580],{"class":42},[36,68614,68615,68617,68619],{"class":38,"line":994},[36,68616,54765],{"class":42},[36,68618,2467],{"class":53649},[36,68620,53656],{"class":42},[36,68622,68623,68625,68627],{"class":38,"line":1006},[36,68624,54133],{"class":42},[36,68626,53683],{"class":53649},[36,68628,53656],{"class":42},[36,68630,68631],{"class":38,"line":1011},[36,68632,70],{"emptyLinePlaceholder":69},[36,68634,68635,68637,68639],{"class":38,"line":1023},[36,68636,3463],{"class":42},[36,68638,54148],{"class":53649},[36,68640,53656],{"class":42},[36,68642,68643,68645,68647,68649,68651,68654],{"class":38,"line":1028},[36,68644,54492],{"class":42},[36,68646,53959],{"class":53649},[36,68648,55834],{"class":79},[36,68650,47],{"class":42},[36,68652,68653],{"class":50},"\"father\"",[36,68655,53656],{"class":42},[36,68657,68658,68660,68662,68664,68666,68669,68671,68673],{"class":38,"line":1033},[36,68659,53690],{"class":42},[36,68661,53959],{"class":53649},[36,68663,55834],{"class":79},[36,68665,47],{"class":42},[36,68667,68668],{"class":50},"\"son\"",[36,68670,57662],{"class":42},[36,68672,53959],{"class":53649},[36,68674,53656],{"class":42},[36,68676,68677,68679,68681],{"class":38,"line":1053},[36,68678,54765],{"class":42},[36,68680,53959],{"class":53649},[36,68682,53656],{"class":42},[36,68684,68685,68687,68689],{"class":38,"line":1064},[36,68686,54492],{"class":42},[36,68688,54161],{"class":53649},[36,68690,53656],{"class":42},[36,68692,68693,68695,68698,68700,68702,68704,68706,68709],{"class":38,"line":1075},[36,68694,13599],{"class":46},[36,68696,68697],{"class":62}," fa",[36,68699,15941],{"class":46},[36,68701,56744],{"class":42},[36,68703,56747],{"class":79},[36,68705,92],{"class":42},[36,68707,68708],{"class":50},"'.father'",[36,68710,123],{"class":42},[36,68712,68713,68715,68718,68720,68722,68724,68726,68729],{"class":38,"line":2291},[36,68714,13599],{"class":46},[36,68716,68717],{"class":62}," son",[36,68719,15941],{"class":46},[36,68721,56744],{"class":42},[36,68723,56747],{"class":79},[36,68725,92],{"class":42},[36,68727,68728],{"class":50},"'.son'",[36,68730,123],{"class":42},[36,68732,68733,68735,68737,68739,68741,68743,68745],{"class":38,"line":2329},[36,68734,54755],{"class":42},[36,68736,60161],{"class":79},[36,68738,92],{"class":42},[36,68740,60166],{"class":50},[36,68742,630],{"class":42},[36,68744,56797],{"class":46},[36,68746,56800],{"class":42},[36,68748,68749,68751,68753,68756],{"class":38,"line":2334},[36,68750,61273],{"class":79},[36,68752,92],{"class":42},[36,68754,68755],{"class":50},"'woshiu1'",[36,68757,123],{"class":42},[36,68759,68760,68762,68764],{"class":38,"line":2339},[36,68761,56883],{"class":42},[36,68763,3779],{"class":62},[36,68765,123],{"class":42},[36,68767,68768,68771,68773,68775,68777,68779,68781],{"class":38,"line":2365},[36,68769,68770],{"class":42},"    fa.",[36,68772,60161],{"class":79},[36,68774,92],{"class":42},[36,68776,60166],{"class":50},[36,68778,630],{"class":42},[36,68780,56797],{"class":46},[36,68782,56800],{"class":42},[36,68784,68785,68787,68789,68792],{"class":38,"line":2373},[36,68786,61273],{"class":79},[36,68788,92],{"class":42},[36,68790,68791],{"class":50},"'1'",[36,68793,123],{"class":42},[36,68795,68796,68798,68800],{"class":38,"line":5001},[36,68797,56883],{"class":42},[36,68799,3779],{"class":62},[36,68801,123],{"class":42},[36,68803,68804,68807,68809,68811,68813,68815,68817],{"class":38,"line":5006},[36,68805,68806],{"class":42},"    son.",[36,68808,60161],{"class":79},[36,68810,92],{"class":42},[36,68812,60166],{"class":50},[36,68814,630],{"class":42},[36,68816,56797],{"class":46},[36,68818,56800],{"class":42},[36,68820,68821,68823,68825,68828],{"class":38,"line":10328},[36,68822,61273],{"class":79},[36,68824,92],{"class":42},[36,68826,68827],{"class":50},"'2'",[36,68829,123],{"class":42},[36,68831,68832,68834,68836],{"class":38,"line":10352},[36,68833,56883],{"class":42},[36,68835,3779],{"class":62},[36,68837,123],{"class":42},[36,68839,68840,68842,68844],{"class":38,"line":10357},[36,68841,54765],{"class":42},[36,68843,54161],{"class":53649},[36,68845,53656],{"class":42},[36,68847,68848,68850,68852],{"class":38,"line":10363},[36,68849,54133],{"class":42},[36,68851,54148],{"class":53649},[36,68853,53656],{"class":42},[36,68855,68856],{"class":38,"line":10390},[36,68857,70],{"emptyLinePlaceholder":69},[36,68859,68860,68862,68864],{"class":38,"line":10395},[36,68861,54133],{"class":42},[36,68863,52984],{"class":53649},[36,68865,53656],{"class":42},[19,68867,68868],{},[3879,68869],{"alt":31,"src":68870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68872,68873],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24368,68875,68877],{"id":68876},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68879,68880],{},[3879,68881],{"alt":31,"src":68882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68884,68885],{},"反着来",[19,68887,68888],{},"注意是同名事件，比如都是‘click’",[24368,68890,68892],{"id":68891},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68894,68895],{},[3879,68896],{"alt":31,"src":68897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24368,68899,68901],{"id":68900},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68903,68904],{},[3879,68905],{"alt":31,"src":68906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68908,68909],{},[3879,68910],{"alt":31,"src":68911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24368,68913,68915],{"id":68914},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[650,68917,68918],{},[653,68919,68920],{},"事件类型的区别",[19,68922,68923],{},[3879,68924],{"alt":31,"src":68925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68927,68928],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[650,68930,68931],{"start":54},[653,68932,68933],{},"注册事件的区别",[19,68935,68936],{},[3879,68937],{"alt":31,"src":68938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24368,68940,68942],{"id":68941},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68944,68945],{},[3879,68946],{"alt":31,"src":68947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68949,68950],{},[3879,68951],{"alt":31,"src":68952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,68954,68956],{"className":55415,"code":68955,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[33,68957,68958,68966,68983,69006,69014,69019,69024,69029,69033,69041,69049],{"__ignoreMap":31},[36,68959,68960,68962,68964],{"class":38,"line":39},[36,68961,3463],{"class":42},[36,68963,54148],{"class":53649},[36,68965,53656],{"class":42},[36,68967,68968,68970,68973,68976,68978,68981],{"class":38,"line":54},[36,68969,54492],{"class":42},[36,68971,68972],{"class":53649},"form",[36,68974,68975],{"class":79}," action",[36,68977,47],{"class":42},[36,68979,68980],{"class":50},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,68982,53656],{"class":42},[36,68984,68985,68987,68989,68991,68993,68996,68999,69001,69004],{"class":38,"line":66},[36,68986,53690],{"class":42},[36,68988,56169],{"class":53649},[36,68990,56172],{"class":79},[36,68992,47],{"class":42},[36,68994,68995],{"class":50},"\"submit\"",[36,68997,68998],{"class":79}," value",[36,69000,47],{"class":42},[36,69002,69003],{"class":50},"\"免费注册\"",[36,69005,53656],{"class":42},[36,69007,69008,69010,69012],{"class":38,"line":73},[36,69009,53690],{"class":42},[36,69011,54161],{"class":53649},[36,69013,53656],{"class":42},[36,69015,69016],{"class":38,"line":86},[36,69017,69018],{"class":42},"      const form = document.querySelector('form')\n",[36,69020,69021],{"class":38,"line":126},[36,69022,69023],{"class":42},"      form.addEventListener('submit', function (e) {\n",[36,69025,69026],{"class":38,"line":131},[36,69027,69028],{"class":42},"        e.preventDefault()\n",[36,69030,69031],{"class":38,"line":225},[36,69032,67162],{"class":42},[36,69034,69035,69037,69039],{"class":38,"line":235},[36,69036,54124],{"class":42},[36,69038,54161],{"class":53649},[36,69040,53656],{"class":42},[36,69042,69043,69045,69047],{"class":38,"line":377},[36,69044,54765],{"class":42},[36,69046,68972],{"class":53649},[36,69048,53656],{"class":42},[36,69050,69051,69053,69055],{"class":38,"line":617},[36,69052,54133],{"class":42},[36,69054,54148],{"class":53649},[36,69056,53656],{"class":42},[19,69058,69059],{},"点击不在跳转！！！",[1752,69061,69063],{"id":69062},"_332-事件委托","3.3.2 事件委托",[19,69065,69066],{},[3879,69067],{"alt":31,"src":69068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,69070,69072],{"className":52982,"code":69071,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,69073,69074,69084,69098,69102,69110,69124,69144,69156,69164,69168,69176,69184,69196,69208,69220,69232,69244,69257,69265,69273,69278,69297,69318,69323,69328,69333,69338,69347,69351,69361,69365,69370,69375,69389,69399,69403,69407,69415,69423,69427],{"__ignoreMap":31},[36,69075,69076,69078,69080,69082],{"class":38,"line":39},[36,69077,53646],{"class":42},[36,69079,53650],{"class":53649},[36,69081,53653],{"class":79},[36,69083,53656],{"class":42},[36,69085,69086,69088,69090,69092,69094,69096],{"class":38,"line":54},[36,69087,3463],{"class":42},[36,69089,52984],{"class":53649},[36,69091,53665],{"class":79},[36,69093,47],{"class":42},[36,69095,53670],{"class":50},[36,69097,53656],{"class":42},[36,69099,69100],{"class":38,"line":66},[36,69101,70],{"emptyLinePlaceholder":69},[36,69103,69104,69106,69108],{"class":38,"line":73},[36,69105,3463],{"class":42},[36,69107,53683],{"class":53649},[36,69109,53656],{"class":42},[36,69111,69112,69114,69116,69118,69120,69122],{"class":38,"line":86},[36,69113,54492],{"class":42},[36,69115,53693],{"class":53649},[36,69117,53696],{"class":79},[36,69119,47],{"class":42},[36,69121,53701],{"class":50},[36,69123,53656],{"class":42},[36,69125,69126,69128,69130,69132,69134,69136,69138,69140,69142],{"class":38,"line":126},[36,69127,54492],{"class":42},[36,69129,53693],{"class":53649},[36,69131,17295],{"class":79},[36,69133,47],{"class":42},[36,69135,53740],{"class":50},[36,69137,53720],{"class":79},[36,69139,47],{"class":42},[36,69141,53747],{"class":50},[36,69143,53656],{"class":42},[36,69145,69146,69148,69150,69152,69154],{"class":38,"line":131},[36,69147,54492],{"class":42},[36,69149,53756],{"class":53649},[36,69151,53759],{"class":42},[36,69153,53756],{"class":53649},[36,69155,53656],{"class":42},[36,69157,69158,69160,69162],{"class":38,"line":225},[36,69159,54133],{"class":42},[36,69161,53683],{"class":53649},[36,69163,53656],{"class":42},[36,69165,69166],{"class":38,"line":235},[36,69167,70],{"emptyLinePlaceholder":69},[36,69169,69170,69172,69174],{"class":38,"line":377},[36,69171,3463],{"class":42},[36,69173,54148],{"class":53649},[36,69175,53656],{"class":42},[36,69177,69178,69180,69182],{"class":38,"line":617},[36,69179,54492],{"class":42},[36,69181,3557],{"class":53649},[36,69183,53656],{"class":42},[36,69185,69186,69188,69190,69192,69194],{"class":38,"line":643},[36,69187,53690],{"class":42},[36,69189,653],{"class":53649},[36,69191,56314],{"class":42},[36,69193,653],{"class":53649},[36,69195,53656],{"class":42},[36,69197,69198,69200,69202,69204,69206],{"class":38,"line":921},[36,69199,53690],{"class":42},[36,69201,653],{"class":53649},[36,69203,56333],{"class":42},[36,69205,653],{"class":53649},[36,69207,53656],{"class":42},[36,69209,69210,69212,69214,69216,69218],{"class":38,"line":934},[36,69211,53690],{"class":42},[36,69213,653],{"class":53649},[36,69215,56352],{"class":42},[36,69217,653],{"class":53649},[36,69219,53656],{"class":42},[36,69221,69222,69224,69226,69228,69230],{"class":38,"line":939},[36,69223,53690],{"class":42},[36,69225,653],{"class":53649},[36,69227,56371],{"class":42},[36,69229,653],{"class":53649},[36,69231,53656],{"class":42},[36,69233,69234,69236,69238,69240,69242],{"class":38,"line":949},[36,69235,53690],{"class":42},[36,69237,653],{"class":53649},[36,69239,56390],{"class":42},[36,69241,653],{"class":53649},[36,69243,53656],{"class":42},[36,69245,69246,69248,69250,69253,69255],{"class":38,"line":962},[36,69247,53690],{"class":42},[36,69249,19],{"class":53649},[36,69251,69252],{"class":42},">我不需要变色\u003C\u002F",[36,69254,19],{"class":53649},[36,69256,53656],{"class":42},[36,69258,69259,69261,69263],{"class":38,"line":974},[36,69260,54765],{"class":42},[36,69262,3557],{"class":53649},[36,69264,53656],{"class":42},[36,69266,69267,69269,69271],{"class":38,"line":979},[36,69268,54492],{"class":42},[36,69270,54161],{"class":53649},[36,69272,53656],{"class":42},[36,69274,69275],{"class":38,"line":994},[36,69276,69277],{"class":2621},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,69279,69280,69282,69284,69286,69288,69290,69292,69295],{"class":38,"line":1006},[36,69281,13599],{"class":46},[36,69283,63640],{"class":62},[36,69285,15941],{"class":46},[36,69287,56744],{"class":42},[36,69289,56747],{"class":79},[36,69291,92],{"class":42},[36,69293,69294],{"class":50},"'ul'",[36,69296,123],{"class":42},[36,69298,69299,69302,69304,69306,69308,69310,69312,69314,69316],{"class":38,"line":1011},[36,69300,69301],{"class":42},"    ul.",[36,69303,60161],{"class":79},[36,69305,92],{"class":42},[36,69307,60166],{"class":50},[36,69309,630],{"class":42},[36,69311,56797],{"class":46},[36,69313,4066],{"class":42},[36,69315,2637],{"class":7598},[36,69317,14819],{"class":42},[36,69319,69320],{"class":38,"line":1023},[36,69321,69322],{"class":2621},"      \u002F\u002F alert(1)\n",[36,69324,69325],{"class":38,"line":1028},[36,69326,69327],{"class":2621},"      \u002F\u002F e.target就是我们点击的对象\n",[36,69329,69330],{"class":38,"line":1033},[36,69331,69332],{"class":2621},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,69334,69335],{"class":38,"line":1053},[36,69336,69337],{"class":2621},"      \u002F\u002F e.target.style.color = 'red'\n",[36,69339,69340,69342,69344],{"class":38,"line":1064},[36,69341,60592],{"class":42},[36,69343,60595],{"class":79},[36,69345,69346],{"class":42},"(e)\n",[36,69348,69349],{"class":38,"line":1075},[36,69350,70],{"emptyLinePlaceholder":69},[36,69352,69353,69355,69358],{"class":38,"line":2291},[36,69354,60592],{"class":42},[36,69356,69357],{"class":79},"dir",[36,69359,69360],{"class":42},"(e.target)\n",[36,69362,69363],{"class":38,"line":2329},[36,69364,70],{"emptyLinePlaceholder":69},[36,69366,69367],{"class":38,"line":2334},[36,69368,69369],{"class":2621},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,69371,69372],{"class":38,"line":2339},[36,69373,69374],{"class":2621},"      \u002F\u002F 通过tagName来进行判断\n",[36,69376,69377,69379,69382,69384,69387],{"class":38,"line":2365},[36,69378,56828],{"class":46},[36,69380,69381],{"class":42}," (e.target.tagName ",[36,69383,56834],{"class":46},[36,69385,69386],{"class":50}," 'LI'",[36,69388,14819],{"class":42},[36,69390,69391,69394,69396],{"class":38,"line":2373},[36,69392,69393],{"class":42},"        e.target.style.color ",[36,69395,47],{"class":46},[36,69397,69398],{"class":50}," 'red'\n",[36,69400,69401],{"class":38,"line":5001},[36,69402,54746],{"class":42},[36,69404,69405],{"class":38,"line":5006},[36,69406,35813],{"class":42},[36,69408,69409,69411,69413],{"class":38,"line":10328},[36,69410,54765],{"class":42},[36,69412,54161],{"class":53649},[36,69414,53656],{"class":42},[36,69416,69417,69419,69421],{"class":38,"line":10352},[36,69418,54133],{"class":42},[36,69420,54148],{"class":53649},[36,69422,53656],{"class":42},[36,69424,69425],{"class":38,"line":10357},[36,69426,70],{"emptyLinePlaceholder":69},[36,69428,69429,69431,69433],{"class":38,"line":10363},[36,69430,54133],{"class":42},[36,69432,52984],{"class":53649},[36,69434,53656],{"class":42},[19,69436,69437],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69439,69440],{},"if(e.target.ragName==='P') {}",[19,69442,69443],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69445,69446],{},"通过事件委托的方式实现tab栏切换改造：",[19,69448,69449],{},"一定要记住自定义属性！！！！！！",[19,69451,69452],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69454,69455],{},"id是自定义的属性名",[19,69457,69458],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,69460,69462],{"className":52982,"code":69461,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,69463,69464,69474,69488,69492,69500,69514,69534,69554,69566,69574,69580,69590,69600,69604,69608,69614,69626,69638,69650,69666,69670,69674,69680,69692,69704,69716,69726,69736,69740,69744,69752,69764,69774,69786,69790,69794,69802,69812,69822,69832,69836,69840,69850,69864,69876,69880,69884,69896,69906,69922,69932,69936,69940,69954,69964,69974,69978,69982,69988,70002,70006,70010,70018,70028,70032,70036,70045,70055,70059,70067,70075,70079,70087,70101,70115,70127,70135,70174,70206,70238,70270,70302,70310,70318,70332,70366,70400,70434,70468,70502,70510,70518,70526,70531,70536,70555,70560,70580,70588,70593,70606,70627,70640,70644,70649,70654,70667,70687,70715,70719,70723,70727,70735,70743,70747],{"__ignoreMap":31},[36,69465,69466,69468,69470,69472],{"class":38,"line":39},[36,69467,53646],{"class":42},[36,69469,53650],{"class":53649},[36,69471,53653],{"class":79},[36,69473,53656],{"class":42},[36,69475,69476,69478,69480,69482,69484,69486],{"class":38,"line":54},[36,69477,3463],{"class":42},[36,69479,52984],{"class":53649},[36,69481,53665],{"class":79},[36,69483,47],{"class":42},[36,69485,53670],{"class":50},[36,69487,53656],{"class":42},[36,69489,69490],{"class":38,"line":66},[36,69491,70],{"emptyLinePlaceholder":69},[36,69493,69494,69496,69498],{"class":38,"line":73},[36,69495,3463],{"class":42},[36,69497,53683],{"class":53649},[36,69499,53656],{"class":42},[36,69501,69502,69504,69506,69508,69510,69512],{"class":38,"line":86},[36,69503,54492],{"class":42},[36,69505,53693],{"class":53649},[36,69507,53696],{"class":79},[36,69509,47],{"class":42},[36,69511,53701],{"class":50},[36,69513,61475],{"class":42},[36,69515,69516,69518,69520,69522,69524,69526,69528,69530,69532],{"class":38,"line":126},[36,69517,54492],{"class":42},[36,69519,53693],{"class":53649},[36,69521,53712],{"class":79},[36,69523,47],{"class":42},[36,69525,53717],{"class":50},[36,69527,53720],{"class":79},[36,69529,47],{"class":42},[36,69531,53725],{"class":50},[36,69533,61475],{"class":42},[36,69535,69536,69538,69540,69542,69544,69546,69548,69550,69552],{"class":38,"line":131},[36,69537,54492],{"class":42},[36,69539,53693],{"class":53649},[36,69541,17295],{"class":79},[36,69543,47],{"class":42},[36,69545,53740],{"class":50},[36,69547,53720],{"class":79},[36,69549,47],{"class":42},[36,69551,53747],{"class":50},[36,69553,61475],{"class":42},[36,69555,69556,69558,69560,69562,69564],{"class":38,"line":225},[36,69557,54492],{"class":42},[36,69559,53756],{"class":53649},[36,69561,65972],{"class":42},[36,69563,53756],{"class":53649},[36,69565,53656],{"class":42},[36,69567,69568,69570,69572],{"class":38,"line":235},[36,69569,54492],{"class":42},[36,69571,2467],{"class":53649},[36,69573,53656],{"class":42},[36,69575,69576,69578],{"class":38,"line":377},[36,69577,8785],{"class":53649},[36,69579,2150],{"class":42},[36,69581,69582,69584,69586,69588],{"class":38,"line":617},[36,69583,57054],{"class":62},[36,69585,2158],{"class":42},[36,69587,2751],{"class":62},[36,69589,3711],{"class":42},[36,69591,69592,69594,69596,69598],{"class":38,"line":643},[36,69593,57043],{"class":62},[36,69595,2158],{"class":42},[36,69597,2751],{"class":62},[36,69599,3711],{"class":42},[36,69601,69602],{"class":38,"line":921},[36,69603,4580],{"class":42},[36,69605,69606],{"class":38,"line":934},[36,69607,70],{"emptyLinePlaceholder":69},[36,69609,69610,69612],{"class":38,"line":939},[36,69611,66023],{"class":79},[36,69613,2150],{"class":42},[36,69615,69616,69618,69620,69622,69624],{"class":38,"line":949},[36,69617,57119],{"class":62},[36,69619,2158],{"class":42},[36,69621,66034],{"class":62},[36,69623,53840],{"class":46},[36,69625,3711],{"class":42},[36,69627,69628,69630,69632,69634,69636],{"class":38,"line":962},[36,69629,57133],{"class":62},[36,69631,2158],{"class":42},[36,69633,66047],{"class":62},[36,69635,53840],{"class":46},[36,69637,3711],{"class":42},[36,69639,69640,69642,69644,69646,69648],{"class":38,"line":974},[36,69641,57054],{"class":62},[36,69643,2158],{"class":42},[36,69645,3254],{"class":62},[36,69647,53840],{"class":46},[36,69649,3711],{"class":42},[36,69651,69652,69654,69656,69658,69660,69662,69664],{"class":38,"line":979},[36,69653,64325],{"class":62},[36,69655,2158],{"class":42},[36,69657,1906],{"class":62},[36,69659,53840],{"class":46},[36,69661,53869],{"class":62},[36,69663,64592],{"class":62},[36,69665,3711],{"class":42},[36,69667,69668],{"class":38,"line":994},[36,69669,4580],{"class":42},[36,69671,69672],{"class":38,"line":1006},[36,69673,70],{"emptyLinePlaceholder":69},[36,69675,69676,69678],{"class":38,"line":1011},[36,69677,66092],{"class":79},[36,69679,2150],{"class":42},[36,69681,69682,69684,69686,69688,69690],{"class":38,"line":1023},[36,69683,57119],{"class":62},[36,69685,2158],{"class":42},[36,69687,1070],{"class":62},[36,69689,2884],{"class":46},[36,69691,3711],{"class":42},[36,69693,69694,69696,69698,69700,69702],{"class":38,"line":1028},[36,69695,57133],{"class":62},[36,69697,2158],{"class":42},[36,69699,3460],{"class":62},[36,69701,53840],{"class":46},[36,69703,3711],{"class":42},[36,69705,69706,69708,69710,69712,69714],{"class":38,"line":1033},[36,69707,59707],{"class":62},[36,69709,2158],{"class":42},[36,69711,3460],{"class":62},[36,69713,53840],{"class":46},[36,69715,3711],{"class":42},[36,69717,69718,69720,69722,69724],{"class":38,"line":1053},[36,69719,57357],{"class":62},[36,69721,2158],{"class":42},[36,69723,53825],{"class":62},[36,69725,3711],{"class":42},[36,69727,69728,69730,69732,69734],{"class":38,"line":1064},[36,69729,57368],{"class":62},[36,69731,2158],{"class":42},[36,69733,54016],{"class":62},[36,69735,3711],{"class":42},[36,69737,69738],{"class":38,"line":1075},[36,69739,4580],{"class":42},[36,69741,69742],{"class":38,"line":2291},[36,69743,70],{"emptyLinePlaceholder":69},[36,69745,69746,69748,69750],{"class":38,"line":2329},[36,69747,66092],{"class":79},[36,69749,66165],{"class":53649},[36,69751,2150],{"class":42},[36,69753,69754,69756,69758,69760,69762],{"class":38,"line":2334},[36,69755,57270],{"class":62},[36,69757,2158],{"class":42},[36,69759,3354],{"class":62},[36,69761,53840],{"class":46},[36,69763,3711],{"class":42},[36,69765,69766,69768,69770,69772],{"class":38,"line":2339},[36,69767,64682],{"class":62},[36,69769,2158],{"class":42},[36,69771,66188],{"class":62},[36,69773,3711],{"class":42},[36,69775,69776,69778,69780,69782,69784],{"class":38,"line":2365},[36,69777,64348],{"class":62},[36,69779,2158],{"class":42},[36,69781,3254],{"class":62},[36,69783,53840],{"class":46},[36,69785,3711],{"class":42},[36,69787,69788],{"class":38,"line":2373},[36,69789,4580],{"class":42},[36,69791,69792],{"class":38,"line":5001},[36,69793,70],{"emptyLinePlaceholder":69},[36,69795,69796,69798,69800],{"class":38,"line":5006},[36,69797,66092],{"class":79},[36,69799,63640],{"class":53649},[36,69801,2150],{"class":42},[36,69803,69804,69806,69808,69810],{"class":38,"line":10328},[36,69805,57080],{"class":62},[36,69807,2158],{"class":42},[36,69809,57085],{"class":62},[36,69811,3711],{"class":42},[36,69813,69814,69816,69818,69820],{"class":38,"line":10352},[36,69815,57357],{"class":62},[36,69817,2158],{"class":42},[36,69819,53825],{"class":62},[36,69821,3711],{"class":42},[36,69823,69824,69826,69828,69830],{"class":38,"line":10357},[36,69825,57368],{"class":62},[36,69827,2158],{"class":42},[36,69829,53928],{"class":62},[36,69831,3711],{"class":42},[36,69833,69834],{"class":38,"line":10363},[36,69835,4580],{"class":42},[36,69837,69838],{"class":38,"line":10390},[36,69839,70],{"emptyLinePlaceholder":69},[36,69841,69842,69844,69846,69848],{"class":38,"line":10395},[36,69843,66092],{"class":79},[36,69845,63640],{"class":53649},[36,69847,57423],{"class":53649},[36,69849,2150],{"class":42},[36,69851,69852,69854,69856,69858,69860,69862],{"class":38,"line":10401},[36,69853,57054],{"class":62},[36,69855,2158],{"class":42},[36,69857,2751],{"class":62},[36,69859,11330],{"class":62},[36,69861,53840],{"class":46},[36,69863,3711],{"class":42},[36,69865,69866,69868,69870,69872,69874],{"class":38,"line":10413},[36,69867,57270],{"class":62},[36,69869,2158],{"class":42},[36,69871,3104],{"class":62},[36,69873,53840],{"class":46},[36,69875,3711],{"class":42},[36,69877,69878],{"class":38,"line":10425},[36,69879,4580],{"class":42},[36,69881,69882],{"class":38,"line":10437},[36,69883,70],{"emptyLinePlaceholder":69},[36,69885,69886,69888,69890,69892,69894],{"class":38,"line":12095},[36,69887,66092],{"class":79},[36,69889,63640],{"class":53649},[36,69891,57423],{"class":53649},[36,69893,3815],{"class":53649},[36,69895,2150],{"class":42},[36,69897,69898,69900,69902,69904],{"class":38,"line":12120},[36,69899,66317],{"class":62},[36,69901,2158],{"class":42},[36,69903,57085],{"class":62},[36,69905,3711],{"class":42},[36,69907,69908,69910,69912,69914,69916,69918,69920],{"class":38,"line":12143},[36,69909,64580],{"class":62},[36,69911,2158],{"class":42},[36,69913,1911],{"class":62},[36,69915,53840],{"class":46},[36,69917,53869],{"class":62},[36,69919,66338],{"class":62},[36,69921,3711],{"class":42},[36,69923,69924,69926,69928,69930],{"class":38,"line":12167},[36,69925,59764],{"class":62},[36,69927,2158],{"class":42},[36,69929,64717],{"class":62},[36,69931,3711],{"class":42},[36,69933,69934],{"class":38,"line":12172},[36,69935,4580],{"class":42},[36,69937,69938],{"class":38,"line":12177},[36,69939,70],{"emptyLinePlaceholder":69},[36,69941,69942,69944,69946,69948,69950,69952],{"class":38,"line":12182},[36,69943,66092],{"class":79},[36,69945,63640],{"class":53649},[36,69947,57423],{"class":53649},[36,69949,3815],{"class":53649},[36,69951,66371],{"class":79},[36,69953,2150],{"class":42},[36,69955,69956,69958,69960,69962],{"class":38,"line":12191},[36,69957,64139],{"class":62},[36,69959,2158],{"class":42},[36,69961,66382],{"class":62},[36,69963,3711],{"class":42},[36,69965,69966,69968,69970,69972],{"class":38,"line":12196},[36,69967,59764],{"class":62},[36,69969,2158],{"class":42},[36,69971,66382],{"class":62},[36,69973,3711],{"class":42},[36,69975,69976],{"class":38,"line":12202},[36,69977,4580],{"class":42},[36,69979,69980],{"class":38,"line":12223},[36,69981,70],{"emptyLinePlaceholder":69},[36,69983,69984,69986],{"class":38,"line":12229},[36,69985,66407],{"class":79},[36,69987,2150],{"class":42},[36,69989,69990,69992,69994,69996,69998,70000],{"class":38,"line":12243},[36,69991,57043],{"class":62},[36,69993,2158],{"class":42},[36,69995,2751],{"class":62},[36,69997,66420],{"class":62},[36,69999,53840],{"class":46},[36,70001,3711],{"class":42},[36,70003,70004],{"class":38,"line":12249},[36,70005,4580],{"class":42},[36,70007,70008],{"class":38,"line":12276},[36,70009,70],{"emptyLinePlaceholder":69},[36,70011,70012,70014,70016],{"class":38,"line":12285},[36,70013,66407],{"class":79},[36,70015,64522],{"class":79},[36,70017,2150],{"class":42},[36,70019,70020,70022,70024,70026],{"class":38,"line":12291},[36,70021,57357],{"class":62},[36,70023,2158],{"class":42},[36,70025,57085],{"class":62},[36,70027,3711],{"class":42},[36,70029,70030],{"class":38,"line":12299},[36,70031,4580],{"class":42},[36,70033,70034],{"class":38,"line":12304},[36,70035,70],{"emptyLinePlaceholder":69},[36,70037,70038,70040,70043],{"class":38,"line":18977},[36,70039,66407],{"class":79},[36,70041,70042],{"class":79}," .active",[36,70044,2150],{"class":42},[36,70046,70047,70049,70051,70053],{"class":38,"line":18983},[36,70048,57357],{"class":62},[36,70050,2158],{"class":42},[36,70052,63217],{"class":62},[36,70054,3711],{"class":42},[36,70056,70057],{"class":38,"line":19006},[36,70058,4580],{"class":42},[36,70060,70061,70063,70065],{"class":38,"line":19012},[36,70062,54765],{"class":42},[36,70064,2467],{"class":53649},[36,70066,53656],{"class":42},[36,70068,70069,70071,70073],{"class":38,"line":19035},[36,70070,54133],{"class":42},[36,70072,53683],{"class":53649},[36,70074,53656],{"class":42},[36,70076,70077],{"class":38,"line":19049},[36,70078,70],{"emptyLinePlaceholder":69},[36,70080,70081,70083,70085],{"class":38,"line":19069},[36,70082,3463],{"class":42},[36,70084,54148],{"class":53649},[36,70086,53656],{"class":42},[36,70088,70089,70091,70093,70095,70097,70099],{"class":38,"line":19075},[36,70090,54492],{"class":42},[36,70092,53959],{"class":53649},[36,70094,55834],{"class":79},[36,70096,47],{"class":42},[36,70098,66522],{"class":50},[36,70100,53656],{"class":42},[36,70102,70103,70105,70107,70109,70111,70113],{"class":38,"line":19086},[36,70104,53690],{"class":42},[36,70106,53959],{"class":53649},[36,70108,55834],{"class":79},[36,70110,47],{"class":42},[36,70112,66537],{"class":50},[36,70114,53656],{"class":42},[36,70116,70117,70119,70121,70123,70125],{"class":38,"line":19109},[36,70118,57582],{"class":42},[36,70120,1752],{"class":53649},[36,70122,66548],{"class":42},[36,70124,1752],{"class":53649},[36,70126,53656],{"class":42},[36,70128,70129,70131,70133],{"class":38,"line":19131},[36,70130,57582],{"class":42},[36,70132,3557],{"class":53649},[36,70134,53656],{"class":42},[36,70136,70137,70139,70141,70143,70145,70147,70149,70151,70153,70155,70157,70159,70161,70164,70166,70168,70170,70172],{"class":38,"line":19136},[36,70138,57650],{"class":42},[36,70140,653],{"class":53649},[36,70142,63400],{"class":42},[36,70144,2796],{"class":53649},[36,70146,55834],{"class":79},[36,70148,47],{"class":42},[36,70150,62054],{"class":50},[36,70152,63405],{"class":79},[36,70154,47],{"class":42},[36,70156,66583],{"class":50},[36,70158,56299],{"class":79},[36,70160,47],{"class":42},[36,70162,70163],{"class":50},"\"0\"",[36,70165,66586],{"class":42},[36,70167,2796],{"class":53649},[36,70169,57662],{"class":42},[36,70171,653],{"class":53649},[36,70173,53656],{"class":42},[36,70175,70176,70178,70180,70182,70184,70186,70188,70190,70192,70194,70196,70198,70200,70202,70204],{"class":38,"line":19142},[36,70177,57650],{"class":42},[36,70179,653],{"class":53649},[36,70181,63400],{"class":42},[36,70183,2796],{"class":53649},[36,70185,63405],{"class":79},[36,70187,47],{"class":42},[36,70189,66583],{"class":50},[36,70191,56299],{"class":79},[36,70193,47],{"class":42},[36,70195,6063],{"class":50},[36,70197,66613],{"class":42},[36,70199,2796],{"class":53649},[36,70201,57662],{"class":42},[36,70203,653],{"class":53649},[36,70205,53656],{"class":42},[36,70207,70208,70210,70212,70214,70216,70218,70220,70222,70224,70226,70228,70230,70232,70234,70236],{"class":38,"line":19156},[36,70209,57650],{"class":42},[36,70211,653],{"class":53649},[36,70213,63400],{"class":42},[36,70215,2796],{"class":53649},[36,70217,63405],{"class":79},[36,70219,47],{"class":42},[36,70221,66583],{"class":50},[36,70223,56299],{"class":79},[36,70225,47],{"class":42},[36,70227,6086],{"class":50},[36,70229,66640],{"class":42},[36,70231,2796],{"class":53649},[36,70233,57662],{"class":42},[36,70235,653],{"class":53649},[36,70237,53656],{"class":42},[36,70239,70240,70242,70244,70246,70248,70250,70252,70254,70256,70258,70260,70262,70264,70266,70268],{"class":38,"line":19169},[36,70241,57650],{"class":42},[36,70243,653],{"class":53649},[36,70245,63400],{"class":42},[36,70247,2796],{"class":53649},[36,70249,63405],{"class":79},[36,70251,47],{"class":42},[36,70253,66583],{"class":50},[36,70255,56299],{"class":79},[36,70257,47],{"class":42},[36,70259,6099],{"class":50},[36,70261,66667],{"class":42},[36,70263,2796],{"class":53649},[36,70265,57662],{"class":42},[36,70267,653],{"class":53649},[36,70269,53656],{"class":42},[36,70271,70272,70274,70276,70278,70280,70282,70284,70286,70288,70290,70292,70294,70296,70298,70300],{"class":38,"line":19174},[36,70273,57650],{"class":42},[36,70275,653],{"class":53649},[36,70277,63400],{"class":42},[36,70279,2796],{"class":53649},[36,70281,63405],{"class":79},[36,70283,47],{"class":42},[36,70285,66583],{"class":50},[36,70287,56299],{"class":79},[36,70289,47],{"class":42},[36,70291,6112],{"class":50},[36,70293,66694],{"class":42},[36,70295,2796],{"class":53649},[36,70297,57662],{"class":42},[36,70299,653],{"class":53649},[36,70301,53656],{"class":42},[36,70303,70304,70306,70308],{"class":38,"line":19188},[36,70305,57755],{"class":42},[36,70307,3557],{"class":53649},[36,70309,53656],{"class":42},[36,70311,70312,70314,70316],{"class":38,"line":19193},[36,70313,54124],{"class":42},[36,70315,53959],{"class":53649},[36,70317,53656],{"class":42},[36,70319,70320,70322,70324,70326,70328,70330],{"class":38,"line":19199},[36,70321,53690],{"class":42},[36,70323,53959],{"class":53649},[36,70325,55834],{"class":79},[36,70327,47],{"class":42},[36,70329,66731],{"class":50},[36,70331,53656],{"class":42},[36,70333,70334,70336,70338,70340,70342,70344,70346,70348,70350,70352,70354,70356,70358,70360,70362,70364],{"class":38,"line":19204},[36,70335,57582],{"class":42},[36,70337,53959],{"class":53649},[36,70339,55834],{"class":79},[36,70341,47],{"class":42},[36,70343,66746],{"class":50},[36,70345,63400],{"class":42},[36,70347,3879],{"class":53649},[36,70349,57587],{"class":79},[36,70351,47],{"class":42},[36,70353,66757],{"class":50},[36,70355,57595],{"class":79},[36,70357,47],{"class":42},[36,70359,10033],{"class":50},[36,70361,66766],{"class":42},[36,70363,53959],{"class":53649},[36,70365,53656],{"class":42},[36,70367,70368,70370,70372,70374,70376,70378,70380,70382,70384,70386,70388,70390,70392,70394,70396,70398],{"class":38,"line":19218},[36,70369,57582],{"class":42},[36,70371,53959],{"class":53649},[36,70373,55834],{"class":79},[36,70375,47],{"class":42},[36,70377,64971],{"class":50},[36,70379,63400],{"class":42},[36,70381,3879],{"class":53649},[36,70383,57587],{"class":79},[36,70385,47],{"class":42},[36,70387,66793],{"class":50},[36,70389,57595],{"class":79},[36,70391,47],{"class":42},[36,70393,10033],{"class":50},[36,70395,66766],{"class":42},[36,70397,53959],{"class":53649},[36,70399,53656],{"class":42},[36,70401,70402,70404,70406,70408,70410,70412,70414,70416,70418,70420,70422,70424,70426,70428,70430,70432],{"class":38,"line":19223},[36,70403,57582],{"class":42},[36,70405,53959],{"class":53649},[36,70407,55834],{"class":79},[36,70409,47],{"class":42},[36,70411,64971],{"class":50},[36,70413,63400],{"class":42},[36,70415,3879],{"class":53649},[36,70417,57587],{"class":79},[36,70419,47],{"class":42},[36,70421,66828],{"class":50},[36,70423,57595],{"class":79},[36,70425,47],{"class":42},[36,70427,10033],{"class":50},[36,70429,66766],{"class":42},[36,70431,53959],{"class":53649},[36,70433,53656],{"class":42},[36,70435,70436,70438,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460,70462,70464,70466],{"class":38,"line":19228},[36,70437,57582],{"class":42},[36,70439,53959],{"class":53649},[36,70441,55834],{"class":79},[36,70443,47],{"class":42},[36,70445,64971],{"class":50},[36,70447,63400],{"class":42},[36,70449,3879],{"class":53649},[36,70451,57587],{"class":79},[36,70453,47],{"class":42},[36,70455,66863],{"class":50},[36,70457,57595],{"class":79},[36,70459,47],{"class":42},[36,70461,10033],{"class":50},[36,70463,66766],{"class":42},[36,70465,53959],{"class":53649},[36,70467,53656],{"class":42},[36,70469,70470,70472,70474,70476,70478,70480,70482,70484,70486,70488,70490,70492,70494,70496,70498,70500],{"class":38,"line":19242},[36,70471,57582],{"class":42},[36,70473,53959],{"class":53649},[36,70475,55834],{"class":79},[36,70477,47],{"class":42},[36,70479,64971],{"class":50},[36,70481,63400],{"class":42},[36,70483,3879],{"class":53649},[36,70485,57587],{"class":79},[36,70487,47],{"class":42},[36,70489,66898],{"class":50},[36,70491,57595],{"class":79},[36,70493,47],{"class":42},[36,70495,10033],{"class":50},[36,70497,66766],{"class":42},[36,70499,53959],{"class":53649},[36,70501,53656],{"class":42},[36,70503,70504,70506,70508],{"class":38,"line":19254},[36,70505,54124],{"class":42},[36,70507,53959],{"class":53649},[36,70509,53656],{"class":42},[36,70511,70512,70514,70516],{"class":38,"line":19259},[36,70513,54765],{"class":42},[36,70515,53959],{"class":53649},[36,70517,53656],{"class":42},[36,70519,70520,70522,70524],{"class":38,"line":19272},[36,70521,54492],{"class":42},[36,70523,54161],{"class":53649},[36,70525,53656],{"class":42},[36,70527,70528],{"class":38,"line":19277},[36,70529,70530],{"class":2621},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,70532,70533],{"class":38,"line":19282},[36,70534,70535],{"class":2621},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,70537,70538,70540,70542,70544,70546,70548,70550,70553],{"class":38,"line":19287},[36,70539,13599],{"class":46},[36,70541,63640],{"class":62},[36,70543,15941],{"class":46},[36,70545,56744],{"class":42},[36,70547,56747],{"class":79},[36,70549,92],{"class":42},[36,70551,70552],{"class":50},"'.tab-nav ul'",[36,70554,123],{"class":42},[36,70556,70557],{"class":38,"line":19300},[36,70558,70559],{"class":2621},"    \u002F\u002F 2.添加事件\n",[36,70561,70562,70564,70566,70568,70570,70572,70574,70576,70578],{"class":38,"line":19305},[36,70563,69301],{"class":42},[36,70565,60161],{"class":79},[36,70567,92],{"class":42},[36,70569,60166],{"class":50},[36,70571,630],{"class":42},[36,70573,56797],{"class":46},[36,70575,4066],{"class":42},[36,70577,2637],{"class":7598},[36,70579,14819],{"class":42},[36,70581,70582,70584,70586],{"class":38,"line":34985},[36,70583,60592],{"class":42},[36,70585,69357],{"class":79},[36,70587,69360],{"class":42},[36,70589,70590],{"class":38,"line":34991},[36,70591,70592],{"class":2621},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,70594,70595,70597,70599,70601,70604],{"class":38,"line":34997},[36,70596,56828],{"class":46},[36,70598,69381],{"class":42},[36,70600,56834],{"class":46},[36,70602,70603],{"class":50}," 'A'",[36,70605,14819],{"class":42},[36,70607,70608,70610,70612,70614,70617,70619,70621,70623,70625],{"class":38,"line":35003},[36,70609,54273],{"class":42},[36,70611,56747],{"class":79},[36,70613,92],{"class":42},[36,70615,70616],{"class":50},"'.active'",[36,70618,59351],{"class":42},[36,70620,59354],{"class":79},[36,70622,92],{"class":42},[36,70624,67061],{"class":50},[36,70626,123],{"class":42},[36,70628,70629,70632,70634,70636,70638],{"class":38,"line":35009},[36,70630,70631],{"class":42},"        e.target.classList.",[36,70633,7716],{"class":79},[36,70635,92],{"class":42},[36,70637,67061],{"class":50},[36,70639,123],{"class":42},[36,70641,70642],{"class":38,"line":35020},[36,70643,70],{"emptyLinePlaceholder":69},[36,70645,70646],{"class":38,"line":35026},[36,70647,70648],{"class":2621},"        \u002F\u002F 下面大盒子模块\n",[36,70650,70651],{"class":38,"line":35046},[36,70652,70653],{"class":2621},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,70655,70656,70658,70660,70662,70664],{"class":38,"line":35052},[36,70657,63618],{"class":46},[36,70659,5417],{"class":62},[36,70661,15941],{"class":46},[36,70663,47915],{"class":46},[36,70665,70666],{"class":42},"e.target.dataset.id\n",[36,70668,70669,70671,70673,70675,70677,70679,70681,70683,70685],{"class":38,"line":35063},[36,70670,54273],{"class":42},[36,70672,56747],{"class":79},[36,70674,92],{"class":42},[36,70676,67109],{"class":50},[36,70678,59351],{"class":42},[36,70680,59354],{"class":79},[36,70682,92],{"class":42},[36,70684,67061],{"class":50},[36,70686,123],{"class":42},[36,70688,70689,70691,70693,70695,70697,70699,70701,70703,70705,70707,70709,70711,70713],{"class":38,"line":35069},[36,70690,54273],{"class":42},[36,70692,56747],{"class":79},[36,70694,92],{"class":42},[36,70696,67135],{"class":50},[36,70698,2997],{"class":42},[36,70700,47915],{"class":46},[36,70702,27489],{"class":62},[36,70704,59380],{"class":50},[36,70706,59351],{"class":42},[36,70708,7716],{"class":79},[36,70710,92],{"class":42},[36,70712,67061],{"class":50},[36,70714,123],{"class":42},[36,70716,70717],{"class":38,"line":35075},[36,70718,70],{"emptyLinePlaceholder":69},[36,70720,70721],{"class":38,"line":35081},[36,70722,54746],{"class":42},[36,70724,70725],{"class":38,"line":35087},[36,70726,35813],{"class":42},[36,70728,70729,70731,70733],{"class":38,"line":35093},[36,70730,54765],{"class":42},[36,70732,54161],{"class":53649},[36,70734,53656],{"class":42},[36,70736,70737,70739,70741],{"class":38,"line":35099},[36,70738,54133],{"class":42},[36,70740,54148],{"class":53649},[36,70742,53656],{"class":42},[36,70744,70745],{"class":38,"line":35105},[36,70746,70],{"emptyLinePlaceholder":69},[36,70748,70749,70751,70753],{"class":38,"line":35125},[36,70750,54133],{"class":42},[36,70752,52984],{"class":53649},[36,70754,53656],{"class":42},[1752,70756,70758],{"id":70757},"_333-页面加载事件","3.3.3 页面加载事件",[650,70760,70761],{},[653,70762,70763],{},"load",[19,70765,70766],{},[3879,70767],{"alt":31,"src":70768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70770,70771],{},"window代表整个窗口，比document还要大",[19,70773,70774],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70776,70777],{},"img.addEventListener('load', function () {",[19,70779,70780],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70782,54812],{},[650,70784,70785],{"start":54},[653,70786,70787],{},"DOMContentLoaded",[19,70789,70790],{},[3879,70791],{"alt":31,"src":70792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70794,70795],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1752,70797,70799],{"id":70798},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70801,70802],{},[3879,70803],{"alt":31,"src":70804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70806,70807],{},[3879,70808],{"alt":31,"src":70809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70811,70812],{},[3879,70813],{"alt":31,"src":70814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70816,70817],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70819,70820],{},"获得的是数字型数据，不带单位",[19,70822,70823],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70825,70826],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70828,70829],{},"它是通过document.documentElement来获取",[19,70831,70832],{},[3879,70833],{"alt":31,"src":70834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70836,70837],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1752,70839,70841],{"id":70840},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70843,70844],{},[3879,70845],{"alt":31,"src":70846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70848,70849],{},[3879,70850],{"alt":31,"src":70851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1752,70853,70855],{"id":70854},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70857,70858],{},[3879,70859],{"alt":31,"src":70860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70862,70863],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70865,70866],{},[3879,70867],{"alt":31,"src":70868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70870,70871],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70873,70874],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70876,70877],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70879,70880],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70882,70883],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70885,70886],{},[3879,70887],{"alt":31,"src":70888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70890,70891],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70893,70894],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70896,70897],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70899,70900],{},"e.pageX-box.getBoundingClientRect()",[1752,70902,70904],{"id":70903},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70906,70907],{},[3879,70908],{"alt":31,"src":70909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70911,70912],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1752,70914,70916],{"id":70915},"_338-总结","3.3.8 总结",[19,70918,70919],{},[3879,70920],{"alt":31,"src":70921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70923,70924],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70926,70927],{},"修改盒子的宽高只能通过width和height来实现",[1752,70929,70931],{"id":70930},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,70933,70935],{"className":52982,"code":70934,"language":52984,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,70936,70937,70942,70947,70952,70957],{"__ignoreMap":31},[36,70938,70939],{"class":38,"line":39},[36,70940,70941],{"class":42},"\u002F* 页面滑动 *\u002F\n",[36,70943,70944],{"class":38,"line":54},[36,70945,70946],{"class":42},"html {\n",[36,70948,70949],{"class":38,"line":66},[36,70950,70951],{"class":42},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,70953,70954],{"class":38,"line":73},[36,70955,70956],{"class":42},"  scroll-behavior: smooth;\n",[36,70958,70959],{"class":38,"line":86},[36,70960,3982],{"class":42},[19,70962,70963],{},"默认是auto",[1752,70965,70967],{"id":70966},"_3310-日期对象","3.3.10 日期对象",[24368,70969,70971],{"id":70970},"_33101-实例化","3.3.10.1 实例化",[19,70973,70974],{},[3879,70975],{"alt":31,"src":70976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24368,70978,70980],{"id":70979},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70982,70983],{},[3879,70984],{"alt":31,"src":70985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70987,70988],{},"月份+1",[19,70990,70991],{},"老外认为第一天为0，星期天",[19,70993,70994],{},"方法使用的时候必须要跟括号",[19,70996,70997],{},"快速获得日期",[19,70999,71000],{},"\u002F\u002F 得到年月日",[19,71002,71003],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71005,71006],{},"\u002F\u002F 得到当地日期",[19,71008,71009],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71011,71012],{},"\u002F\u002F 得到当地时间",[19,71014,71015],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71017,71018],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71020,71021],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54161,71023,71024],{},"\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,71026,71027],{},"学会去封装函数！",[24368,71029,71031],{"id":71030},"_33103-时间戳","3.3.10.3 时间戳",[19,71033,71034],{},[3879,71035],{"alt":31,"src":71036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71038,71039],{},[3879,71040],{"alt":31,"src":71041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71043,71044],{},"三种方法记住一个就可以",[1752,71046,71048],{"id":71047},"_3311-节点操作","3.3.11 节点操作",[24368,71050,71052],{"id":71051},"_33111-dom节点","3.3.11.1 DOM节点",[19,71054,71055],{},[3879,71056],{"alt":31,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,71059,71060],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24368,71062,71064],{"id":71063},"_33112-查找节点","3.3.11.2 查找节点",[19,71066,71067],{},"前边的document.querySelector()是获取的元素",[19,71069,71070],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,71072,71073],{},[3879,71074],{"alt":31,"src":71075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[650,71077,71078],{},[653,71079,71080],{},"父节点",[19,71082,71083],{},[3879,71084],{"alt":31,"src":71085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[650,71087,71088],{"start":54},[653,71089,71090],{},"子节点",[19,71092,71093],{},[3879,71094],{"alt":31,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,71097,71098],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,71100,71101],{},"children获得的是伪数组，是亲儿子",[650,71103,71104],{"start":66},[653,71105,71106],{},"兄弟节点",[19,71108,71109],{},[3879,71110],{"alt":31,"src":71111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24368,71113,71115],{"id":71114},"_33113-增加节点","3.3.11.3 增加节点",[19,71117,71118],{},[3879,71119],{"alt":31,"src":71120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71122,71123],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71125,71126],{},[3879,71127],{"alt":31,"src":71128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71130,71131],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71133,71134],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71136,71137],{},"例：",[54161,71139,71140],{},"\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,71142,71143],{},[3879,71144],{"alt":31,"src":71145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71147,71148],{},"false只克隆标签，里边的内容不会克隆过来",[26,71150,71152],{"className":52982,"code":71151,"language":52984,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,71153,71154],{"__ignoreMap":31},[36,71155,71156],{"class":38,"line":39},[36,71157,71151],{"class":42},[24368,71159,71161],{"id":71160},"_33114-删除节点","3.3.11.4 删除节点",[19,71163,71164],{},[3879,71165],{"alt":31,"src":71166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71168,71169],{},"父亲删儿子",[19,71171,71172],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1752,71174,71176],{"id":71175},"_3312-m端事件","3.3.12 M端事件",[19,71178,71179],{},"M端就是移动端",[19,71181,71182],{},[3879,71183],{"alt":31,"src":71184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1752,71186,71188],{"id":71187},"_3313-插件","3.3.13 插件",[19,71190,71191],{},"要熟悉官网！！！",[19,71193,71194],{},[2796,71195,71196],{"href":71196,"rel":71197},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26235],[19,71199,71200],{},[2796,71201,71202],{"href":71202,"rel":71203},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26235],[1752,71205,71207],{"id":71206},"_3314-学生信息表","3.3.14 学生信息表",[650,71209,71210,71213,71216,71219,71222,71225,71228,71231],{},[653,71211,71212],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[653,71214,71215],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[653,71217,71218],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[653,71220,71221],{},"用好表单元素自带的属性，value,name等",[653,71223,71224],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[653,71226,71227],{},"不要忘记事件对象",[653,71229,71230],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[653,71232,71233],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71235,71236],{},"结构：",[26,71238,71240],{"className":52982,"code":71239,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,71241,71242,71252,71266,71270,71278,71292,71312,71333,71346,71370,71378,71382,71390,71403,71424,71452,71479,71484,71506,71526,71545,71553,71581,71603,71623,71643,71663,71683,71703,71711,71731,71739,71743,71756,71764,71772,71780,71793,71806,71819,71832,71845,71858,71871,71879,71887,71895,71900,71905,71910,71915,71920,71925,71930,71935,71940,71945,71950,71955,71960,71968,71976,71984,71988,72008,72027,72047,72067,72087,72107,72111,72116,72136,72141,72151,72156,72161,72181,72203,72208,72218,72222,72226,72231,72236,72265,72279,72294,72298,72302,72306,72311,72322,72335,72340,72345,72350,72355,72360,72364,72369,72374,72383,72388,72393,72405,72410,72417,72421,72426,72436,72441,72451,72456,72484,72505,72515,72535,72553,72569,72586,72603,72620,72624,72634,72639,72644,72649,72660,72664,72668,72672,72677,72682,72703,72715,72720,72725,72730,72744,72749,72756,72760,72764,72772,72776,72784,72788],{"__ignoreMap":31},[36,71243,71244,71246,71248,71250],{"class":38,"line":39},[36,71245,53646],{"class":42},[36,71247,53650],{"class":53649},[36,71249,53653],{"class":79},[36,71251,53656],{"class":42},[36,71253,71254,71256,71258,71260,71262,71264],{"class":38,"line":54},[36,71255,3463],{"class":42},[36,71257,52984],{"class":53649},[36,71259,53665],{"class":79},[36,71261,47],{"class":42},[36,71263,53670],{"class":50},[36,71265,53656],{"class":42},[36,71267,71268],{"class":38,"line":66},[36,71269,70],{"emptyLinePlaceholder":69},[36,71271,71272,71274,71276],{"class":38,"line":73},[36,71273,3463],{"class":42},[36,71275,53683],{"class":53649},[36,71277,53656],{"class":42},[36,71279,71280,71282,71284,71286,71288,71290],{"class":38,"line":86},[36,71281,54492],{"class":42},[36,71283,53693],{"class":53649},[36,71285,53696],{"class":79},[36,71287,47],{"class":42},[36,71289,53701],{"class":50},[36,71291,61475],{"class":42},[36,71293,71294,71296,71298,71300,71302,71304,71306,71308,71310],{"class":38,"line":126},[36,71295,54492],{"class":42},[36,71297,53693],{"class":53649},[36,71299,17295],{"class":79},[36,71301,47],{"class":42},[36,71303,53740],{"class":50},[36,71305,53720],{"class":79},[36,71307,47],{"class":42},[36,71309,53747],{"class":50},[36,71311,61475],{"class":42},[36,71313,71314,71316,71318,71320,71322,71324,71326,71328,71331],{"class":38,"line":131},[36,71315,54492],{"class":42},[36,71317,53693],{"class":53649},[36,71319,53712],{"class":79},[36,71321,47],{"class":42},[36,71323,53717],{"class":50},[36,71325,53720],{"class":79},[36,71327,47],{"class":42},[36,71329,71330],{"class":50},"\"ie=edge\"",[36,71332,61475],{"class":42},[36,71334,71335,71337,71339,71342,71344],{"class":38,"line":225},[36,71336,54492],{"class":42},[36,71338,53756],{"class":53649},[36,71340,71341],{"class":42},">学生信息管理\u003C\u002F",[36,71343,53756],{"class":53649},[36,71345,53656],{"class":42},[36,71347,71348,71350,71353,71356,71358,71361,71363,71365,71368],{"class":38,"line":235},[36,71349,54492],{"class":42},[36,71351,71352],{"class":53649},"link",[36,71354,71355],{"class":79}," rel",[36,71357,47],{"class":42},[36,71359,71360],{"class":50},"\"stylesheet\"",[36,71362,63405],{"class":79},[36,71364,47],{"class":42},[36,71366,71367],{"class":50},"\"css\u002Findex.css\"",[36,71369,61475],{"class":42},[36,71371,71372,71374,71376],{"class":38,"line":377},[36,71373,54133],{"class":42},[36,71375,53683],{"class":53649},[36,71377,53656],{"class":42},[36,71379,71380],{"class":38,"line":617},[36,71381,70],{"emptyLinePlaceholder":69},[36,71383,71384,71386,71388],{"class":38,"line":643},[36,71385,3463],{"class":42},[36,71387,54148],{"class":53649},[36,71389,53656],{"class":42},[36,71391,71392,71394,71396,71399,71401],{"class":38,"line":921},[36,71393,54492],{"class":42},[36,71395,10],{"class":53649},[36,71397,71398],{"class":42},">新增学员\u003C\u002F",[36,71400,10],{"class":53649},[36,71402,53656],{"class":42},[36,71404,71405,71407,71409,71411,71413,71415,71418,71420,71422],{"class":38,"line":934},[36,71406,54492],{"class":42},[36,71408,68972],{"class":53649},[36,71410,55834],{"class":79},[36,71412,47],{"class":42},[36,71414,65012],{"class":50},[36,71416,71417],{"class":79}," autocomplete",[36,71419,47],{"class":42},[36,71421,34130],{"class":50},[36,71423,53656],{"class":42},[36,71425,71426,71429,71431,71433,71435,71437,71439,71441,71444,71446,71448,71450],{"class":38,"line":939},[36,71427,71428],{"class":42},"    姓名：\u003C",[36,71430,56169],{"class":53649},[36,71432,56172],{"class":79},[36,71434,47],{"class":42},[36,71436,65046],{"class":50},[36,71438,55834],{"class":79},[36,71440,47],{"class":42},[36,71442,71443],{"class":50},"\"uname\"",[36,71445,17295],{"class":79},[36,71447,47],{"class":42},[36,71449,71443],{"class":50},[36,71451,61475],{"class":42},[36,71453,71454,71457,71459,71461,71463,71465,71467,71469,71471,71473,71475,71477],{"class":38,"line":949},[36,71455,71456],{"class":42},"    年龄：\u003C",[36,71458,56169],{"class":53649},[36,71460,56172],{"class":79},[36,71462,47],{"class":42},[36,71464,65046],{"class":50},[36,71466,55834],{"class":79},[36,71468,47],{"class":42},[36,71470,2260],{"class":50},[36,71472,17295],{"class":79},[36,71474,47],{"class":42},[36,71476,2260],{"class":50},[36,71478,61475],{"class":42},[36,71480,71481],{"class":38,"line":962},[36,71482,71483],{"class":42},"    性别:\n",[36,71485,71486,71488,71491,71493,71495,71498,71500,71502,71504],{"class":38,"line":974},[36,71487,53690],{"class":42},[36,71489,71490],{"class":53649},"select",[36,71492,17295],{"class":79},[36,71494,47],{"class":42},[36,71496,71497],{"class":50},"\"gender\"",[36,71499,55834],{"class":79},[36,71501,47],{"class":42},[36,71503,71497],{"class":50},[36,71505,53656],{"class":42},[36,71507,71508,71510,71513,71515,71517,71519,71522,71524],{"class":38,"line":979},[36,71509,57582],{"class":42},[36,71511,71512],{"class":53649},"option",[36,71514,68998],{"class":79},[36,71516,47],{"class":42},[36,71518,12340],{"class":50},[36,71520,71521],{"class":42},">男\u003C\u002F",[36,71523,71512],{"class":53649},[36,71525,53656],{"class":42},[36,71527,71528,71530,71532,71534,71536,71538,71541,71543],{"class":38,"line":994},[36,71529,57582],{"class":42},[36,71531,71512],{"class":53649},[36,71533,68998],{"class":79},[36,71535,47],{"class":42},[36,71537,12409],{"class":50},[36,71539,71540],{"class":42},">女\u003C\u002F",[36,71542,71512],{"class":53649},[36,71544,53656],{"class":42},[36,71546,71547,71549,71551],{"class":38,"line":1006},[36,71548,54124],{"class":42},[36,71550,71490],{"class":53649},[36,71552,53656],{"class":42},[36,71554,71555,71558,71560,71562,71564,71566,71568,71570,71573,71575,71577,71579],{"class":38,"line":1011},[36,71556,71557],{"class":42},"    薪资：\u003C",[36,71559,56169],{"class":53649},[36,71561,56172],{"class":79},[36,71563,47],{"class":42},[36,71565,65046],{"class":50},[36,71567,55834],{"class":79},[36,71569,47],{"class":42},[36,71571,71572],{"class":50},"\"salary\"",[36,71574,17295],{"class":79},[36,71576,47],{"class":42},[36,71578,71572],{"class":50},[36,71580,61475],{"class":42},[36,71582,71583,71586,71588,71590,71592,71595,71597,71599,71601],{"class":38,"line":1023},[36,71584,71585],{"class":42},"    就业城市：\u003C",[36,71587,71490],{"class":53649},[36,71589,17295],{"class":79},[36,71591,47],{"class":42},[36,71593,71594],{"class":50},"\"city\"",[36,71596,55834],{"class":79},[36,71598,47],{"class":42},[36,71600,71594],{"class":50},[36,71602,53656],{"class":42},[36,71604,71605,71607,71609,71611,71613,71616,71619,71621],{"class":38,"line":1028},[36,71606,57582],{"class":42},[36,71608,71512],{"class":53649},[36,71610,68998],{"class":79},[36,71612,47],{"class":42},[36,71614,71615],{"class":50},"\"北京\"",[36,71617,71618],{"class":42},">北京\u003C\u002F",[36,71620,71512],{"class":53649},[36,71622,53656],{"class":42},[36,71624,71625,71627,71629,71631,71633,71636,71639,71641],{"class":38,"line":1033},[36,71626,57582],{"class":42},[36,71628,71512],{"class":53649},[36,71630,68998],{"class":79},[36,71632,47],{"class":42},[36,71634,71635],{"class":50},"\"上海\"",[36,71637,71638],{"class":42},">上海\u003C\u002F",[36,71640,71512],{"class":53649},[36,71642,53656],{"class":42},[36,71644,71645,71647,71649,71651,71653,71656,71659,71661],{"class":38,"line":1053},[36,71646,57582],{"class":42},[36,71648,71512],{"class":53649},[36,71650,68998],{"class":79},[36,71652,47],{"class":42},[36,71654,71655],{"class":50},"\"广州\"",[36,71657,71658],{"class":42},">广州\u003C\u002F",[36,71660,71512],{"class":53649},[36,71662,53656],{"class":42},[36,71664,71665,71667,71669,71671,71673,71676,71679,71681],{"class":38,"line":1064},[36,71666,57582],{"class":42},[36,71668,71512],{"class":53649},[36,71670,68998],{"class":79},[36,71672,47],{"class":42},[36,71674,71675],{"class":50},"\"深圳\"",[36,71677,71678],{"class":42},">深圳\u003C\u002F",[36,71680,71512],{"class":53649},[36,71682,53656],{"class":42},[36,71684,71685,71687,71689,71691,71693,71696,71699,71701],{"class":38,"line":1075},[36,71686,57582],{"class":42},[36,71688,71512],{"class":53649},[36,71690,68998],{"class":79},[36,71692,47],{"class":42},[36,71694,71695],{"class":50},"\"曹县\"",[36,71697,71698],{"class":42},">曹县\u003C\u002F",[36,71700,71512],{"class":53649},[36,71702,53656],{"class":42},[36,71704,71705,71707,71709],{"class":38,"line":2291},[36,71706,54124],{"class":42},[36,71708,71490],{"class":53649},[36,71710,53656],{"class":42},[36,71712,71713,71715,71717,71719,71721,71724,71727,71729],{"class":38,"line":2329},[36,71714,53690],{"class":42},[36,71716,56235],{"class":53649},[36,71718,55834],{"class":79},[36,71720,47],{"class":42},[36,71722,71723],{"class":50},"\"add\"",[36,71725,71726],{"class":42},">录入\u003C\u002F",[36,71728,56235],{"class":53649},[36,71730,53656],{"class":42},[36,71732,71733,71735,71737],{"class":38,"line":2334},[36,71734,54765],{"class":42},[36,71736,68972],{"class":53649},[36,71738,53656],{"class":42},[36,71740,71741],{"class":38,"line":2339},[36,71742,70],{"emptyLinePlaceholder":69},[36,71744,71745,71747,71749,71752,71754],{"class":38,"line":2365},[36,71746,54492],{"class":42},[36,71748,10],{"class":53649},[36,71750,71751],{"class":42},">就业榜\u003C\u002F",[36,71753,10],{"class":53649},[36,71755,53656],{"class":42},[36,71757,71758,71760,71762],{"class":38,"line":2373},[36,71759,54492],{"class":42},[36,71761,2698],{"class":53649},[36,71763,53656],{"class":42},[36,71765,71766,71768,71770],{"class":38,"line":5001},[36,71767,53690],{"class":42},[36,71769,2701],{"class":53649},[36,71771,53656],{"class":42},[36,71773,71774,71776,71778],{"class":38,"line":5006},[36,71775,57582],{"class":42},[36,71777,2704],{"class":53649},[36,71779,53656],{"class":42},[36,71781,71782,71784,71786,71789,71791],{"class":38,"line":10328},[36,71783,57650],{"class":42},[36,71785,2707],{"class":53649},[36,71787,71788],{"class":42},">序号\u003C\u002F",[36,71790,2707],{"class":53649},[36,71792,53656],{"class":42},[36,71794,71795,71797,71799,71802,71804],{"class":38,"line":10352},[36,71796,57650],{"class":42},[36,71798,2707],{"class":53649},[36,71800,71801],{"class":42},">姓名\u003C\u002F",[36,71803,2707],{"class":53649},[36,71805,53656],{"class":42},[36,71807,71808,71810,71812,71815,71817],{"class":38,"line":10357},[36,71809,57650],{"class":42},[36,71811,2707],{"class":53649},[36,71813,71814],{"class":42},">年龄\u003C\u002F",[36,71816,2707],{"class":53649},[36,71818,53656],{"class":42},[36,71820,71821,71823,71825,71828,71830],{"class":38,"line":10363},[36,71822,57650],{"class":42},[36,71824,2707],{"class":53649},[36,71826,71827],{"class":42},">性别\u003C\u002F",[36,71829,2707],{"class":53649},[36,71831,53656],{"class":42},[36,71833,71834,71836,71838,71841,71843],{"class":38,"line":10390},[36,71835,57650],{"class":42},[36,71837,2707],{"class":53649},[36,71839,71840],{"class":42},">薪资\u003C\u002F",[36,71842,2707],{"class":53649},[36,71844,53656],{"class":42},[36,71846,71847,71849,71851,71854,71856],{"class":38,"line":10395},[36,71848,57650],{"class":42},[36,71850,2707],{"class":53649},[36,71852,71853],{"class":42},">就业城市\u003C\u002F",[36,71855,2707],{"class":53649},[36,71857,53656],{"class":42},[36,71859,71860,71862,71864,71867,71869],{"class":38,"line":10401},[36,71861,57650],{"class":42},[36,71863,2707],{"class":53649},[36,71865,71866],{"class":42},">操作\u003C\u002F",[36,71868,2707],{"class":53649},[36,71870,53656],{"class":42},[36,71872,71873,71875,71877],{"class":38,"line":10413},[36,71874,57755],{"class":42},[36,71876,2704],{"class":53649},[36,71878,53656],{"class":42},[36,71880,71881,71883,71885],{"class":38,"line":10425},[36,71882,54124],{"class":42},[36,71884,2701],{"class":53649},[36,71886,53656],{"class":42},[36,71888,71889,71891,71893],{"class":38,"line":10437},[36,71890,53690],{"class":42},[36,71892,2744],{"class":53649},[36,71894,53656],{"class":42},[36,71896,71897],{"class":38,"line":12095},[36,71898,71899],{"class":2621},"      \u003C!-- \n",[36,71901,71902],{"class":38,"line":12120},[36,71903,71904],{"class":2621},"        \u003Ctr>\n",[36,71906,71907],{"class":38,"line":12143},[36,71908,71909],{"class":2621},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,71911,71912],{"class":38,"line":12167},[36,71913,71914],{"class":2621},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,71916,71917],{"class":38,"line":12172},[36,71918,71919],{"class":2621},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,71921,71922],{"class":38,"line":12177},[36,71923,71924],{"class":2621},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,71926,71927],{"class":38,"line":12182},[36,71928,71929],{"class":2621},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,71931,71932],{"class":38,"line":12191},[36,71933,71934],{"class":2621},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,71936,71937],{"class":38,"line":12196},[36,71938,71939],{"class":2621},"          \u003Ctd>\n",[36,71941,71942],{"class":38,"line":12202},[36,71943,71944],{"class":2621},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,71946,71947],{"class":38,"line":12223},[36,71948,71949],{"class":2621},"          \u003C\u002Ftd>\n",[36,71951,71952],{"class":38,"line":12229},[36,71953,71954],{"class":2621},"        \u003C\u002Ftr> \n",[36,71956,71957],{"class":38,"line":12243},[36,71958,71959],{"class":2621},"        -->\n",[36,71961,71962,71964,71966],{"class":38,"line":12249},[36,71963,54124],{"class":42},[36,71965,2744],{"class":53649},[36,71967,53656],{"class":42},[36,71969,71970,71972,71974],{"class":38,"line":12276},[36,71971,54765],{"class":42},[36,71973,2698],{"class":53649},[36,71975,53656],{"class":42},[36,71977,71978,71980,71982],{"class":38,"line":12285},[36,71979,54492],{"class":42},[36,71981,54161],{"class":53649},[36,71983,53656],{"class":42},[36,71985,71986],{"class":38,"line":12291},[36,71987,62306],{"class":2621},[36,71989,71990,71992,71995,71997,71999,72001,72003,72006],{"class":38,"line":12299},[36,71991,13599],{"class":46},[36,71993,71994],{"class":62}," uname",[36,71996,15941],{"class":46},[36,71998,56744],{"class":42},[36,72000,56747],{"class":79},[36,72002,92],{"class":42},[36,72004,72005],{"class":50},"'.uname'",[36,72007,123],{"class":42},[36,72009,72010,72012,72014,72016,72018,72020,72022,72025],{"class":38,"line":12304},[36,72011,13599],{"class":46},[36,72013,18062],{"class":62},[36,72015,15941],{"class":46},[36,72017,56744],{"class":42},[36,72019,56747],{"class":79},[36,72021,92],{"class":42},[36,72023,72024],{"class":50},"'.age'",[36,72026,123],{"class":42},[36,72028,72029,72031,72034,72036,72038,72040,72042,72045],{"class":38,"line":18977},[36,72030,13599],{"class":46},[36,72032,72033],{"class":62}," gender",[36,72035,15941],{"class":46},[36,72037,56744],{"class":42},[36,72039,56747],{"class":79},[36,72041,92],{"class":42},[36,72043,72044],{"class":50},"'.gender'",[36,72046,123],{"class":42},[36,72048,72049,72051,72054,72056,72058,72060,72062,72065],{"class":38,"line":18983},[36,72050,13599],{"class":46},[36,72052,72053],{"class":62}," salary",[36,72055,15941],{"class":46},[36,72057,56744],{"class":42},[36,72059,56747],{"class":79},[36,72061,92],{"class":42},[36,72063,72064],{"class":50},"'.salary'",[36,72066,123],{"class":42},[36,72068,72069,72071,72074,72076,72078,72080,72082,72085],{"class":38,"line":19006},[36,72070,13599],{"class":46},[36,72072,72073],{"class":62}," city",[36,72075,15941],{"class":46},[36,72077,56744],{"class":42},[36,72079,56747],{"class":79},[36,72081,92],{"class":42},[36,72083,72084],{"class":50},"'.city'",[36,72086,123],{"class":42},[36,72088,72089,72091,72094,72096,72098,72100,72102,72105],{"class":38,"line":19012},[36,72090,13599],{"class":46},[36,72092,72093],{"class":62}," tbody",[36,72095,15941],{"class":46},[36,72097,56744],{"class":42},[36,72099,56747],{"class":79},[36,72101,92],{"class":42},[36,72103,72104],{"class":50},"'tbody'",[36,72106,123],{"class":42},[36,72108,72109],{"class":38,"line":19035},[36,72110,70],{"emptyLinePlaceholder":69},[36,72112,72113],{"class":38,"line":19049},[36,72114,72115],{"class":2621},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,72117,72118,72120,72123,72125,72127,72129,72131,72134],{"class":38,"line":19069},[36,72119,13599],{"class":46},[36,72121,72122],{"class":62}," items",[36,72124,15941],{"class":46},[36,72126,56744],{"class":42},[36,72128,58029],{"class":79},[36,72130,92],{"class":42},[36,72132,72133],{"class":50},"'[name]'",[36,72135,123],{"class":42},[36,72137,72138],{"class":38,"line":19075},[36,72139,72140],{"class":2621},"    \u002F\u002F 声明一个空的数组\n",[36,72142,72143,72145,72147,72149],{"class":38,"line":19086},[36,72144,13599],{"class":46},[36,72146,60043],{"class":62},[36,72148,15941],{"class":46},[36,72150,54186],{"class":42},[36,72152,72153],{"class":38,"line":19109},[36,72154,72155],{"class":2621},"    \u002F\u002F 1.录入模块\n",[36,72157,72158],{"class":38,"line":19131},[36,72159,72160],{"class":2621},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,72162,72163,72165,72168,72170,72172,72174,72176,72179],{"class":38,"line":19136},[36,72164,13599],{"class":46},[36,72166,72167],{"class":62}," info",[36,72169,15941],{"class":46},[36,72171,56744],{"class":42},[36,72173,56747],{"class":79},[36,72175,92],{"class":42},[36,72177,72178],{"class":50},"'.info'",[36,72180,123],{"class":42},[36,72182,72183,72186,72188,72190,72193,72195,72197,72199,72201],{"class":38,"line":19142},[36,72184,72185],{"class":42},"    info.",[36,72187,60161],{"class":79},[36,72189,92],{"class":42},[36,72191,72192],{"class":50},"'submit'",[36,72194,630],{"class":42},[36,72196,56797],{"class":46},[36,72198,4066],{"class":42},[36,72200,2637],{"class":7598},[36,72202,14819],{"class":42},[36,72204,72205],{"class":38,"line":19156},[36,72206,72207],{"class":2621},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,72209,72210,72213,72216],{"class":38,"line":19169},[36,72211,72212],{"class":42},"      e.",[36,72214,72215],{"class":79},"preventDefault",[36,72217,4369],{"class":42},[36,72219,72220],{"class":38,"line":19174},[36,72221,62360],{"class":2621},[36,72223,72224],{"class":38,"line":19188},[36,72225,70],{"emptyLinePlaceholder":69},[36,72227,72228],{"class":38,"line":19193},[36,72229,72230],{"class":2621},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,72232,72233],{"class":38,"line":19199},[36,72234,72235],{"class":2621},"      \u002F\u002F 先遍历循环\n",[36,72237,72238,72240,72242,72244,72246,72248,72250,72252,72254,72257,72259,72261,72263],{"class":38,"line":19204},[36,72239,54632],{"class":46},[36,72241,4066],{"class":42},[36,72243,54195],{"class":46},[36,72245,11818],{"class":42},[36,72247,47],{"class":46},[36,72249,899],{"class":62},[36,72251,11825],{"class":42},[36,72253,3463],{"class":46},[36,72255,72256],{"class":42}," items.",[36,72258,54316],{"class":62},[36,72260,5599],{"class":42},[36,72262,4685],{"class":46},[36,72264,14819],{"class":42},[36,72266,72267,72269,72272,72274,72277],{"class":38,"line":19218},[36,72268,890],{"class":46},[36,72270,72271],{"class":42}," (items[i].value ",[36,72273,56834],{"class":46},[36,72275,72276],{"class":50}," ''",[36,72278,14819],{"class":42},[36,72280,72281,72284,72287,72289,72292],{"class":38,"line":19223},[36,72282,72283],{"class":46},"          return",[36,72285,72286],{"class":79}," alert",[36,72288,92],{"class":42},[36,72290,72291],{"class":50},"'输入内容不能为空'",[36,72293,123],{"class":42},[36,72295,72296],{"class":38,"line":19228},[36,72297,2204],{"class":42},[36,72299,72300],{"class":38,"line":19242},[36,72301,54746],{"class":42},[36,72303,72304],{"class":38,"line":19254},[36,72305,70],{"emptyLinePlaceholder":69},[36,72307,72308],{"class":38,"line":19259},[36,72309,72310],{"class":2621},"      \u002F\u002F 创建新的对象\n",[36,72312,72313,72315,72318,72320],{"class":38,"line":19272},[36,72314,60576],{"class":46},[36,72316,72317],{"class":62}," obj",[36,72319,15941],{"class":46},[36,72321,2150],{"class":42},[36,72323,72324,72327,72329,72331,72333],{"class":38,"line":19277},[36,72325,72326],{"class":42},"        stuID: arr.",[36,72328,54316],{"class":62},[36,72330,47915],{"class":46},[36,72332,27489],{"class":62},[36,72334,33820],{"class":42},[36,72336,72337],{"class":38,"line":19282},[36,72338,72339],{"class":42},"        uname: uname.value,\n",[36,72341,72342],{"class":38,"line":19287},[36,72343,72344],{"class":42},"        age: age.value,\n",[36,72346,72347],{"class":38,"line":19300},[36,72348,72349],{"class":42},"        gender: gender.value,\n",[36,72351,72352],{"class":38,"line":19305},[36,72353,72354],{"class":42},"        salary: salary.value,\n",[36,72356,72357],{"class":38,"line":34985},[36,72358,72359],{"class":42},"        city: city.value\n",[36,72361,72362],{"class":38,"line":34991},[36,72363,54746],{"class":42},[36,72365,72366],{"class":38,"line":34997},[36,72367,72368],{"class":2621},"      \u002F\u002F console.log(obj);\n",[36,72370,72371],{"class":38,"line":35003},[36,72372,72373],{"class":2621},"      \u002F\u002F 追加到数组里面\n",[36,72375,72376,72378,72380],{"class":38,"line":35009},[36,72377,60355],{"class":42},[36,72379,54232],{"class":79},[36,72381,72382],{"class":42},"(obj)\n",[36,72384,72385],{"class":38,"line":35020},[36,72386,72387],{"class":2621},"      \u002F\u002F console.log(arr);\n",[36,72389,72390],{"class":38,"line":35026},[36,72391,72392],{"class":2621},"      \u002F\u002F 清空表单  reset重置表单\n",[36,72394,72395,72398,72400,72403],{"class":38,"line":35046},[36,72396,72397],{"class":62},"      this",[36,72399,3113],{"class":42},[36,72401,72402],{"class":79},"reset",[36,72404,4369],{"class":42},[36,72406,72407],{"class":38,"line":35052},[36,72408,72409],{"class":2621},"      \u002F\u002F 调用渲染函数\n",[36,72411,72412,72415],{"class":38,"line":35063},[36,72413,72414],{"class":79},"      render",[36,72416,4369],{"class":42},[36,72418,72419],{"class":38,"line":35069},[36,72420,35813],{"class":42},[36,72422,72423],{"class":38,"line":35075},[36,72424,72425],{"class":2621},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,72427,72428,72431,72434],{"class":38,"line":35081},[36,72429,72430],{"class":46},"    function",[36,72432,72433],{"class":79}," render",[36,72435,13232],{"class":42},[36,72437,72438],{"class":38,"line":35087},[36,72439,72440],{"class":2621},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,72442,72443,72446,72448],{"class":38,"line":35093},[36,72444,72445],{"class":42},"      tbody.innerHTML ",[36,72447,47],{"class":46},[36,72449,72450],{"class":50}," ''\n",[36,72452,72453],{"class":38,"line":35099},[36,72454,72455],{"class":2621},"      \u002F\u002F 遍历数组\n",[36,72457,72458,72460,72462,72464,72466,72468,72470,72472,72474,72476,72478,72480,72482],{"class":38,"line":35105},[36,72459,54632],{"class":46},[36,72461,4066],{"class":42},[36,72463,54195],{"class":46},[36,72465,11818],{"class":42},[36,72467,47],{"class":46},[36,72469,899],{"class":62},[36,72471,11825],{"class":42},[36,72473,3463],{"class":46},[36,72475,54313],{"class":42},[36,72477,54316],{"class":62},[36,72479,5599],{"class":42},[36,72481,4685],{"class":46},[36,72483,14819],{"class":42},[36,72485,72486,72488,72491,72493,72495,72498,72500,72503],{"class":38,"line":35125},[36,72487,63618],{"class":46},[36,72489,72490],{"class":62}," tr",[36,72492,15941],{"class":46},[36,72494,56744],{"class":42},[36,72496,72497],{"class":79},"createElement",[36,72499,92],{"class":42},[36,72501,72502],{"class":50},"'tr'",[36,72504,123],{"class":42},[36,72506,72507,72510,72512],{"class":38,"line":35131},[36,72508,72509],{"class":42},"        tr.innerHTML ",[36,72511,47],{"class":46},[36,72513,72514],{"class":50}," `\n",[36,72516,72517,72520,72522,72524,72526,72529,72532],{"class":38,"line":35147},[36,72518,72519],{"class":50},"        \u003Ctd>${",[36,72521,6264],{"class":42},[36,72523,3444],{"class":50},[36,72525,2997],{"class":42},[36,72527,72528],{"class":50},"].",[36,72530,72531],{"class":42},"stuID",[36,72533,72534],{"class":50},"}\u003C\u002Ftd>\n",[36,72536,72537,72540,72542,72544,72546,72548,72551],{"class":38,"line":35153},[36,72538,72539],{"class":50},"          \u003Ctd>${",[36,72541,6264],{"class":42},[36,72543,3444],{"class":50},[36,72545,2997],{"class":42},[36,72547,72528],{"class":50},[36,72549,72550],{"class":42},"uname",[36,72552,72534],{"class":50},[36,72554,72555,72557,72559,72561,72563,72565,72567],{"class":38,"line":35167},[36,72556,72539],{"class":50},[36,72558,6264],{"class":42},[36,72560,3444],{"class":50},[36,72562,2997],{"class":42},[36,72564,72528],{"class":50},[36,72566,115],{"class":42},[36,72568,72534],{"class":50},[36,72570,72571,72573,72575,72577,72579,72581,72584],{"class":38,"line":35173},[36,72572,72539],{"class":50},[36,72574,6264],{"class":42},[36,72576,3444],{"class":50},[36,72578,2997],{"class":42},[36,72580,72528],{"class":50},[36,72582,72583],{"class":42},"gender",[36,72585,72534],{"class":50},[36,72587,72588,72590,72592,72594,72596,72598,72601],{"class":38,"line":35188},[36,72589,72539],{"class":50},[36,72591,6264],{"class":42},[36,72593,3444],{"class":50},[36,72595,2997],{"class":42},[36,72597,72528],{"class":50},[36,72599,72600],{"class":42},"salary",[36,72602,72534],{"class":50},[36,72604,72605,72607,72609,72611,72613,72615,72618],{"class":38,"line":35194},[36,72606,72539],{"class":50},[36,72608,6264],{"class":42},[36,72610,3444],{"class":50},[36,72612,2997],{"class":42},[36,72614,72528],{"class":50},[36,72616,72617],{"class":42},"city",[36,72619,72534],{"class":50},[36,72621,72622],{"class":38,"line":35203},[36,72623,71939],{"class":50},[36,72625,72626,72629,72631],{"class":38,"line":35209},[36,72627,72628],{"class":50},"            \u003Ca href=\"javascript:\" data-id=${",[36,72630,2997],{"class":42},[36,72632,72633],{"class":50},"}>删除\u003C\u002Fa>\n",[36,72635,72636],{"class":38,"line":35218},[36,72637,72638],{"class":50},"          \u003C\u002Ftd> \n",[36,72640,72641],{"class":38,"line":35224},[36,72642,72643],{"class":50},"          `\n",[36,72645,72646],{"class":38,"line":35230},[36,72647,72648],{"class":2621},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,72650,72651,72654,72657],{"class":38,"line":35239},[36,72652,72653],{"class":42},"        tbody.",[36,72655,72656],{"class":79},"appendChild",[36,72658,72659],{"class":42},"(tr)\n",[36,72661,72662],{"class":38,"line":35245},[36,72663,54746],{"class":42},[36,72665,72666],{"class":38,"line":35256},[36,72667,4580],{"class":42},[36,72669,72670],{"class":38,"line":35262},[36,72671,70],{"emptyLinePlaceholder":69},[36,72673,72674],{"class":38,"line":35281},[36,72675,72676],{"class":2621},"    \u002F\u002F 3.删除委托\n",[36,72678,72679],{"class":38,"line":35287},[36,72680,72681],{"class":2621},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,72683,72684,72687,72689,72691,72693,72695,72697,72699,72701],{"class":38,"line":35298},[36,72685,72686],{"class":42},"    tbody.",[36,72688,60161],{"class":79},[36,72690,92],{"class":42},[36,72692,60166],{"class":50},[36,72694,630],{"class":42},[36,72696,56797],{"class":46},[36,72698,4066],{"class":42},[36,72700,2637],{"class":7598},[36,72702,14819],{"class":42},[36,72704,72705,72707,72709,72711,72713],{"class":38,"line":35304},[36,72706,56828],{"class":46},[36,72708,69381],{"class":42},[36,72710,56834],{"class":46},[36,72712,70603],{"class":50},[36,72714,14819],{"class":42},[36,72716,72717],{"class":38,"line":35324},[36,72718,72719],{"class":2621},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,72721,72722],{"class":38,"line":35340},[36,72723,72724],{"class":2621},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,72726,72727],{"class":38,"line":35346},[36,72728,72729],{"class":2621},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,72731,72732,72735,72737,72740,72742],{"class":38,"line":35360},[36,72733,72734],{"class":42},"        arr.",[36,72736,60358],{"class":79},[36,72738,72739],{"class":42},"(e.target.dataset.id, ",[36,72741,1906],{"class":62},[36,72743,123],{"class":42},[36,72745,72746],{"class":38,"line":35366},[36,72747,72748],{"class":2621},"        \u002F\u002F 重新渲染一次\n",[36,72750,72751,72754],{"class":38,"line":35372},[36,72752,72753],{"class":79},"        render",[36,72755,4369],{"class":42},[36,72757,72758],{"class":38,"line":35383},[36,72759,54746],{"class":42},[36,72761,72762],{"class":38,"line":35389},[36,72763,35813],{"class":42},[36,72765,72766,72768,72770],{"class":38,"line":35395},[36,72767,54765],{"class":42},[36,72769,54161],{"class":53649},[36,72771,53656],{"class":42},[36,72773,72774],{"class":38,"line":35405},[36,72775,70],{"emptyLinePlaceholder":69},[36,72777,72778,72780,72782],{"class":38,"line":35411},[36,72779,54133],{"class":42},[36,72781,54148],{"class":53649},[36,72783,53656],{"class":42},[36,72785,72786],{"class":38,"line":35422},[36,72787,70],{"emptyLinePlaceholder":69},[36,72789,72790,72792,72794],{"class":38,"line":35428},[36,72791,54133],{"class":42},[36,72793,52984],{"class":53649},[36,72795,53656],{"class":42},[19,72797,72798],{},"样式：",[26,72800,72804],{"className":72801,"code":72802,"language":72803,"meta":31,"style":31},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[33,72805,72806,72811,72821,72830,72834,72838,72843,72853,72858,72862,72867,72877,72882,72891,72895,72899,72904,72909,72919,72929,72934,72938,72943,72952,72962,72967,72977,72987,72991,72996,73004,73008,73013,73018,73023,73031,73040,73044,73049,73058,73062,73067,73076,73080,73085,73094,73103,73111,73115,73120,73129,73139,73148,73158,73164,73173,73183,73193,73197,73202,73211,73219,73229,73237,73246,73255,73265,73273,73277,73282,73291],{"__ignoreMap":31},[36,72807,72808],{"class":38,"line":39},[36,72809,72810],{"class":42},"* {\n",[36,72812,72813,72816,72818],{"class":38,"line":54},[36,72814,72815],{"class":53649},"  margin",[36,72817,2158],{"class":42},[36,72819,72820],{"class":50},"0;\n",[36,72822,72823,72826,72828],{"class":38,"line":66},[36,72824,72825],{"class":50},"  padding",[36,72827,2158],{"class":42},[36,72829,72820],{"class":50},[36,72831,72832],{"class":38,"line":73},[36,72833,3982],{"class":42},[36,72835,72836],{"class":38,"line":86},[36,72837,70],{"emptyLinePlaceholder":69},[36,72839,72840],{"class":38,"line":126},[36,72841,72842],{"class":50},"a {\n",[36,72844,72845,72848,72850],{"class":38,"line":131},[36,72846,72847],{"class":53649},"  text-decoration",[36,72849,2158],{"class":42},[36,72851,72852],{"class":50},"none;\n",[36,72854,72855],{"class":38,"line":225},[36,72856,72857],{"class":50},"  color:#721c24;\n",[36,72859,72860],{"class":38,"line":235},[36,72861,3982],{"class":42},[36,72863,72864],{"class":38,"line":377},[36,72865,72866],{"class":50},"h1 {\n",[36,72868,72869,72872,72874],{"class":38,"line":617},[36,72870,72871],{"class":53649},"  text-align",[36,72873,2158],{"class":42},[36,72875,72876],{"class":50},"center;\n",[36,72878,72879],{"class":38,"line":643},[36,72880,72881],{"class":50},"  color:#333;\n",[36,72883,72884,72886,72888],{"class":38,"line":921},[36,72885,72815],{"class":53649},[36,72887,2158],{"class":42},[36,72889,72890],{"class":50},"20px 0;\n",[36,72892,72893],{"class":38,"line":934},[36,72894,5059],{"class":42},[36,72896,72897],{"class":38,"line":939},[36,72898,3982],{"class":42},[36,72900,72901],{"class":38,"line":949},[36,72902,72903],{"class":50},"table {\n",[36,72905,72906],{"class":38,"line":962},[36,72907,72908],{"class":50},"  margin:0 auto;\n",[36,72910,72911,72914,72916],{"class":38,"line":974},[36,72912,72913],{"class":53649},"  width",[36,72915,2158],{"class":42},[36,72917,72918],{"class":50},"800px;\n",[36,72920,72921,72924,72926],{"class":38,"line":979},[36,72922,72923],{"class":53649},"  border-collapse",[36,72925,2158],{"class":42},[36,72927,72928],{"class":50},"collapse;\n",[36,72930,72931],{"class":38,"line":994},[36,72932,72933],{"class":50},"  color:#004085;\n",[36,72935,72936],{"class":38,"line":1006},[36,72937,3982],{"class":42},[36,72939,72940],{"class":38,"line":1011},[36,72941,72942],{"class":50},"th {\n",[36,72944,72945,72947,72949],{"class":38,"line":1023},[36,72946,72825],{"class":53649},[36,72948,2158],{"class":42},[36,72950,72951],{"class":50},"10px;\n",[36,72953,72954,72957,72959],{"class":38,"line":1028},[36,72955,72956],{"class":53649},"  background",[36,72958,2158],{"class":42},[36,72960,72961],{"class":2621},"#cfe5ff;\n",[36,72963,72964],{"class":38,"line":1033},[36,72965,72966],{"class":42},"  \n",[36,72968,72969,72972,72974],{"class":38,"line":1053},[36,72970,72971],{"class":53649},"  font-size",[36,72973,2158],{"class":42},[36,72975,72976],{"class":50},"20px;\n",[36,72978,72979,72982,72984],{"class":38,"line":1064},[36,72980,72981],{"class":53649},"  font-weight",[36,72983,2158],{"class":42},[36,72985,72986],{"class":50},"400;\n",[36,72988,72989],{"class":38,"line":1075},[36,72990,3982],{"class":42},[36,72992,72993],{"class":38,"line":2291},[36,72994,72995],{"class":50},"td,th {\n",[36,72997,72998,73001],{"class":38,"line":2329},[36,72999,73000],{"class":50},"  border:1px solid",[36,73002,73003],{"class":2621}," #b8daff;\n",[36,73005,73006],{"class":38,"line":2334},[36,73007,3982],{"class":42},[36,73009,73010],{"class":38,"line":2339},[36,73011,73012],{"class":50},"td {\n",[36,73014,73015],{"class":38,"line":2365},[36,73016,73017],{"class":50},"  padding:10px;\n",[36,73019,73020],{"class":38,"line":2373},[36,73021,73022],{"class":50},"  color:#666;\n",[36,73024,73025,73027,73029],{"class":38,"line":5001},[36,73026,72871],{"class":53649},[36,73028,2158],{"class":42},[36,73030,72876],{"class":50},[36,73032,73033,73035,73037],{"class":38,"line":5006},[36,73034,72971],{"class":53649},[36,73036,2158],{"class":42},[36,73038,73039],{"class":50},"16px;\n",[36,73041,73042],{"class":38,"line":10328},[36,73043,3982],{"class":42},[36,73045,73046],{"class":38,"line":10352},[36,73047,73048],{"class":50},"tbody tr {\n",[36,73050,73051,73053,73055],{"class":38,"line":10357},[36,73052,72956],{"class":53649},[36,73054,2158],{"class":42},[36,73056,73057],{"class":2621},"#fff;\n",[36,73059,73060],{"class":38,"line":10363},[36,73061,3982],{"class":42},[36,73063,73064],{"class":38,"line":10390},[36,73065,73066],{"class":50},"tbody tr:hover {\n",[36,73068,73069,73071,73073],{"class":38,"line":10395},[36,73070,72956],{"class":53649},[36,73072,2158],{"class":42},[36,73074,73075],{"class":2621},"#e1ecf8;\n",[36,73077,73078],{"class":38,"line":10401},[36,73079,3982],{"class":42},[36,73081,73082],{"class":38,"line":10413},[36,73083,73084],{"class":50},".info {\n",[36,73086,73087,73089,73091],{"class":38,"line":10425},[36,73088,72913],{"class":53649},[36,73090,2158],{"class":42},[36,73092,73093],{"class":50},"900px;\n",[36,73095,73096,73098,73100],{"class":38,"line":10437},[36,73097,72815],{"class":53649},[36,73099,2158],{"class":42},[36,73101,73102],{"class":50},"50px auto;\n",[36,73104,73105,73107,73109],{"class":38,"line":12095},[36,73106,72871],{"class":53649},[36,73108,2158],{"class":42},[36,73110,72876],{"class":50},[36,73112,73113],{"class":38,"line":12120},[36,73114,3982],{"class":42},[36,73116,73117],{"class":38,"line":12143},[36,73118,73119],{"class":50},".info  input, .info select {\n",[36,73121,73122,73124,73126],{"class":38,"line":12167},[36,73123,72913],{"class":53649},[36,73125,2158],{"class":42},[36,73127,73128],{"class":50},"80px;\n",[36,73130,73131,73134,73136],{"class":38,"line":12172},[36,73132,73133],{"class":53649},"  height",[36,73135,2158],{"class":42},[36,73137,73138],{"class":50},"27px;\n",[36,73140,73141,73144,73146],{"class":38,"line":12177},[36,73142,73143],{"class":53649},"  outline",[36,73145,2158],{"class":42},[36,73147,72852],{"class":50},[36,73149,73150,73153,73155],{"class":38,"line":12182},[36,73151,73152],{"class":53649},"  border-radius",[36,73154,2158],{"class":42},[36,73156,73157],{"class":50},"5px;\n",[36,73159,73160,73162],{"class":38,"line":12191},[36,73161,73000],{"class":50},[36,73163,73003],{"class":2621},[36,73165,73166,73169,73171],{"class":38,"line":12196},[36,73167,73168],{"class":53649},"  padding-left",[36,73170,2158],{"class":42},[36,73172,73157],{"class":50},[36,73174,73175,73178,73180],{"class":38,"line":12202},[36,73176,73177],{"class":53649},"  box-sizing",[36,73179,2158],{"class":42},[36,73181,73182],{"class":50},"border-box;\n",[36,73184,73185,73188,73190],{"class":38,"line":12223},[36,73186,73187],{"class":53649},"  margin-right",[36,73189,2158],{"class":42},[36,73191,73192],{"class":50},"15px;\n",[36,73194,73195],{"class":38,"line":12229},[36,73196,3982],{"class":42},[36,73198,73199],{"class":38,"line":12243},[36,73200,73201],{"class":50},".info button {\n",[36,73203,73204,73206,73208],{"class":38,"line":12249},[36,73205,72913],{"class":53649},[36,73207,2158],{"class":42},[36,73209,73210],{"class":50},"60px;\n",[36,73212,73213,73215,73217],{"class":38,"line":12276},[36,73214,73133],{"class":53649},[36,73216,2158],{"class":42},[36,73218,73138],{"class":50},[36,73220,73221,73224,73226],{"class":38,"line":12285},[36,73222,73223],{"class":53649},"  background-color",[36,73225,2158],{"class":42},[36,73227,73228],{"class":2621},"#004085;\n",[36,73230,73231,73233,73235],{"class":38,"line":12291},[36,73232,73143],{"class":53649},[36,73234,2158],{"class":42},[36,73236,72852],{"class":50},[36,73238,73239,73242,73244],{"class":38,"line":12299},[36,73240,73241],{"class":53649},"  border",[36,73243,2158],{"class":42},[36,73245,72820],{"class":50},[36,73247,73248,73251,73253],{"class":38,"line":12304},[36,73249,73250],{"class":53649},"  color",[36,73252,2158],{"class":42},[36,73254,73057],{"class":2621},[36,73256,73257,73260,73262],{"class":38,"line":18977},[36,73258,73259],{"class":53649},"  cursor",[36,73261,2158],{"class":42},[36,73263,73264],{"class":50},"pointer;\n",[36,73266,73267,73269,73271],{"class":38,"line":18983},[36,73268,73152],{"class":53649},[36,73270,2158],{"class":42},[36,73272,73157],{"class":50},[36,73274,73275],{"class":38,"line":19006},[36,73276,3982],{"class":42},[36,73278,73279],{"class":38,"line":19012},[36,73280,73281],{"class":50},".info .age {\n",[36,73283,73284,73286,73288],{"class":38,"line":19035},[36,73285,72913],{"class":53649},[36,73287,2158],{"class":42},[36,73289,73290],{"class":50},"50px;\n",[36,73292,73293],{"class":38,"line":19049},[36,73294,3982],{"class":42},[19,73296,73297],{},"思路：",[19,73299,73300],{},[3879,73301],{"alt":31,"src":73302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73304,73305],{},[3879,73306],{"alt":31,"src":73307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73309,73310],{},[3879,73311],{"alt":31,"src":73312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1752,73314,73316],{"id":73315},"_3315-重绘回流","3.3.15 重绘回流",[19,73318,73319],{},[3879,73320],{"alt":31,"src":73321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73323,73324],{},[3879,73325],{"alt":31,"src":73326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73328,73329],{},[3879,73330],{"alt":31,"src":73331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73333,73335],{"id":73334},"_34-bom","3.4 BOM",[19,73337,73338],{},[3879,73339],{"alt":31,"src":73340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73342,73343],{},"平时写的document省略了window而已，实际上是window.document",[19,73345,73346],{},"函数也是这样，调用的时候实际为window.fn()",[19,73348,73349],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73351,73352],{},"window大部分情况下可以省略",[1752,73354,73356],{"id":73355},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73358,73359],{},"只执行一次",[19,73361,73362],{},[3879,73363],{"alt":31,"src":73364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73366,73367],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73369,73370],{},[3879,73371],{"alt":31,"src":73372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1752,73374,73376],{"id":73375},"_342-js执行机制","3.4.2 JS执行机制",[19,73378,73379],{},[3879,73380],{"alt":31,"src":73381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73383,73384],{},"两个的结果都是1111 3333 2222",[19,73386,73387],{},[3879,73388],{"alt":31,"src":73389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73391,73392],{},[3879,73393],{"alt":31,"src":73394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73396,73397],{},[3879,73398],{"alt":31,"src":73399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73401,73402],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73404,73405],{},"工作流程：",[19,73407,73408],{},[3879,73409],{"alt":31,"src":73410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73412,73413],{},[3879,73414],{"alt":31,"src":73415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73417,73418],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73420,73421],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1752,73423,73425],{"id":73424},"_343-location对象","3.4.3 location对象",[19,73427,73428],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73430,73431],{},[3879,73432],{"alt":31,"src":73433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73435,73436],{},"href可以跳转页面",[650,73438,73439],{},[653,73440,73441],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73443,73444],{},"search得到提交信息之后网站后边的地址",[19,73446,73447],{},[3879,73448],{"alt":31,"src":73449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73451,73452],{},[3879,73453],{"alt":31,"src":73454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[650,73456,73457],{"start":54},[653,73458,73459],{},"hash:这个获取单页面应用#后边的地址",[19,73461,73462],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73464,73465],{},[3879,73466],{"alt":31,"src":73467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,73469,73471],{"className":55415,"code":73470,"language":55417,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,73472,73473,73493,73513],{"__ignoreMap":31},[36,73474,73475,73477,73479,73481,73483,73486,73489,73491],{"class":38,"line":39},[36,73476,54492],{"class":42},[36,73478,2796],{"class":53649},[36,73480,63405],{"class":79},[36,73482,47],{"class":42},[36,73484,73485],{"class":50},"\"#\u002Fmy\"",[36,73487,73488],{"class":42},">我的\u003C\u002F",[36,73490,2796],{"class":53649},[36,73492,53656],{"class":42},[36,73494,73495,73497,73499,73501,73503,73506,73509,73511],{"class":38,"line":54},[36,73496,54492],{"class":42},[36,73498,2796],{"class":53649},[36,73500,63405],{"class":79},[36,73502,47],{"class":42},[36,73504,73505],{"class":50},"\"#\u002Ffriend\"",[36,73507,73508],{"class":42},">关注\u003C\u002F",[36,73510,2796],{"class":53649},[36,73512,53656],{"class":42},[36,73514,73515,73517,73519,73521,73523,73526,73529,73531],{"class":38,"line":66},[36,73516,54492],{"class":42},[36,73518,2796],{"class":53649},[36,73520,63405],{"class":79},[36,73522,47],{"class":42},[36,73524,73525],{"class":50},"\"#\u002Fdownload\"",[36,73527,73528],{"class":42},">下载\u003C\u002F",[36,73530,2796],{"class":53649},[36,73532,53656],{"class":42},[19,73534,73535],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[650,73537,73538],{"start":66},[653,73539,73540,73541,73543,73544,73546],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56064,73542],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56064,73545],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1752,73548,73550],{"id":73549},"_345-navigator对象","3.4.5 navigator对象",[19,73552,73553],{},[3879,73554],{"alt":31,"src":73555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,73557,73561],{"className":73558,"code":73559,"language":73560,"meta":31,"style":31},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[33,73562,73563,73568,73579,73591,73596,73647,73688,73693,73706,73718,73723],{"__ignoreMap":31},[36,73564,73565],{"class":38,"line":39},[36,73566,73567],{"class":2621},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,73569,73570,73572,73574,73576],{"class":38,"line":54},[36,73571,2784],{"class":46},[36,73573,92],{"class":42},[36,73575,56797],{"class":46},[36,73577,73578],{"class":42}," () { \n",[36,73580,73581,73583,73586,73588],{"class":38,"line":66},[36,73582,9173],{"class":46},[36,73584,73585],{"class":62}," userAgent",[36,73587,15941],{"class":46},[36,73589,73590],{"class":42}," navigator.userAgent \n",[36,73592,73593],{"class":38,"line":73},[36,73594,73595],{"class":2621},"\u002F\u002F 验证是否为Android或iPhone \n",[36,73597,73598,73600,73603,73605,73608,73611,73613,73615,73618,73620,73623,73627,73629,73631,73633,73636,73638,73640,73642,73644],{"class":38,"line":86},[36,73599,9173],{"class":46},[36,73601,73602],{"class":62}," android",[36,73604,15941],{"class":46},[36,73606,73607],{"class":42}," userAgent.",[36,73609,73610],{"class":79},"match",[36,73612,92],{"class":42},[36,73614,3139],{"class":50},[36,73616,73617],{"class":50326},"(Android);",[36,73619,3537],{"class":46},[36,73621,73622],{"class":62},"[\\s",[36,73624,73626],{"class":73625},"snhLl","\\\u002F",[36,73628,3493],{"class":62},[36,73630,1885],{"class":46},[36,73632,92],{"class":50326},[36,73634,73635],{"class":62},"[\\d.]",[36,73637,1885],{"class":46},[36,73639,2985],{"class":50326},[36,73641,3537],{"class":46},[36,73643,3139],{"class":50},[36,73645,73646],{"class":42},") \n",[36,73648,73649,73651,73654,73656,73658,73660,73662,73664,73667,73670,73673,73675,73677,73680,73682,73684,73686],{"class":38,"line":126},[36,73650,9173],{"class":46},[36,73652,73653],{"class":62}," iphone",[36,73655,15941],{"class":46},[36,73657,73607],{"class":42},[36,73659,73610],{"class":79},[36,73661,92],{"class":42},[36,73663,3139],{"class":50},[36,73665,73666],{"class":50326},"(iPhone",[36,73668,73669],{"class":62},"\\s",[36,73671,73672],{"class":50326},"OS)",[36,73674,73669],{"class":62},[36,73676,92],{"class":50326},[36,73678,73679],{"class":62},"[\\d_]",[36,73681,1885],{"class":46},[36,73683,2985],{"class":50326},[36,73685,3139],{"class":50},[36,73687,73646],{"class":42},[36,73689,73690],{"class":38,"line":131},[36,73691,73692],{"class":2621},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,73694,73695,73697,73700,73703],{"class":38,"line":225},[36,73696,3948],{"class":46},[36,73698,73699],{"class":42}," (android ",[36,73701,73702],{"class":46},"||",[36,73704,73705],{"class":42}," iphone) { \n",[36,73707,73708,73711,73713,73716],{"class":38,"line":235},[36,73709,73710],{"class":42},"location.href ",[36,73712,47],{"class":46},[36,73714,73715],{"class":50}," 'http:\u002F\u002Fm.itcast.cn'",[36,73717,5059],{"class":42},[36,73719,73720],{"class":38,"line":377},[36,73721,73722],{"class":42},"} \n",[36,73724,73725],{"class":38,"line":617},[36,73726,73727],{"class":42},"})()\n",[1752,73729,73731],{"id":73730},"_346-histroy对象","3.4.6 histroy对象",[19,73733,73734],{},[3879,73735],{"alt":31,"src":73736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73738,73739],{},"浏览器地址的前进与后退!!!",[19,73741,73742],{},"history.back() 等效于 history.go(-1)",[19,73744,73745],{},"history.forward() 等效于 history.go(1)",[14,73747,73749],{"id":73748},"_35-本地存储","3.5 本地存储",[650,73751,73752,73755,73758],{},[653,73753,73754],{},"数据存储在用户浏览器中",[653,73756,73757],{},"设置、读取方便、甚至页面刷新不丢失数据",[653,73759,73760],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1752,73762,73764],{"id":73763},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73766,73767],{},"只能存储字符串",[19,73769,73770],{},[3879,73771],{"alt":31,"src":73772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73774,73775],{},[3879,73776],{"alt":31,"src":73777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73779,73780],{},"键值对要加引号,不然就会当变量来看了",[19,73782,73783],{},"localStorage.setItem('uname', 'pink')",[19,73785,73786],{},"刷新之后信息不再丢失",[19,73788,73789],{},"操作key,value会跟着变",[19,73791,73792],{},"删除只删除键就可以,即名字",[19,73794,73783],{},[19,73796,73797],{},"改:",[19,73799,73800],{},"localStorage.setItem('uname','red')",[19,73802,73803],{},"有这个键就是改,没有这个键就是改",[19,73805,73806],{},[3879,73807],{"alt":31,"src":73808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73810,73811],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73813,73814],{},[3879,73815],{"alt":31,"src":73816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73818,73819],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1752,73821,73823],{"id":73822},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73825,73826],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73828,73829],{},"特性:",[650,73831,73832,73835,73838,73841],{},[653,73833,73834],{},"生命周期为关闭浏览器窗口",[653,73836,73837],{},"在同一个窗口(页面)下数据可以共享",[653,73839,73840],{},"以键值对的形式存储使用",[653,73842,73843],{},"用法跟localStorage 基本相同",[1752,73845,73847],{"id":73846},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73849,73850],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,73852,73854],{"className":55415,"code":73853,"language":55417,"meta":31,"style":31},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[33,73855,73856,73864,73869,73874,73879,73884,73888,73893,73898],{"__ignoreMap":31},[36,73857,73858,73860,73862],{"class":38,"line":39},[36,73859,3463],{"class":42},[36,73861,54161],{"class":53649},[36,73863,53656],{"class":42},[36,73865,73866],{"class":38,"line":54},[36,73867,73868],{"class":42},"    const obj = {\n",[36,73870,73871],{"class":38,"line":66},[36,73872,73873],{"class":42},"      uname: 'pink老师',\n",[36,73875,73876],{"class":38,"line":73},[36,73877,73878],{"class":42},"      age: 18,\n",[36,73880,73881],{"class":38,"line":86},[36,73882,73883],{"class":42},"      gender: '女'\n",[36,73885,73886],{"class":38,"line":126},[36,73887,4580],{"class":42},[36,73889,73890],{"class":38,"line":131},[36,73891,73892],{"class":42},"    \u002F\u002F 存储复杂数据类型\n",[36,73894,73895],{"class":38,"line":225},[36,73896,73897],{"class":42},"    localStorage.setItem('obj', obj)\n",[36,73899,73900,73902,73904],{"class":38,"line":235},[36,73901,54765],{"class":42},[36,73903,54161],{"class":53649},[36,73905,53656],{"class":42},[19,73907,73908],{},[3879,73909],{"alt":31,"src":73910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73912,73913],{},"如果获取一下数据:",[19,73915,73916],{},"log(localStorage.getItem('obj'))",[19,73918,73919],{},[3879,73920],{"alt":31,"src":73921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73923,73924],{},"发现直接存对象是使用不了的!!!",[24368,73926,73928],{"id":73927},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73930,73931],{},[3879,73932],{"alt":31,"src":73933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,73935,73937],{"className":52982,"code":73936,"language":52984,"meta":31,"style":31},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[33,73938,73939,73947,73957,73967,73976,73984,73988,73992,74018,74037,74045,74049,74054,74059],{"__ignoreMap":31},[36,73940,73941,73943,73945],{"class":38,"line":39},[36,73942,3463],{"class":42},[36,73944,54161],{"class":53649},[36,73946,53656],{"class":42},[36,73948,73949,73951,73953,73955],{"class":38,"line":54},[36,73950,13599],{"class":46},[36,73952,72317],{"class":62},[36,73954,15941],{"class":46},[36,73956,2150],{"class":42},[36,73958,73959,73962,73965],{"class":38,"line":66},[36,73960,73961],{"class":42},"      uname: ",[36,73963,73964],{"class":50},"'pink老师'",[36,73966,33820],{"class":42},[36,73968,73969,73972,73974],{"class":38,"line":73},[36,73970,73971],{"class":42},"      age: ",[36,73973,633],{"class":62},[36,73975,33820],{"class":42},[36,73977,73978,73981],{"class":38,"line":86},[36,73979,73980],{"class":42},"      gender: ",[36,73982,73983],{"class":50},"'女'\n",[36,73985,73986],{"class":38,"line":126},[36,73987,4580],{"class":42},[36,73989,73990],{"class":38,"line":131},[36,73991,73892],{"class":2621},[36,73993,73994,73997,74000,74002,74005,74007,74010,74012,74015],{"class":38,"line":225},[36,73995,73996],{"class":42},"  localStorage.",[36,73998,73999],{"class":79},"setItem",[36,74001,92],{"class":42},[36,74003,74004],{"class":50},"'obj'",[36,74006,630],{"class":42},[36,74008,74009],{"class":62},"JSON",[36,74011,3113],{"class":42},[36,74013,74014],{"class":79},"stringify",[36,74016,74017],{"class":42},"(obj))\n",[36,74019,74020,74023,74025,74028,74031,74033,74035],{"class":38,"line":235},[36,74021,74022],{"class":42},"  console.",[36,74024,60595],{"class":79},[36,74026,74027],{"class":42},"(localStorage.",[36,74029,74030],{"class":79},"getItem",[36,74032,92],{"class":42},[36,74034,74004],{"class":50},[36,74036,1914],{"class":42},[36,74038,74039,74041,74043],{"class":38,"line":377},[36,74040,54765],{"class":42},[36,74042,54161],{"class":53649},[36,74044,53656],{"class":42},[36,74046,74047],{"class":38,"line":617},[36,74048,72966],{"class":42},[36,74050,74051],{"class":38,"line":643},[36,74052,74053],{"class":42},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,74055,74056],{"class":38,"line":921},[36,74057,74058],{"class":42},"  类型是字符串的\n",[36,74060,74061],{"class":38,"line":934},[36,74062,74063],{"class":42},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24368,74065,74067],{"id":74066},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,74069,74070],{},[3879,74071],{"alt":31,"src":74072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,74074,74075],{},[3879,74076],{"alt":31,"src":74077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,74079,74081],{"className":55415,"code":74080,"language":55417,"meta":31,"style":31},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[33,74082,74083,74091,74095,74099,74103,74107,74111,74116,74121,74126,74131,74136,74141,74146,74151],{"__ignoreMap":31},[36,74084,74085,74087,74089],{"class":38,"line":39},[36,74086,54492],{"class":42},[36,74088,54161],{"class":53649},[36,74090,53656],{"class":42},[36,74092,74093],{"class":38,"line":54},[36,74094,73868],{"class":42},[36,74096,74097],{"class":38,"line":66},[36,74098,73873],{"class":42},[36,74100,74101],{"class":38,"line":73},[36,74102,73878],{"class":42},[36,74104,74105],{"class":38,"line":86},[36,74106,73883],{"class":42},[36,74108,74109],{"class":38,"line":126},[36,74110,4580],{"class":42},[36,74112,74113],{"class":38,"line":131},[36,74114,74115],{"class":42},"    \u002F\u002F 1.存储复杂数据类型\n",[36,74117,74118],{"class":38,"line":225},[36,74119,74120],{"class":42},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,74122,74123],{"class":38,"line":235},[36,74124,74125],{"class":42},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,74127,74128],{"class":38,"line":377},[36,74129,74130],{"class":42},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,74132,74133],{"class":38,"line":617},[36,74134,74135],{"class":42},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,74137,74138],{"class":38,"line":643},[36,74139,74140],{"class":42},"    \u002F\u002F 取\n",[36,74142,74143],{"class":38,"line":921},[36,74144,74145],{"class":42},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,74147,74148],{"class":38,"line":934},[36,74149,74150],{"class":42},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,74152,74153,74155,74157],{"class":38,"line":939},[36,74154,54765],{"class":42},[36,74156,54161],{"class":53649},[36,74158,53656],{"class":42},[19,74160,74161],{},[3879,74162],{"alt":31,"src":74163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1752,74165,74167],{"id":74166},"_356-数组map方法","3.5.6 数组map方法",[19,74169,74170],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74172,74173],{},[3879,74174],{"alt":31,"src":74175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74177,74178],{},[3879,74179],{"alt":31,"src":74180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74182,74183,74186],{},[667,74184,74185],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74188,74189],{},"map有返回值，但是forEach没有返回值",[19,74191,74192],{},"map是个方法。用的时候要加 ()",[19,74194,74195],{},"map返回的是一个数组",[1752,74197,74199],{"id":74198},"_357-数组中join方法","3.5.7 数组中join方法",[19,74201,74202],{},[3879,74203],{"alt":31,"src":74204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74206,74207],{},"类似于python中拼接字符串一样！",[650,74209,74210,74213,74216],{},[653,74211,74212],{},"小括号为空则逗号分开",[653,74214,74215],{},"小括号为空字符串 ''，则元素之间没有分隔符",[653,74217,74218],{},"小括号用啥符号就用进行分割",[1752,74220,74222],{"id":74221},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[650,74224,74225,74228,74231,74234,74237],{},[653,74226,74227],{},"记住本地时间获取快速方式：new Date().toDateString()",[653,74229,74230],{},"尽量减少DOM操作，用好map+join的渲染方式",[653,74232,74233],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[653,74235,74236],{},"return可以实现函数的结束",[653,74238,74239],{},"禁止跳转是 preventDefault() 不要忘记",[26,74241,74243],{"className":52982,"code":74242,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,74244,74245,74255,74269,74273,74281,74295,74315,74327,74335,74341,74351,74361,74365,74369,74375,74385,74397,74401,74405,74412,74424,74438,74448,74452,74456,74463,74470,74477,74489,74501,74511,74523,74527,74531,74538,74545,74557,74569,74579,74591,74621,74625,74629,74636,74648,74660,74684,74694,74704,74708,74712,74720,74731,74743,74755,74767,74784,74796,74808,74812,74816,74823,74835,74847,74859,74870,74888,74901,74913,74937,74948,74952,74956,74964,74974,74978,74982,74988,75000,75011,75021,75025,75029,75035,75057,75061,75065,75071,75077,75089,75099,75111,75141,75154,75171,75175,75179,75190,75212,75222,75226,75230,75243,75253,75265,75277,75289,75301,75311,75321,75331,75342,75355,75359,75367,75375,75379,75387,75400,75420,75453,75486,75519,75545,75563,75581,75589,75615,75633,75651,75669,75687,75705,75713,75721,75739,75747,75776,75784,75792,75800,75813,75825,75837,75849,75861,75873,75886,75898,75906,75914,75922,75927,75932,75936,75940,75944,75948,75952,75956,75961,75966,75971,75976,75984,75992,76000,76005,76010,76015,76020,76025,76030,76035,76040,76045,76050,76055,76060,76065,76070,76074,76079,76084,76094,76103,76107,76112,76121,76137,76179,76219,76258,76323,76331,76335,76340,76358,76366,76371,76376,76406,76412,76417,76430,76442,76454,76466,76478,76490,76502,76506,76516,76520,76525,76530,76534,76543,76547,76552,76557,76576,76581,76601,76605,76610,76614,76619,76637,76655,76673,76692,76711,76730,76735,76741,76762,76768,76777,76783,76789,76795,76822,76835,76840,76850,76856,76862,76868,76874,76879,76885,76891,76897,76903,76936,76941,76946,76951,76956,76962,76968,76974,76985,76990,76996,77003,77017,77023,77047,77052,77057,77063,77069,77090,77096,77109,77115,77121,77127,77133,77138,77144,77150,77156,77174,77188,77194,77202,77208,77230,77235,77240,77245,77250,77255,77264,77273,77278],{"__ignoreMap":31},[36,74246,74247,74249,74251,74253],{"class":38,"line":39},[36,74248,53646],{"class":42},[36,74250,53650],{"class":53649},[36,74252,53653],{"class":79},[36,74254,53656],{"class":42},[36,74256,74257,74259,74261,74263,74265,74267],{"class":38,"line":54},[36,74258,3463],{"class":42},[36,74260,52984],{"class":53649},[36,74262,53665],{"class":79},[36,74264,47],{"class":42},[36,74266,53670],{"class":50},[36,74268,53656],{"class":42},[36,74270,74271],{"class":38,"line":66},[36,74272,70],{"emptyLinePlaceholder":69},[36,74274,74275,74277,74279],{"class":38,"line":73},[36,74276,3463],{"class":42},[36,74278,53683],{"class":53649},[36,74280,53656],{"class":42},[36,74282,74283,74285,74287,74289,74291,74293],{"class":38,"line":86},[36,74284,54492],{"class":42},[36,74286,53693],{"class":53649},[36,74288,53696],{"class":79},[36,74290,47],{"class":42},[36,74292,53701],{"class":50},[36,74294,53656],{"class":42},[36,74296,74297,74299,74301,74303,74305,74307,74309,74311,74313],{"class":38,"line":126},[36,74298,54492],{"class":42},[36,74300,53693],{"class":53649},[36,74302,17295],{"class":79},[36,74304,47],{"class":42},[36,74306,53740],{"class":50},[36,74308,53720],{"class":79},[36,74310,47],{"class":42},[36,74312,53747],{"class":50},[36,74314,53656],{"class":42},[36,74316,74317,74319,74321,74323,74325],{"class":38,"line":131},[36,74318,54492],{"class":42},[36,74320,53756],{"class":53649},[36,74322,53759],{"class":42},[36,74324,53756],{"class":53649},[36,74326,53656],{"class":42},[36,74328,74329,74331,74333],{"class":38,"line":225},[36,74330,54492],{"class":42},[36,74332,2467],{"class":53649},[36,74334,53656],{"class":42},[36,74336,74337,74339],{"class":38,"line":235},[36,74338,8785],{"class":53649},[36,74340,2150],{"class":42},[36,74342,74343,74345,74347,74349],{"class":38,"line":377},[36,74344,57043],{"class":62},[36,74346,2158],{"class":42},[36,74348,2751],{"class":62},[36,74350,3711],{"class":42},[36,74352,74353,74355,74357,74359],{"class":38,"line":617},[36,74354,57054],{"class":62},[36,74356,2158],{"class":42},[36,74358,2751],{"class":62},[36,74360,3711],{"class":42},[36,74362,74363],{"class":38,"line":643},[36,74364,4580],{"class":42},[36,74366,74367],{"class":38,"line":921},[36,74368,70],{"emptyLinePlaceholder":69},[36,74370,74371,74373],{"class":38,"line":934},[36,74372,59627],{"class":53649},[36,74374,2150],{"class":42},[36,74376,74377,74379,74381,74383],{"class":38,"line":939},[36,74378,59634],{"class":62},[36,74380,2158],{"class":42},[36,74382,53940],{"class":62},[36,74384,3711],{"class":42},[36,74386,74387,74389,74391,74393,74395],{"class":38,"line":949},[36,74388,64425],{"class":62},[36,74390,2158],{"class":42},[36,74392,3254],{"class":62},[36,74394,53840],{"class":46},[36,74396,3711],{"class":42},[36,74398,74399],{"class":38,"line":962},[36,74400,4580],{"class":42},[36,74402,74403],{"class":38,"line":974},[36,74404,70],{"emptyLinePlaceholder":69},[36,74406,74407,74410],{"class":38,"line":979},[36,74408,74409],{"class":79},"    .info",[36,74411,2150],{"class":42},[36,74413,74414,74416,74418,74420,74422],{"class":38,"line":994},[36,74415,57119],{"class":62},[36,74417,2158],{"class":42},[36,74419,53837],{"class":62},[36,74421,53840],{"class":46},[36,74423,3711],{"class":42},[36,74425,74426,74428,74430,74432,74434,74436],{"class":38,"line":1006},[36,74427,57054],{"class":62},[36,74429,2158],{"class":42},[36,74431,3002],{"class":62},[36,74433,53840],{"class":46},[36,74435,53904],{"class":62},[36,74437,3711],{"class":42},[36,74439,74440,74442,74444,74446],{"class":38,"line":1011},[36,74441,59634],{"class":62},[36,74443,2158],{"class":42},[36,74445,53940],{"class":62},[36,74447,3711],{"class":42},[36,74449,74450],{"class":38,"line":1023},[36,74451,4580],{"class":42},[36,74453,74454],{"class":38,"line":1028},[36,74455,70],{"emptyLinePlaceholder":69},[36,74457,74458,74461],{"class":38,"line":1033},[36,74459,74460],{"class":79},"    .uname",[36,74462,33820],{"class":42},[36,74464,74465,74468],{"class":38,"line":1053},[36,74466,74467],{"class":79},"    .age",[36,74469,33820],{"class":42},[36,74471,74472,74475],{"class":38,"line":1064},[36,74473,74474],{"class":79},"    .salary",[36,74476,2150],{"class":42},[36,74478,74479,74481,74483,74485,74487],{"class":38,"line":1075},[36,74480,57119],{"class":62},[36,74482,2158],{"class":42},[36,74484,1070],{"class":62},[36,74486,53840],{"class":46},[36,74488,3711],{"class":42},[36,74490,74491,74493,74495,74497,74499],{"class":38,"line":2291},[36,74492,57133],{"class":62},[36,74494,2158],{"class":42},[36,74496,3254],{"class":62},[36,74498,53840],{"class":46},[36,74500,3711],{"class":42},[36,74502,74503,74505,74507,74509],{"class":38,"line":2329},[36,74504,64128],{"class":62},[36,74506,2158],{"class":42},[36,74508,57085],{"class":62},[36,74510,3711],{"class":42},[36,74512,74513,74515,74517,74519,74521],{"class":38,"line":2334},[36,74514,64098],{"class":62},[36,74516,2158],{"class":42},[36,74518,3130],{"class":62},[36,74520,53840],{"class":46},[36,74522,3711],{"class":42},[36,74524,74525],{"class":38,"line":2339},[36,74526,4580],{"class":42},[36,74528,74529],{"class":38,"line":2365},[36,74530,70],{"emptyLinePlaceholder":69},[36,74532,74533,74536],{"class":38,"line":2373},[36,74534,74535],{"class":79},"    .gender",[36,74537,33820],{"class":42},[36,74539,74540,74543],{"class":38,"line":5001},[36,74541,74542],{"class":79},"    .city",[36,74544,2150],{"class":42},[36,74546,74547,74549,74551,74553,74555],{"class":38,"line":5006},[36,74548,57119],{"class":62},[36,74550,2158],{"class":42},[36,74552,1070],{"class":62},[36,74554,53840],{"class":46},[36,74556,3711],{"class":42},[36,74558,74559,74561,74563,74565,74567],{"class":38,"line":10328},[36,74560,57133],{"class":62},[36,74562,2158],{"class":42},[36,74564,3379],{"class":62},[36,74566,53840],{"class":46},[36,74568,3711],{"class":42},[36,74570,74571,74573,74575,74577],{"class":38,"line":10352},[36,74572,64128],{"class":62},[36,74574,2158],{"class":42},[36,74576,57085],{"class":62},[36,74578,3711],{"class":42},[36,74580,74581,74583,74585,74587,74589],{"class":38,"line":10357},[36,74582,64098],{"class":62},[36,74584,2158],{"class":42},[36,74586,3130],{"class":62},[36,74588,53840],{"class":46},[36,74590,3711],{"class":42},[36,74592,74593,74595,74597,74599,74601,74603,74606,74608,74610,74612,74615,74617,74619],{"class":38,"line":10363},[36,74594,64325],{"class":62},[36,74596,2158],{"class":42},[36,74598,1906],{"class":62},[36,74600,53840],{"class":46},[36,74602,53869],{"class":62},[36,74604,74605],{"class":62}," rgb",[36,74607,92],{"class":42},[36,74609,1059],{"class":62},[36,74611,630],{"class":42},[36,74613,74614],{"class":62},"197",[36,74616,630],{"class":42},[36,74618,74614],{"class":62},[36,74620,5104],{"class":42},[36,74622,74623],{"class":38,"line":10390},[36,74624,4580],{"class":42},[36,74626,74627],{"class":38,"line":10395},[36,74628,70],{"emptyLinePlaceholder":69},[36,74630,74631,74634],{"class":38,"line":10401},[36,74632,74633],{"class":53649},"    button",[36,74635,2150],{"class":42},[36,74637,74638,74640,74642,74644,74646],{"class":38,"line":10413},[36,74639,57133],{"class":62},[36,74641,2158],{"class":42},[36,74643,3379],{"class":62},[36,74645,53840],{"class":46},[36,74647,3711],{"class":42},[36,74649,74650,74652,74654,74656,74658],{"class":38,"line":10425},[36,74651,57119],{"class":62},[36,74653,2158],{"class":42},[36,74655,3039],{"class":62},[36,74657,53840],{"class":46},[36,74659,3711],{"class":42},[36,74661,74662,74664,74666,74669,74671,74673,74675,74678,74680,74682],{"class":38,"line":10437},[36,74663,57232],{"class":62},[36,74665,2158],{"class":42},[36,74667,74668],{"class":62},"rgb",[36,74670,92],{"class":42},[36,74672,3520],{"class":62},[36,74674,630],{"class":42},[36,74676,74677],{"class":62},"187",[36,74679,630],{"class":42},[36,74681,2856],{"class":62},[36,74683,5104],{"class":42},[36,74685,74686,74688,74690,74692],{"class":38,"line":12095},[36,74687,59764],{"class":62},[36,74689,2158],{"class":42},[36,74691,63190],{"class":62},[36,74693,3711],{"class":42},[36,74695,74696,74698,74700,74702],{"class":38,"line":12120},[36,74697,64325],{"class":62},[36,74699,2158],{"class":42},[36,74701,2751],{"class":62},[36,74703,3711],{"class":42},[36,74705,74706],{"class":38,"line":12143},[36,74707,4580],{"class":42},[36,74709,74710],{"class":38,"line":12167},[36,74711,70],{"emptyLinePlaceholder":69},[36,74713,74714,74716,74718],{"class":38,"line":12172},[36,74715,74633],{"class":53649},[36,74717,54036],{"class":53649},[36,74719,2150],{"class":42},[36,74721,74722,74724,74726,74729],{"class":38,"line":12177},[36,74723,57357],{"class":62},[36,74725,2158],{"class":42},[36,74727,74728],{"class":62},"inline-block",[36,74730,3711],{"class":42},[36,74732,74733,74735,74737,74739,74741],{"class":38,"line":12182},[36,74734,57119],{"class":62},[36,74736,2158],{"class":42},[36,74738,3002],{"class":62},[36,74740,53840],{"class":46},[36,74742,3711],{"class":42},[36,74744,74745,74747,74749,74751,74753],{"class":38,"line":12191},[36,74746,57133],{"class":62},[36,74748,2158],{"class":42},[36,74750,3002],{"class":62},[36,74752,53840],{"class":46},[36,74754,3711],{"class":42},[36,74756,74757,74759,74761,74763,74765],{"class":38,"line":12196},[36,74758,59707],{"class":62},[36,74760,2158],{"class":42},[36,74762,3028],{"class":62},[36,74764,53840],{"class":46},[36,74766,3711],{"class":42},[36,74768,74769,74771,74773,74775,74777,74779,74782],{"class":38,"line":12202},[36,74770,64325],{"class":62},[36,74772,2158],{"class":42},[36,74774,1906],{"class":62},[36,74776,53840],{"class":46},[36,74778,53869],{"class":62},[36,74780,74781],{"class":62}," #fff",[36,74783,3711],{"class":42},[36,74785,74786,74788,74790,74792,74794],{"class":38,"line":12223},[36,74787,57482],{"class":62},[36,74789,2158],{"class":42},[36,74791,2875],{"class":62},[36,74793,53840],{"class":46},[36,74795,3711],{"class":42},[36,74797,74798,74800,74802,74804,74806],{"class":38,"line":12229},[36,74799,64098],{"class":62},[36,74801,2158],{"class":42},[36,74803,1906],{"class":62},[36,74805,53840],{"class":46},[36,74807,3711],{"class":42},[36,74809,74810],{"class":38,"line":12243},[36,74811,4580],{"class":42},[36,74813,74814],{"class":38,"line":12249},[36,74815,70],{"emptyLinePlaceholder":69},[36,74817,74818,74821],{"class":38,"line":12276},[36,74819,74820],{"class":79},"    .total",[36,74822,2150],{"class":42},[36,74824,74825,74827,74829,74831,74833],{"class":38,"line":12285},[36,74826,57119],{"class":62},[36,74828,2158],{"class":42},[36,74830,63977],{"class":62},[36,74832,53840],{"class":46},[36,74834,3711],{"class":42},[36,74836,74837,74839,74841,74843,74845],{"class":38,"line":12291},[36,74838,57133],{"class":62},[36,74840,2158],{"class":42},[36,74842,2957],{"class":62},[36,74844,53840],{"class":46},[36,74846,3711],{"class":42},[36,74848,74849,74851,74853,74855,74857],{"class":38,"line":12299},[36,74850,59707],{"class":62},[36,74852,2158],{"class":42},[36,74854,2957],{"class":62},[36,74856,53840],{"class":46},[36,74858,3711],{"class":42},[36,74860,74861,74863,74865,74868],{"class":38,"line":12304},[36,74862,59634],{"class":62},[36,74864,2158],{"class":42},[36,74866,74867],{"class":62},"right",[36,74869,3711],{"class":42},[36,74871,74872,74874,74876,74878,74880,74882,74884,74886],{"class":38,"line":18977},[36,74873,57054],{"class":62},[36,74875,2158],{"class":42},[36,74877,2957],{"class":62},[36,74879,53840],{"class":46},[36,74881,53904],{"class":62},[36,74883,4431],{"class":62},[36,74885,53840],{"class":46},[36,74887,3711],{"class":42},[36,74889,74890,74893,74895,74897,74899],{"class":38,"line":18983},[36,74891,74892],{"class":62},"      padding-right",[36,74894,2158],{"class":42},[36,74896,3002],{"class":62},[36,74898,53840],{"class":46},[36,74900,3711],{"class":42},[36,74902,74903,74905,74907,74909,74911],{"class":38,"line":19006},[36,74904,57270],{"class":62},[36,74906,2158],{"class":42},[36,74908,3078],{"class":62},[36,74910,53840],{"class":46},[36,74912,3711],{"class":42},[36,74914,74915,74917,74919,74921,74923,74926,74928,74931,74933,74935],{"class":38,"line":19012},[36,74916,57232],{"class":62},[36,74918,2158],{"class":42},[36,74920,74668],{"class":62},[36,74922,92],{"class":42},[36,74924,74925],{"class":62},"237",[36,74927,630],{"class":42},[36,74929,74930],{"class":62},"235",[36,74932,630],{"class":42},[36,74934,74930],{"class":62},[36,74936,5104],{"class":42},[36,74938,74939,74942,74944,74946],{"class":38,"line":19035},[36,74940,74941],{"class":62},"      box-sizing",[36,74943,2158],{"class":42},[36,74945,62853],{"class":62},[36,74947,3711],{"class":42},[36,74949,74950],{"class":38,"line":19049},[36,74951,4580],{"class":42},[36,74953,74954],{"class":38,"line":19069},[36,74955,70],{"emptyLinePlaceholder":69},[36,74957,74958,74960,74962],{"class":38,"line":19075},[36,74959,74820],{"class":79},[36,74961,54036],{"class":53649},[36,74963,2150],{"class":42},[36,74965,74966,74968,74970,74972],{"class":38,"line":19086},[36,74967,59764],{"class":62},[36,74969,2158],{"class":42},[36,74971,59769],{"class":62},[36,74973,3711],{"class":42},[36,74975,74976],{"class":38,"line":19109},[36,74977,4580],{"class":42},[36,74979,74980],{"class":38,"line":19131},[36,74981,70],{"emptyLinePlaceholder":69},[36,74983,74984,74986],{"class":38,"line":19136},[36,74985,67370],{"class":53649},[36,74987,2150],{"class":42},[36,74989,74990,74992,74994,74996,74998],{"class":38,"line":19142},[36,74991,57119],{"class":62},[36,74993,2158],{"class":42},[36,74995,63977],{"class":62},[36,74997,53840],{"class":46},[36,74999,3711],{"class":42},[36,75001,75002,75004,75006,75009],{"class":38,"line":19156},[36,75003,57054],{"class":62},[36,75005,2158],{"class":42},[36,75007,75008],{"class":62},"auto",[36,75010,3711],{"class":42},[36,75012,75013,75015,75017,75019],{"class":38,"line":19169},[36,75014,67377],{"class":62},[36,75016,2158],{"class":42},[36,75018,67382],{"class":62},[36,75020,3711],{"class":42},[36,75022,75023],{"class":38,"line":19174},[36,75024,4580],{"class":42},[36,75026,75027],{"class":38,"line":19188},[36,75028,70],{"emptyLinePlaceholder":69},[36,75030,75031,75033],{"class":38,"line":19193},[36,75032,67462],{"class":53649},[36,75034,2150],{"class":42},[36,75036,75037,75039,75041,75043,75045,75047,75049,75051,75053,75055],{"class":38,"line":19199},[36,75038,57232],{"class":62},[36,75040,2158],{"class":42},[36,75042,74668],{"class":62},[36,75044,92],{"class":42},[36,75046,74925],{"class":62},[36,75048,630],{"class":42},[36,75050,74930],{"class":62},[36,75052,630],{"class":42},[36,75054,74930],{"class":62},[36,75056,5104],{"class":42},[36,75058,75059],{"class":38,"line":19204},[36,75060,4580],{"class":42},[36,75062,75063],{"class":38,"line":19218},[36,75064,70],{"emptyLinePlaceholder":69},[36,75066,75067,75069],{"class":38,"line":19223},[36,75068,67462],{"class":53649},[36,75070,33820],{"class":42},[36,75072,75073,75075],{"class":38,"line":19228},[36,75074,67528],{"class":53649},[36,75076,2150],{"class":42},[36,75078,75079,75081,75083,75085,75087],{"class":38,"line":19242},[36,75080,57133],{"class":62},[36,75082,2158],{"class":42},[36,75084,2830],{"class":62},[36,75086,53840],{"class":46},[36,75088,3711],{"class":42},[36,75090,75091,75093,75095,75097],{"class":38,"line":19254},[36,75092,59634],{"class":62},[36,75094,2158],{"class":42},[36,75096,26106],{"class":62},[36,75098,3711],{"class":42},[36,75100,75101,75103,75105,75107,75109],{"class":38,"line":19259},[36,75102,57270],{"class":62},[36,75104,2158],{"class":42},[36,75106,3104],{"class":62},[36,75108,53840],{"class":46},[36,75110,3711],{"class":42},[36,75112,75113,75115,75117,75119,75121,75123,75125,75127,75130,75132,75135,75137,75139],{"class":38,"line":19272},[36,75114,64325],{"class":62},[36,75116,2158],{"class":42},[36,75118,1906],{"class":62},[36,75120,53840],{"class":46},[36,75122,53869],{"class":62},[36,75124,74605],{"class":62},[36,75126,92],{"class":42},[36,75128,75129],{"class":62},"228",[36,75131,630],{"class":42},[36,75133,75134],{"class":62},"225",[36,75136,630],{"class":42},[36,75138,75134],{"class":62},[36,75140,5104],{"class":42},[36,75142,75143,75146,75148,75150,75152],{"class":38,"line":19277},[36,75144,75145],{"class":62},"      padding-left",[36,75147,2158],{"class":42},[36,75149,2875],{"class":62},[36,75151,53840],{"class":46},[36,75153,3711],{"class":42},[36,75155,75156,75158,75160,75162,75165,75167,75169],{"class":38,"line":19282},[36,75157,64208],{"class":62},[36,75159,2158],{"class":42},[36,75161,30491],{"class":62},[36,75163,75164],{"class":62}," linear",[36,75166,64215],{"class":62},[36,75168,3249],{"class":46},[36,75170,3711],{"class":42},[36,75172,75173],{"class":38,"line":19287},[36,75174,4580],{"class":42},[36,75176,75177],{"class":38,"line":19300},[36,75178,70],{"emptyLinePlaceholder":69},[36,75180,75181,75184,75186,75188],{"class":38,"line":19305},[36,75182,75183],{"class":53649},"    tbody",[36,75185,72490],{"class":53649},[36,75187,63288],{"class":79},[36,75189,2150],{"class":42},[36,75191,75192,75194,75196,75198,75200,75202,75204,75206,75208,75210],{"class":38,"line":34985},[36,75193,57232],{"class":62},[36,75195,2158],{"class":42},[36,75197,74668],{"class":62},[36,75199,92],{"class":42},[36,75201,74925],{"class":62},[36,75203,630],{"class":42},[36,75205,74930],{"class":62},[36,75207,630],{"class":42},[36,75209,74930],{"class":62},[36,75211,5104],{"class":42},[36,75213,75214,75216,75218,75220],{"class":38,"line":34991},[36,75215,64373],{"class":62},[36,75217,2158],{"class":42},[36,75219,64378],{"class":62},[36,75221,3711],{"class":42},[36,75223,75224],{"class":38,"line":34997},[36,75225,4580],{"class":42},[36,75227,75228],{"class":38,"line":35003},[36,75229,70],{"emptyLinePlaceholder":69},[36,75231,75232,75234,75236,75239,75241],{"class":38,"line":35009},[36,75233,75183],{"class":53649},[36,75235,72490],{"class":53649},[36,75237,75238],{"class":53649}," td",[36,75240,3815],{"class":53649},[36,75242,2150],{"class":42},[36,75244,75245,75247,75249,75251],{"class":38,"line":35020},[36,75246,57357],{"class":62},[36,75248,2158],{"class":42},[36,75250,63217],{"class":62},[36,75252,3711],{"class":42},[36,75254,75255,75257,75259,75261,75263],{"class":38,"line":35026},[36,75256,57119],{"class":62},[36,75258,2158],{"class":42},[36,75260,3460],{"class":62},[36,75262,53840],{"class":46},[36,75264,3711],{"class":42},[36,75266,75267,75269,75271,75273,75275],{"class":38,"line":35046},[36,75268,57133],{"class":62},[36,75270,2158],{"class":42},[36,75272,3379],{"class":62},[36,75274,53840],{"class":46},[36,75276,3711],{"class":42},[36,75278,75279,75281,75283,75285,75287],{"class":38,"line":35052},[36,75280,59707],{"class":62},[36,75282,2158],{"class":42},[36,75284,3379],{"class":62},[36,75286,53840],{"class":46},[36,75288,3711],{"class":42},[36,75290,75291,75293,75295,75297,75299],{"class":38,"line":35063},[36,75292,64425],{"class":62},[36,75294,2158],{"class":42},[36,75296,1911],{"class":62},[36,75298,53840],{"class":46},[36,75300,3711],{"class":42},[36,75302,75303,75305,75307,75309],{"class":38,"line":35069},[36,75304,59764],{"class":62},[36,75306,2158],{"class":42},[36,75308,63190],{"class":62},[36,75310,3711],{"class":42},[36,75312,75313,75315,75317,75319],{"class":38,"line":35075},[36,75314,59634],{"class":62},[36,75316,2158],{"class":42},[36,75318,53940],{"class":62},[36,75320,3711],{"class":42},[36,75322,75323,75325,75327,75329],{"class":38,"line":35081},[36,75324,66317],{"class":62},[36,75326,2158],{"class":42},[36,75328,57085],{"class":62},[36,75330,3711],{"class":42},[36,75332,75333,75335,75337,75340],{"class":38,"line":35087},[36,75334,57232],{"class":62},[36,75336,2158],{"class":42},[36,75338,75339],{"class":62},"orange",[36,75341,3711],{"class":42},[36,75343,75344,75346,75348,75351,75353],{"class":38,"line":35093},[36,75345,57482],{"class":62},[36,75347,2158],{"class":42},[36,75349,75350],{"class":62},"12.5",[36,75352,53840],{"class":46},[36,75354,3711],{"class":42},[36,75356,75357],{"class":38,"line":35099},[36,75358,4580],{"class":42},[36,75360,75361,75363,75365],{"class":38,"line":35105},[36,75362,54765],{"class":42},[36,75364,2467],{"class":53649},[36,75366,53656],{"class":42},[36,75368,75369,75371,75373],{"class":38,"line":35125},[36,75370,54133],{"class":42},[36,75372,53683],{"class":53649},[36,75374,53656],{"class":42},[36,75376,75377],{"class":38,"line":35131},[36,75378,70],{"emptyLinePlaceholder":69},[36,75380,75381,75383,75385],{"class":38,"line":35147},[36,75382,3463],{"class":42},[36,75384,54148],{"class":53649},[36,75386,53656],{"class":42},[36,75388,75389,75391,75393,75396,75398],{"class":38,"line":35153},[36,75390,54492],{"class":42},[36,75392,14],{"class":53649},[36,75394,75395],{"class":42},">学生就业统计表\u003C\u002F",[36,75397,14],{"class":53649},[36,75399,53656],{"class":42},[36,75401,75402,75404,75406,75408,75410,75412,75414,75416,75418],{"class":38,"line":35167},[36,75403,54492],{"class":42},[36,75405,68972],{"class":53649},[36,75407,55834],{"class":79},[36,75409,47],{"class":42},[36,75411,65012],{"class":50},[36,75413,71417],{"class":79},[36,75415,47],{"class":42},[36,75417,34130],{"class":50},[36,75419,53656],{"class":42},[36,75421,75422,75424,75426,75428,75430,75432,75434,75436,75438,75440,75442,75445,75447,75449,75451],{"class":38,"line":35173},[36,75423,53690],{"class":42},[36,75425,56169],{"class":53649},[36,75427,56172],{"class":79},[36,75429,47],{"class":42},[36,75431,65046],{"class":50},[36,75433,17295],{"class":79},[36,75435,47],{"class":42},[36,75437,71443],{"class":50},[36,75439,63368],{"class":79},[36,75441,47],{"class":42},[36,75443,75444],{"class":50},"\"姓名\"",[36,75446,55834],{"class":79},[36,75448,47],{"class":42},[36,75450,71443],{"class":50},[36,75452,53656],{"class":42},[36,75454,75455,75457,75459,75461,75463,75465,75467,75469,75471,75473,75475,75478,75480,75482,75484],{"class":38,"line":35188},[36,75456,53690],{"class":42},[36,75458,56169],{"class":53649},[36,75460,56172],{"class":79},[36,75462,47],{"class":42},[36,75464,65046],{"class":50},[36,75466,17295],{"class":79},[36,75468,47],{"class":42},[36,75470,2260],{"class":50},[36,75472,63368],{"class":79},[36,75474,47],{"class":42},[36,75476,75477],{"class":50},"\"年龄\"",[36,75479,55834],{"class":79},[36,75481,47],{"class":42},[36,75483,2260],{"class":50},[36,75485,53656],{"class":42},[36,75487,75488,75490,75492,75494,75496,75498,75500,75502,75504,75506,75508,75511,75513,75515,75517],{"class":38,"line":35194},[36,75489,53690],{"class":42},[36,75491,56169],{"class":53649},[36,75493,56172],{"class":79},[36,75495,47],{"class":42},[36,75497,65046],{"class":50},[36,75499,17295],{"class":79},[36,75501,47],{"class":42},[36,75503,71572],{"class":50},[36,75505,63368],{"class":79},[36,75507,47],{"class":42},[36,75509,75510],{"class":50},"\"薪资\"",[36,75512,55834],{"class":79},[36,75514,47],{"class":42},[36,75516,71572],{"class":50},[36,75518,53656],{"class":42},[36,75520,75521,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543],{"class":38,"line":35203},[36,75522,53690],{"class":42},[36,75524,71490],{"class":53649},[36,75526,17295],{"class":79},[36,75528,47],{"class":42},[36,75530,71497],{"class":50},[36,75532,17334],{"class":79},[36,75534,47],{"class":42},[36,75536,10033],{"class":50},[36,75538,55834],{"class":79},[36,75540,47],{"class":42},[36,75542,71497],{"class":50},[36,75544,53656],{"class":42},[36,75546,75547,75549,75551,75553,75555,75557,75559,75561],{"class":38,"line":35209},[36,75548,57582],{"class":42},[36,75550,71512],{"class":53649},[36,75552,68998],{"class":79},[36,75554,47],{"class":42},[36,75556,12340],{"class":50},[36,75558,71521],{"class":42},[36,75560,71512],{"class":53649},[36,75562,53656],{"class":42},[36,75564,75565,75567,75569,75571,75573,75575,75577,75579],{"class":38,"line":35218},[36,75566,57582],{"class":42},[36,75568,71512],{"class":53649},[36,75570,68998],{"class":79},[36,75572,47],{"class":42},[36,75574,12409],{"class":50},[36,75576,71540],{"class":42},[36,75578,71512],{"class":53649},[36,75580,53656],{"class":42},[36,75582,75583,75585,75587],{"class":38,"line":35224},[36,75584,54124],{"class":42},[36,75586,71490],{"class":53649},[36,75588,53656],{"class":42},[36,75590,75591,75593,75595,75597,75599,75601,75603,75605,75607,75609,75611,75613],{"class":38,"line":35230},[36,75592,53690],{"class":42},[36,75594,71490],{"class":53649},[36,75596,17295],{"class":79},[36,75598,47],{"class":42},[36,75600,71594],{"class":50},[36,75602,17334],{"class":79},[36,75604,47],{"class":42},[36,75606,10033],{"class":50},[36,75608,55834],{"class":79},[36,75610,47],{"class":42},[36,75612,71594],{"class":50},[36,75614,53656],{"class":42},[36,75616,75617,75619,75621,75623,75625,75627,75629,75631],{"class":38,"line":35239},[36,75618,57582],{"class":42},[36,75620,71512],{"class":53649},[36,75622,68998],{"class":79},[36,75624,47],{"class":42},[36,75626,71615],{"class":50},[36,75628,71618],{"class":42},[36,75630,71512],{"class":53649},[36,75632,53656],{"class":42},[36,75634,75635,75637,75639,75641,75643,75645,75647,75649],{"class":38,"line":35245},[36,75636,57582],{"class":42},[36,75638,71512],{"class":53649},[36,75640,68998],{"class":79},[36,75642,47],{"class":42},[36,75644,71635],{"class":50},[36,75646,71638],{"class":42},[36,75648,71512],{"class":53649},[36,75650,53656],{"class":42},[36,75652,75653,75655,75657,75659,75661,75663,75665,75667],{"class":38,"line":35256},[36,75654,57582],{"class":42},[36,75656,71512],{"class":53649},[36,75658,68998],{"class":79},[36,75660,47],{"class":42},[36,75662,71655],{"class":50},[36,75664,71658],{"class":42},[36,75666,71512],{"class":53649},[36,75668,53656],{"class":42},[36,75670,75671,75673,75675,75677,75679,75681,75683,75685],{"class":38,"line":35262},[36,75672,57582],{"class":42},[36,75674,71512],{"class":53649},[36,75676,68998],{"class":79},[36,75678,47],{"class":42},[36,75680,71675],{"class":50},[36,75682,71678],{"class":42},[36,75684,71512],{"class":53649},[36,75686,53656],{"class":42},[36,75688,75689,75691,75693,75695,75697,75699,75701,75703],{"class":38,"line":35281},[36,75690,57582],{"class":42},[36,75692,71512],{"class":53649},[36,75694,68998],{"class":79},[36,75696,47],{"class":42},[36,75698,71695],{"class":50},[36,75700,71698],{"class":42},[36,75702,71512],{"class":53649},[36,75704,53656],{"class":42},[36,75706,75707,75709,75711],{"class":38,"line":35287},[36,75708,54124],{"class":42},[36,75710,71490],{"class":53649},[36,75712,53656],{"class":42},[36,75714,75715,75717,75719],{"class":38,"line":35298},[36,75716,53690],{"class":42},[36,75718,56235],{"class":53649},[36,75720,53656],{"class":42},[36,75722,75723,75725,75727,75730,75732,75735,75737],{"class":38,"line":35304},[36,75724,57582],{"class":42},[36,75726,36],{"class":53649},[36,75728,75729],{"class":42},">+\u003C\u002F",[36,75731,36],{"class":53649},[36,75733,75734],{"class":42},">添加\u003C\u002F",[36,75736,56235],{"class":53649},[36,75738,53656],{"class":42},[36,75740,75741,75743,75745],{"class":38,"line":35324},[36,75742,54765],{"class":42},[36,75744,68972],{"class":53649},[36,75746,53656],{"class":42},[36,75748,75749,75751,75753,75755,75757,75759,75762,75764,75767,75769,75772,75774],{"class":38,"line":35340},[36,75750,54492],{"class":42},[36,75752,53959],{"class":53649},[36,75754,55834],{"class":79},[36,75756,47],{"class":42},[36,75758,64928],{"class":50},[36,75760,75761],{"class":42},">共有数据 \u003C",[36,75763,36],{"class":53649},[36,75765,75766],{"class":42},">0\u003C\u002F",[36,75768,36],{"class":53649},[36,75770,75771],{"class":42},"> 条\u003C\u002F",[36,75773,53959],{"class":53649},[36,75775,53656],{"class":42},[36,75777,75778,75780,75782],{"class":38,"line":35346},[36,75779,54492],{"class":42},[36,75781,2698],{"class":53649},[36,75783,53656],{"class":42},[36,75785,75786,75788,75790],{"class":38,"line":35360},[36,75787,53690],{"class":42},[36,75789,2701],{"class":53649},[36,75791,53656],{"class":42},[36,75793,75794,75796,75798],{"class":38,"line":35366},[36,75795,57582],{"class":42},[36,75797,2704],{"class":53649},[36,75799,53656],{"class":42},[36,75801,75802,75804,75806,75809,75811],{"class":38,"line":35372},[36,75803,57650],{"class":42},[36,75805,2707],{"class":53649},[36,75807,75808],{"class":42},">ID\u003C\u002F",[36,75810,2707],{"class":53649},[36,75812,53656],{"class":42},[36,75814,75815,75817,75819,75821,75823],{"class":38,"line":35383},[36,75816,57650],{"class":42},[36,75818,2707],{"class":53649},[36,75820,71801],{"class":42},[36,75822,2707],{"class":53649},[36,75824,53656],{"class":42},[36,75826,75827,75829,75831,75833,75835],{"class":38,"line":35389},[36,75828,57650],{"class":42},[36,75830,2707],{"class":53649},[36,75832,71814],{"class":42},[36,75834,2707],{"class":53649},[36,75836,53656],{"class":42},[36,75838,75839,75841,75843,75845,75847],{"class":38,"line":35395},[36,75840,57650],{"class":42},[36,75842,2707],{"class":53649},[36,75844,71827],{"class":42},[36,75846,2707],{"class":53649},[36,75848,53656],{"class":42},[36,75850,75851,75853,75855,75857,75859],{"class":38,"line":35405},[36,75852,57650],{"class":42},[36,75854,2707],{"class":53649},[36,75856,71840],{"class":42},[36,75858,2707],{"class":53649},[36,75860,53656],{"class":42},[36,75862,75863,75865,75867,75869,75871],{"class":38,"line":35411},[36,75864,57650],{"class":42},[36,75866,2707],{"class":53649},[36,75868,71853],{"class":42},[36,75870,2707],{"class":53649},[36,75872,53656],{"class":42},[36,75874,75875,75877,75879,75882,75884],{"class":38,"line":35422},[36,75876,57650],{"class":42},[36,75878,2707],{"class":53649},[36,75880,75881],{"class":42},">录入时间\u003C\u002F",[36,75883,2707],{"class":53649},[36,75885,53656],{"class":42},[36,75887,75888,75890,75892,75894,75896],{"class":38,"line":35428},[36,75889,57650],{"class":42},[36,75891,2707],{"class":53649},[36,75893,71866],{"class":42},[36,75895,2707],{"class":53649},[36,75897,53656],{"class":42},[36,75899,75900,75902,75904],{"class":38,"line":35438},[36,75901,57755],{"class":42},[36,75903,2704],{"class":53649},[36,75905,53656],{"class":42},[36,75907,75908,75910,75912],{"class":38,"line":35443},[36,75909,54124],{"class":42},[36,75911,2701],{"class":53649},[36,75913,53656],{"class":42},[36,75915,75916,75918,75920],{"class":38,"line":35449},[36,75917,53690],{"class":42},[36,75919,2744],{"class":53649},[36,75921,53656],{"class":42},[36,75923,75924],{"class":38,"line":35498},[36,75925,75926],{"class":2621},"      \u003C!-- \u003Ctr>\n",[36,75928,75929],{"class":38,"line":35545},[36,75930,75931],{"class":2621},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,75933,75934],{"class":38,"line":35550},[36,75935,75931],{"class":2621},[36,75937,75938],{"class":38,"line":35556},[36,75939,75931],{"class":2621},[36,75941,75942],{"class":38,"line":35575},[36,75943,75931],{"class":2621},[36,75945,75946],{"class":38,"line":35581},[36,75947,75931],{"class":2621},[36,75949,75950],{"class":38,"line":35601},[36,75951,75931],{"class":2621},[36,75953,75954],{"class":38,"line":35607},[36,75955,75931],{"class":2621},[36,75957,75958],{"class":38,"line":35613},[36,75959,75960],{"class":2621},"        \u003Ctd>\n",[36,75962,75963],{"class":38,"line":35623},[36,75964,75965],{"class":2621},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,75967,75968],{"class":38,"line":35628},[36,75969,75970],{"class":2621},"        \u003C\u002Ftd>\n",[36,75972,75973],{"class":38,"line":35634},[36,75974,75975],{"class":2621},"      \u003C\u002Ftr> -->\n",[36,75977,75978,75980,75982],{"class":38,"line":35650},[36,75979,54124],{"class":42},[36,75981,2744],{"class":53649},[36,75983,53656],{"class":42},[36,75985,75986,75988,75990],{"class":38,"line":35695},[36,75987,54765],{"class":42},[36,75989,2698],{"class":53649},[36,75991,53656],{"class":42},[36,75993,75994,75996,75998],{"class":38,"line":35701},[36,75995,54492],{"class":42},[36,75997,54161],{"class":53649},[36,75999,53656],{"class":42},[36,76001,76002],{"class":38,"line":35707},[36,76003,76004],{"class":2621},"    \u002F\u002F const initData = [{\n",[36,76006,76007],{"class":38,"line":35713},[36,76008,76009],{"class":2621},"    \u002F\u002F   unameId: 1,\n",[36,76011,76012],{"class":38,"line":35724},[36,76013,76014],{"class":2621},"    \u002F\u002F   uname: '华晨宇',\n",[36,76016,76017],{"class":38,"line":35730},[36,76018,76019],{"class":2621},"    \u002F\u002F   age: 22,\n",[36,76021,76022],{"class":38,"line":35736},[36,76023,76024],{"class":2621},"    \u002F\u002F   salary: 12000,\n",[36,76026,76027],{"class":38,"line":35742},[36,76028,76029],{"class":2621},"    \u002F\u002F   gender: '男',\n",[36,76031,76032],{"class":38,"line":35760},[36,76033,76034],{"class":2621},"    \u002F\u002F   city: '北京',\n",[36,76036,76037],{"class":38,"line":35774},[36,76038,76039],{"class":2621},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,76041,76042],{"class":38,"line":35783},[36,76043,76044],{"class":2621},"    \u002F\u002F }]\n",[36,76046,76047],{"class":38,"line":35792},[36,76048,76049],{"class":2621},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,76051,76052],{"class":38,"line":35801},[36,76053,76054],{"class":2621},"    \u002F\u002F 1.渲染业务\n",[36,76056,76057],{"class":38,"line":35810},[36,76058,76059],{"class":2621},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,76061,76062],{"class":38,"line":35816},[36,76063,76064],{"class":2621},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,76066,76067],{"class":38,"line":35822},[36,76068,76069],{"class":2621},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,76071,76072],{"class":38,"line":35830},[36,76073,70],{"emptyLinePlaceholder":69},[36,76075,76076],{"class":38,"line":35835},[36,76077,76078],{"class":2621},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,76080,76081],{"class":38,"line":35841},[36,76082,76083],{"class":2621},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,76085,76086,76088,76090,76092],{"class":38,"line":35852},[36,76087,13599],{"class":46},[36,76089,60043],{"class":62},[36,76091,15941],{"class":46},[36,76093,54186],{"class":42},[36,76095,76096,76099,76101],{"class":38,"line":35858},[36,76097,76098],{"class":42},"    console.",[36,76100,60595],{"class":79},[36,76102,54760],{"class":42},[36,76104,76105],{"class":38,"line":35878},[36,76106,70],{"emptyLinePlaceholder":69},[36,76108,76109],{"class":38,"line":35884},[36,76110,76111],{"class":2621},"    \u002F\u002F 时间函数\n",[36,76113,76114,76116,76119],{"class":38,"line":35890},[36,76115,72430],{"class":46},[36,76117,76118],{"class":79}," getTime",[36,76120,13232],{"class":42},[36,76122,76123,76125,76128,76130,76132,76135],{"class":38,"line":35896},[36,76124,60576],{"class":46},[36,76126,76127],{"class":62}," date",[36,76129,15941],{"class":46},[36,76131,13956],{"class":46},[36,76133,76134],{"class":79}," Date",[36,76136,4369],{"class":42},[36,76138,76139,76141,76143,76145,76148,76151,76153,76155,76157,76160,76163,76165,76167,76169,76171,76173,76175,76177],{"class":38,"line":35913},[36,76140,60576],{"class":46},[36,76142,18464],{"class":62},[36,76144,15941],{"class":46},[36,76146,76147],{"class":42}," date.",[36,76149,76150],{"class":79},"getHours",[36,76152,15427],{"class":42},[36,76154,3463],{"class":46},[36,76156,4431],{"class":62},[36,76158,76159],{"class":46}," ?",[36,76161,76162],{"class":50}," '0'",[36,76164,47915],{"class":46},[36,76166,76147],{"class":42},[36,76168,76150],{"class":79},[36,76170,15427],{"class":42},[36,76172,3413],{"class":46},[36,76174,76147],{"class":42},[36,76176,76150],{"class":79},[36,76178,4369],{"class":42},[36,76180,76181,76183,76186,76188,76190,76193,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217],{"class":38,"line":35919},[36,76182,60576],{"class":46},[36,76184,76185],{"class":62}," m",[36,76187,15941],{"class":46},[36,76189,76147],{"class":42},[36,76191,76192],{"class":79},"getMinutes",[36,76194,15427],{"class":42},[36,76196,3463],{"class":46},[36,76198,4431],{"class":62},[36,76200,76159],{"class":46},[36,76202,76162],{"class":50},[36,76204,47915],{"class":46},[36,76206,76147],{"class":42},[36,76208,76192],{"class":79},[36,76210,15427],{"class":42},[36,76212,3413],{"class":46},[36,76214,76147],{"class":42},[36,76216,76192],{"class":79},[36,76218,4369],{"class":42},[36,76220,76221,76223,76225,76227,76229,76232,76234,76236,76238,76240,76242,76244,76246,76248,76250,76252,76254,76256],{"class":38,"line":35925},[36,76222,60576],{"class":46},[36,76224,10808],{"class":62},[36,76226,15941],{"class":46},[36,76228,76147],{"class":42},[36,76230,76231],{"class":79},"getSeconds",[36,76233,15427],{"class":42},[36,76235,3463],{"class":46},[36,76237,4431],{"class":62},[36,76239,76159],{"class":46},[36,76241,76162],{"class":50},[36,76243,47915],{"class":46},[36,76245,76147],{"class":42},[36,76247,76231],{"class":79},[36,76249,15427],{"class":42},[36,76251,3413],{"class":46},[36,76253,76147],{"class":42},[36,76255,76231],{"class":79},[36,76257,4369],{"class":42},[36,76259,76260,76262,76265,76267,76269,76272,76274,76277,76279,76282,76284,76286,76289,76291,76293,76295,76297,76299,76301,76304,76306,76309,76311,76314,76316,76318,76320],{"class":38,"line":35931},[36,76261,60576],{"class":46},[36,76263,76264],{"class":62}," str",[36,76266,15941],{"class":46},[36,76268,65250],{"class":50},[36,76270,76271],{"class":42},"date",[36,76273,3113],{"class":50},[36,76275,76276],{"class":79},"getFullYear",[36,76278,4819],{"class":50},[36,76280,76281],{"class":50},"}\u002F${",[36,76283,76271],{"class":42},[36,76285,3113],{"class":50},[36,76287,76288],{"class":79},"getMonth",[36,76290,15427],{"class":50},[36,76292,1885],{"class":46},[36,76294,27489],{"class":62},[36,76296,76281],{"class":50},[36,76298,76271],{"class":42},[36,76300,3113],{"class":50},[36,76302,76303],{"class":79},"getDate",[36,76305,4819],{"class":50},[36,76307,76308],{"class":50},"} ${",[36,76310,2971],{"class":42},[36,76312,76313],{"class":50},"}:${",[36,76315,3099],{"class":42},[36,76317,76313],{"class":50},[36,76319,3249],{"class":42},[36,76321,76322],{"class":50},"}`\n",[36,76324,76325,76328],{"class":38,"line":35937},[36,76326,76327],{"class":46},"      return",[36,76329,76330],{"class":42}," str\n",[36,76332,76333],{"class":38,"line":35943},[36,76334,4580],{"class":42},[36,76336,76337],{"class":38,"line":35970},[36,76338,76339],{"class":2621},"    \u002F\u002F 渲染函数\n",[36,76341,76342,76344,76346,76348,76350,76352,76354,76356],{"class":38,"line":35994},[36,76343,13599],{"class":46},[36,76345,72093],{"class":62},[36,76347,15941],{"class":46},[36,76349,56744],{"class":42},[36,76351,56747],{"class":79},[36,76353,92],{"class":42},[36,76355,72104],{"class":50},[36,76357,123],{"class":42},[36,76359,76360,76362,76364],{"class":38,"line":36000},[36,76361,72430],{"class":46},[36,76363,72433],{"class":79},[36,76365,13232],{"class":42},[36,76367,76368],{"class":38,"line":36006},[36,76369,76370],{"class":2621},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,76372,76373],{"class":38,"line":36012},[36,76374,76375],{"class":2621},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,76377,76378,76380,76383,76385,76387,76390,76392,76394,76396,76399,76401,76404],{"class":38,"line":36023},[36,76379,60576],{"class":46},[36,76381,76382],{"class":62}," trArr",[36,76384,15941],{"class":46},[36,76386,54313],{"class":42},[36,76388,76389],{"class":79},"map",[36,76391,92],{"class":42},[36,76393,56797],{"class":46},[36,76395,4066],{"class":42},[36,76397,76398],{"class":7598},"ele",[36,76400,630],{"class":42},[36,76402,76403],{"class":7598},"index",[36,76405,14819],{"class":42},[36,76407,76408,76410],{"class":38,"line":36034},[36,76409,736],{"class":46},[36,76411,72514],{"class":50},[36,76413,76414],{"class":38,"line":36040},[36,76415,76416],{"class":50},"      \u003Ctr>\n",[36,76418,76419,76421,76423,76425,76428],{"class":38,"line":36057},[36,76420,72519],{"class":50},[36,76422,76398],{"class":42},[36,76424,3113],{"class":50},[36,76426,76427],{"class":42},"unameId",[36,76429,72534],{"class":50},[36,76431,76432,76434,76436,76438,76440],{"class":38,"line":36080},[36,76433,72519],{"class":50},[36,76435,76398],{"class":42},[36,76437,3113],{"class":50},[36,76439,72550],{"class":42},[36,76441,72534],{"class":50},[36,76443,76444,76446,76448,76450,76452],{"class":38,"line":36103},[36,76445,72519],{"class":50},[36,76447,76398],{"class":42},[36,76449,3113],{"class":50},[36,76451,115],{"class":42},[36,76453,72534],{"class":50},[36,76455,76456,76458,76460,76462,76464],{"class":38,"line":36109},[36,76457,72519],{"class":50},[36,76459,76398],{"class":42},[36,76461,3113],{"class":50},[36,76463,72583],{"class":42},[36,76465,72534],{"class":50},[36,76467,76468,76470,76472,76474,76476],{"class":38,"line":36114},[36,76469,72519],{"class":50},[36,76471,76398],{"class":42},[36,76473,3113],{"class":50},[36,76475,72600],{"class":42},[36,76477,72534],{"class":50},[36,76479,76480,76482,76484,76486,76488],{"class":38,"line":36123},[36,76481,72519],{"class":50},[36,76483,76398],{"class":42},[36,76485,3113],{"class":50},[36,76487,72617],{"class":42},[36,76489,72534],{"class":50},[36,76491,76492,76494,76496,76498,76500],{"class":38,"line":36133},[36,76493,72519],{"class":50},[36,76495,76398],{"class":42},[36,76497,3113],{"class":50},[36,76499,4780],{"class":42},[36,76501,72534],{"class":50},[36,76503,76504],{"class":38,"line":36139},[36,76505,75960],{"class":50},[36,76507,76508,76511,76513],{"class":38,"line":36144},[36,76509,76510],{"class":50},"          \u003Ca href=\"#\" data-id=\"${",[36,76512,76403],{"class":42},[36,76514,76515],{"class":50},"}\">删除\u003C\u002Fa>\n",[36,76517,76518],{"class":38,"line":36150},[36,76519,75970],{"class":50},[36,76521,76522],{"class":38,"line":36163},[36,76523,76524],{"class":50},"      \u003C\u002Ftr>\n",[36,76526,76527],{"class":38,"line":36169},[36,76528,76529],{"class":50},"  `\n",[36,76531,76532],{"class":38,"line":36180},[36,76533,67162],{"class":42},[36,76535,76536,76538,76540],{"class":38,"line":36191},[36,76537,60592],{"class":42},[36,76539,60595],{"class":79},[36,76541,76542],{"class":42},"(trArr)\n",[36,76544,76545],{"class":38,"line":36210},[36,76546,70],{"emptyLinePlaceholder":69},[36,76548,76549],{"class":38,"line":51867},[36,76550,76551],{"class":2621},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,76553,76554],{"class":38,"line":51872},[36,76555,76556],{"class":2621},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,76558,76559,76561,76563,76566,76569,76571,76574],{"class":38,"line":51881},[36,76560,72445],{"class":42},[36,76562,47],{"class":46},[36,76564,76565],{"class":42}," trArr.",[36,76567,76568],{"class":79},"join",[36,76570,92],{"class":42},[36,76572,76573],{"class":50},"''",[36,76575,123],{"class":42},[36,76577,76578],{"class":38,"line":51890},[36,76579,76580],{"class":2621},"      \u002F\u002F 显示共有几条\n",[36,76582,76583,76585,76587,76589,76592,76595,76597,76599],{"class":38,"line":51895},[36,76584,58119],{"class":42},[36,76586,56747],{"class":79},[36,76588,92],{"class":42},[36,76590,76591],{"class":50},"'.total span'",[36,76593,76594],{"class":42},").innerHTML ",[36,76596,47],{"class":46},[36,76598,54313],{"class":42},[36,76600,58179],{"class":62},[36,76602,76603],{"class":38,"line":51900},[36,76604,4580],{"class":42},[36,76606,76607],{"class":38,"line":51905},[36,76608,76609],{"class":2621},"    \u002F\u002F render()\n",[36,76611,76612],{"class":38,"line":51918},[36,76613,70],{"emptyLinePlaceholder":69},[36,76615,76616],{"class":38,"line":51923},[36,76617,76618],{"class":2621},"    \u002F\u002F 获取DOM对象\n",[36,76620,76621,76623,76625,76627,76629,76631,76633,76635],{"class":38,"line":51932},[36,76622,13599],{"class":46},[36,76624,72167],{"class":62},[36,76626,15941],{"class":46},[36,76628,56744],{"class":42},[36,76630,56747],{"class":79},[36,76632,92],{"class":42},[36,76634,72178],{"class":50},[36,76636,123],{"class":42},[36,76638,76639,76641,76643,76645,76647,76649,76651,76653],{"class":38,"line":51941},[36,76640,13599],{"class":46},[36,76642,71994],{"class":62},[36,76644,15941],{"class":46},[36,76646,56744],{"class":42},[36,76648,56747],{"class":79},[36,76650,92],{"class":42},[36,76652,72005],{"class":50},[36,76654,123],{"class":42},[36,76656,76657,76659,76661,76663,76665,76667,76669,76671],{"class":38,"line":51958},[36,76658,13599],{"class":46},[36,76660,18062],{"class":62},[36,76662,15941],{"class":46},[36,76664,56744],{"class":42},[36,76666,56747],{"class":79},[36,76668,92],{"class":42},[36,76670,72024],{"class":50},[36,76672,123],{"class":42},[36,76674,76676,76678,76680,76682,76684,76686,76688,76690],{"class":38,"line":76675},231,[36,76677,13599],{"class":46},[36,76679,72053],{"class":62},[36,76681,15941],{"class":46},[36,76683,56744],{"class":42},[36,76685,56747],{"class":79},[36,76687,92],{"class":42},[36,76689,72064],{"class":50},[36,76691,123],{"class":42},[36,76693,76695,76697,76699,76701,76703,76705,76707,76709],{"class":38,"line":76694},232,[36,76696,13599],{"class":46},[36,76698,72033],{"class":62},[36,76700,15941],{"class":46},[36,76702,56744],{"class":42},[36,76704,56747],{"class":79},[36,76706,92],{"class":42},[36,76708,72044],{"class":50},[36,76710,123],{"class":42},[36,76712,76714,76716,76718,76720,76722,76724,76726,76728],{"class":38,"line":76713},233,[36,76715,13599],{"class":46},[36,76717,72073],{"class":62},[36,76719,15941],{"class":46},[36,76721,56744],{"class":42},[36,76723,56747],{"class":79},[36,76725,92],{"class":42},[36,76727,72084],{"class":50},[36,76729,123],{"class":42},[36,76731,76733],{"class":38,"line":76732},234,[36,76734,70],{"emptyLinePlaceholder":69},[36,76736,76738],{"class":38,"line":76737},235,[36,76739,76740],{"class":2621},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,76742,76744,76746,76748,76750,76752,76754,76756,76758,76760],{"class":38,"line":76743},236,[36,76745,72185],{"class":42},[36,76747,60161],{"class":79},[36,76749,92],{"class":42},[36,76751,72192],{"class":50},[36,76753,630],{"class":42},[36,76755,56797],{"class":46},[36,76757,4066],{"class":42},[36,76759,2637],{"class":7598},[36,76761,14819],{"class":42},[36,76763,76765],{"class":38,"line":76764},237,[36,76766,76767],{"class":2621},"      \u002F\u002F 禁止浏览器跳转\n",[36,76769,76771,76773,76775],{"class":38,"line":76770},238,[36,76772,72212],{"class":42},[36,76774,72215],{"class":79},[36,76776,4369],{"class":42},[36,76778,76780],{"class":38,"line":76779},239,[36,76781,76782],{"class":2621},"      \u002F\u002F 非空判断\n",[36,76784,76786],{"class":38,"line":76785},240,[36,76787,76788],{"class":2621},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,76790,76792],{"class":38,"line":76791},241,[36,76793,76794],{"class":2621},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,76796,76798,76800,76802,76804,76807,76809,76812,76815,76817,76819],{"class":38,"line":76797},242,[36,76799,56828],{"class":46},[36,76801,4066],{"class":42},[36,76803,2784],{"class":46},[36,76805,76806],{"class":42},"uname.value ",[36,76808,73702],{"class":46},[36,76810,76811],{"class":46}," !",[36,76813,76814],{"class":42},"age.value ",[36,76816,73702],{"class":46},[36,76818,76811],{"class":46},[36,76820,76821],{"class":42},"salary.value) {\n",[36,76823,76825,76827,76829,76831,76833],{"class":38,"line":76824},243,[36,76826,736],{"class":46},[36,76828,72286],{"class":79},[36,76830,92],{"class":42},[36,76832,72291],{"class":50},[36,76834,123],{"class":42},[36,76836,76838],{"class":38,"line":76837},244,[36,76839,54746],{"class":42},[36,76841,76843,76845,76847],{"class":38,"line":76842},245,[36,76844,60355],{"class":42},[36,76846,54232],{"class":79},[36,76848,76849],{"class":42},"({\n",[36,76851,76853],{"class":38,"line":76852},246,[36,76854,76855],{"class":2621},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,76857,76859],{"class":38,"line":76858},247,[36,76860,76861],{"class":2621},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,76863,76865],{"class":38,"line":76864},248,[36,76866,76867],{"class":2621},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,76869,76871],{"class":38,"line":76870},249,[36,76872,76873],{"class":2621},"        \u002F\u002F unameId: arr.length + 1,\n",[36,76875,76877],{"class":38,"line":76876},250,[36,76878,70],{"emptyLinePlaceholder":69},[36,76880,76882],{"class":38,"line":76881},251,[36,76883,76884],{"class":2621},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,76886,76888],{"class":38,"line":76887},252,[36,76889,76890],{"class":2621},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,76892,76894],{"class":38,"line":76893},253,[36,76895,76896],{"class":2621},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,76898,76900],{"class":38,"line":76899},254,[36,76901,76902],{"class":2621},"        \u002F\u002F 0当假看\n",[36,76904,76906,76909,76911,76913,76916,76918,76920,76922,76925,76927,76929,76932,76934],{"class":38,"line":76905},255,[36,76907,76908],{"class":42},"        unameId: arr.",[36,76910,54316],{"class":62},[36,76912,76159],{"class":46},[36,76914,76915],{"class":42}," arr[arr.",[36,76917,54316],{"class":62},[36,76919,54619],{"class":46},[36,76921,27489],{"class":62},[36,76923,76924],{"class":42},"].unameId ",[36,76926,1885],{"class":46},[36,76928,27489],{"class":62},[36,76930,76931],{"class":46}," :",[36,76933,27489],{"class":62},[36,76935,33820],{"class":42},[36,76937,76939],{"class":38,"line":76938},256,[36,76940,72339],{"class":42},[36,76942,76944],{"class":38,"line":76943},257,[36,76945,72344],{"class":42},[36,76947,76949],{"class":38,"line":76948},258,[36,76950,72354],{"class":42},[36,76952,76954],{"class":38,"line":76953},259,[36,76955,72349],{"class":42},[36,76957,76959],{"class":38,"line":76958},260,[36,76960,76961],{"class":42},"        city: city.value,\n",[36,76963,76965],{"class":38,"line":76964},261,[36,76966,76967],{"class":2621},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,76969,76971],{"class":38,"line":76970},262,[36,76972,76973],{"class":2621},"        \u002F\u002F time: new Date().toDateString()\n",[36,76975,76977,76980,76983],{"class":38,"line":76976},263,[36,76978,76979],{"class":42},"        time: ",[36,76981,76982],{"class":79},"getTime",[36,76984,4369],{"class":42},[36,76986,76988],{"class":38,"line":76987},264,[36,76989,67162],{"class":42},[36,76991,76993],{"class":38,"line":76992},265,[36,76994,76995],{"class":2621},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,76997,76999,77001],{"class":38,"line":76998},266,[36,77000,72414],{"class":79},[36,77002,4369],{"class":42},[36,77004,77006,77008,77010,77012,77014],{"class":38,"line":77005},267,[36,77007,72397],{"class":62},[36,77009,3113],{"class":42},[36,77011,72402],{"class":79},[36,77013,15427],{"class":42},[36,77015,77016],{"class":2621},"\u002F\u002F重置表单\n",[36,77018,77020],{"class":38,"line":77019},268,[36,77021,77022],{"class":2621},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,77024,77026,77029,77031,77033,77036,77038,77040,77042,77044],{"class":38,"line":77025},269,[36,77027,77028],{"class":42},"      localStorage.",[36,77030,73999],{"class":79},[36,77032,92],{"class":42},[36,77034,77035],{"class":50},"'data'",[36,77037,630],{"class":42},[36,77039,74009],{"class":62},[36,77041,3113],{"class":42},[36,77043,74014],{"class":79},[36,77045,77046],{"class":42},"(arr))\n",[36,77048,77050],{"class":38,"line":77049},270,[36,77051,35813],{"class":42},[36,77053,77055],{"class":38,"line":77054},271,[36,77056,70],{"emptyLinePlaceholder":69},[36,77058,77060],{"class":38,"line":77059},272,[36,77061,77062],{"class":2621},"    \u002F\u002F 3.删除业务\n",[36,77064,77066],{"class":38,"line":77065},273,[36,77067,77068],{"class":2621},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,77070,77072,77074,77076,77078,77080,77082,77084,77086,77088],{"class":38,"line":77071},274,[36,77073,72686],{"class":42},[36,77075,60161],{"class":79},[36,77077,92],{"class":42},[36,77079,60166],{"class":50},[36,77081,630],{"class":42},[36,77083,56797],{"class":46},[36,77085,4066],{"class":42},[36,77087,2637],{"class":7598},[36,77089,14819],{"class":42},[36,77091,77093],{"class":38,"line":77092},275,[36,77094,77095],{"class":2621},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,77097,77099,77101,77103,77105,77107],{"class":38,"line":77098},276,[36,77100,56828],{"class":46},[36,77102,69381],{"class":42},[36,77104,56834],{"class":46},[36,77106,70603],{"class":50},[36,77108,14819],{"class":42},[36,77110,77112],{"class":38,"line":77111},277,[36,77113,77114],{"class":2621},"        \u002F\u002F alert(1)\n",[36,77116,77118],{"class":38,"line":77117},278,[36,77119,77120],{"class":2621},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,77122,77124],{"class":38,"line":77123},279,[36,77125,77126],{"class":2621},"        \u002F\u002F console.log(e.target)\n",[36,77128,77130],{"class":38,"line":77129},280,[36,77131,77132],{"class":2621},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,77134,77136],{"class":38,"line":77135},281,[36,77137,70],{"emptyLinePlaceholder":69},[36,77139,77141],{"class":38,"line":77140},282,[36,77142,77143],{"class":2621},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,77145,77147],{"class":38,"line":77146},283,[36,77148,77149],{"class":2621},"        \u002F\u002F confirm()为确认框\n",[36,77151,77153],{"class":38,"line":77152},284,[36,77154,77155],{"class":2621},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,77157,77159,77161,77163,77166,77168,77171],{"class":38,"line":77158},285,[36,77160,890],{"class":46},[36,77162,4066],{"class":42},[36,77164,77165],{"class":79},"confirm",[36,77167,92],{"class":42},[36,77169,77170],{"class":50},"'您确定要删除这条数据吗？'",[36,77172,77173],{"class":42},")) {\n",[36,77175,77177,77180,77182,77184,77186],{"class":38,"line":77176},286,[36,77178,77179],{"class":42},"          arr.",[36,77181,60358],{"class":79},[36,77183,72739],{"class":42},[36,77185,1906],{"class":62},[36,77187,123],{"class":42},[36,77189,77191],{"class":38,"line":77190},287,[36,77192,77193],{"class":2621},"          \u002F\u002F 3.4 重新渲染页面\n",[36,77195,77197,77200],{"class":38,"line":77196},288,[36,77198,77199],{"class":79},"          render",[36,77201,4369],{"class":42},[36,77203,77205],{"class":38,"line":77204},289,[36,77206,77207],{"class":2621},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,77209,77211,77214,77216,77218,77220,77222,77224,77226,77228],{"class":38,"line":77210},290,[36,77212,77213],{"class":42},"          localStorage.",[36,77215,73999],{"class":79},[36,77217,92],{"class":42},[36,77219,77035],{"class":50},[36,77221,630],{"class":42},[36,77223,74009],{"class":62},[36,77225,3113],{"class":42},[36,77227,74014],{"class":79},[36,77229,77046],{"class":42},[36,77231,77233],{"class":38,"line":77232},291,[36,77234,2204],{"class":42},[36,77236,77238],{"class":38,"line":77237},292,[36,77239,54746],{"class":42},[36,77241,77243],{"class":38,"line":77242},293,[36,77244,70],{"emptyLinePlaceholder":69},[36,77246,77248],{"class":38,"line":77247},294,[36,77249,35813],{"class":42},[36,77251,77253],{"class":38,"line":77252},295,[36,77254,70],{"emptyLinePlaceholder":69},[36,77256,77258,77260,77262],{"class":38,"line":77257},296,[36,77259,54765],{"class":42},[36,77261,54161],{"class":53649},[36,77263,53656],{"class":42},[36,77265,77267,77269,77271],{"class":38,"line":77266},297,[36,77268,54133],{"class":42},[36,77270,54148],{"class":53649},[36,77272,53656],{"class":42},[36,77274,77276],{"class":38,"line":77275},298,[36,77277,70],{"emptyLinePlaceholder":69},[36,77279,77281,77283,77285],{"class":38,"line":77280},299,[36,77282,54133],{"class":42},[36,77284,52984],{"class":53649},[36,77286,53656],{"class":42},[14,77288,77290],{"id":77289},"_36-正则表达式","3.6 正则表达式",[19,77292,77293],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77295,77296],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77298,77299],{},"正则表达式的作用：",[3557,77301,77302,77309,77315],{},[653,77303,77304,77305,77308],{},"表单验证（ ",[667,77306,77307],{},"匹配"," ）",[653,77310,77311,77312,77308],{},"过滤敏感词（ ",[667,77313,77314],{},"替换",[653,77316,77317,77318,77308],{},"字符串中提取我们想要的部分（ ",[667,77319,77320],{},"提取",[1752,77322,77324],{"id":77323},"_361-语法","3.6.1 语法",[19,77326,77327],{},"正则表达式使用步骤：",[650,77329,77330,77333],{},[653,77331,77332],{},"定义规则",[653,77334,77335],{},"查找是否匹配",[19,77337,77338],{},"正则表达式里边不需要写引号",[19,77340,77341],{},[3879,77342],{"alt":31,"src":77343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77345,77346],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77348,77349],{},"reg.test(str)",[19,77351,77352],{},[3879,77353],{"alt":31,"src":77354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77356,77357],{},[3879,77358],{"alt":31,"src":77359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1752,77361,77363],{"id":77362},"_362-元字符","3.6.2 元字符",[650,77365,77366,77369,77372,77375,77382],{},[653,77367,77368],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[653,77370,77371],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[653,77373,77374],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[653,77376,77377,77378],{},"正则验证工具：",[2796,77379,77380],{"href":77380,"rel":77381},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26235],[653,77383,77384],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24368,77386,77388],{"id":77387},"_3621-边界符","3.6.2.1 边界符",[19,77390,77391],{},[3879,77392],{"alt":31,"src":77393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77395,77396],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77398,77399],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77401,77402],{},"只匹配一次",[19,77404,77405],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24368,77407,77409],{"id":77408},"_3622-量词","3.6.2.2 量词",[19,77411,77412],{},[3879,77413],{"alt":31,"src":77414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77416,77417],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24368,77419,77421],{"id":77420},"_3623-元字符","3.6.2.3 元字符",[19,77423,77424],{},[3879,77425],{"alt":31,"src":77426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77428,77429],{},"匹配的是a或b或c []只选一个",[19,77431,77432],{},[3879,77433],{"alt":31,"src":77434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77436,77437],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77439,77440],{},[3879,77441],{"alt":31,"src":77442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77444,77445],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77447,77448],{},[3879,77449],{"alt":31,"src":77450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,77452,77454],{"className":52982,"code":77453,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,77455,77456,77466,77480,77484,77492,77506,77526,77538,77546,77550,77558,77566,77571,77602,77629,77657,77661,77666,77694,77725,77730,77735,77766,77798,77830,77834,77839,77870,77900,77930,77934,77939,77970,78001,78031,78061,78065,78070,78103,78107,78112,78143,78174,78178,78183,78214,78244,78275,78279,78284,78316,78347,78378,78405,78436,78468,78501,78532,78563,78595,78626,78634,78642,78646],{"__ignoreMap":31},[36,77457,77458,77460,77462,77464],{"class":38,"line":39},[36,77459,53646],{"class":42},[36,77461,53650],{"class":53649},[36,77463,53653],{"class":79},[36,77465,53656],{"class":42},[36,77467,77468,77470,77472,77474,77476,77478],{"class":38,"line":54},[36,77469,3463],{"class":42},[36,77471,52984],{"class":53649},[36,77473,53665],{"class":79},[36,77475,47],{"class":42},[36,77477,53670],{"class":50},[36,77479,53656],{"class":42},[36,77481,77482],{"class":38,"line":66},[36,77483,70],{"emptyLinePlaceholder":69},[36,77485,77486,77488,77490],{"class":38,"line":73},[36,77487,3463],{"class":42},[36,77489,53683],{"class":53649},[36,77491,53656],{"class":42},[36,77493,77494,77496,77498,77500,77502,77504],{"class":38,"line":86},[36,77495,54492],{"class":42},[36,77497,53693],{"class":53649},[36,77499,53696],{"class":79},[36,77501,47],{"class":42},[36,77503,53701],{"class":50},[36,77505,53656],{"class":42},[36,77507,77508,77510,77512,77514,77516,77518,77520,77522,77524],{"class":38,"line":126},[36,77509,54492],{"class":42},[36,77511,53693],{"class":53649},[36,77513,17295],{"class":79},[36,77515,47],{"class":42},[36,77517,53740],{"class":50},[36,77519,53720],{"class":79},[36,77521,47],{"class":42},[36,77523,53747],{"class":50},[36,77525,53656],{"class":42},[36,77527,77528,77530,77532,77534,77536],{"class":38,"line":131},[36,77529,54492],{"class":42},[36,77531,53756],{"class":53649},[36,77533,53759],{"class":42},[36,77535,53756],{"class":53649},[36,77537,53656],{"class":42},[36,77539,77540,77542,77544],{"class":38,"line":225},[36,77541,54133],{"class":42},[36,77543,53683],{"class":53649},[36,77545,53656],{"class":42},[36,77547,77548],{"class":38,"line":235},[36,77549,70],{"emptyLinePlaceholder":69},[36,77551,77552,77554,77556],{"class":38,"line":377},[36,77553,3463],{"class":42},[36,77555,54148],{"class":53649},[36,77557,53656],{"class":42},[36,77559,77560,77562,77564],{"class":38,"line":617},[36,77561,54492],{"class":42},[36,77563,54161],{"class":53649},[36,77565,53656],{"class":42},[36,77567,77568],{"class":38,"line":643},[36,77569,77570],{"class":2621},"    \u002F\u002F 元字符中\n",[36,77572,77573,77575,77577,77579,77581,77584,77586,77588,77591,77593,77596,77599],{"class":38,"line":921},[36,77574,76098],{"class":42},[36,77576,60595],{"class":79},[36,77578,92],{"class":42},[36,77580,3139],{"class":50},[36,77582,77583],{"class":50326},"哈",[36,77585,3139],{"class":50},[36,77587,3113],{"class":42},[36,77589,77590],{"class":79},"test",[36,77592,92],{"class":42},[36,77594,77595],{"class":50},"'哈'",[36,77597,77598],{"class":42},"))  ",[36,77600,77601],{"class":2621},"\u002F\u002Ftrue\n",[36,77603,77604,77606,77608,77610,77612,77614,77616,77618,77620,77622,77625,77627],{"class":38,"line":934},[36,77605,76098],{"class":42},[36,77607,60595],{"class":79},[36,77609,92],{"class":42},[36,77611,3139],{"class":50},[36,77613,77583],{"class":50326},[36,77615,3139],{"class":50},[36,77617,3113],{"class":42},[36,77619,77590],{"class":79},[36,77621,92],{"class":42},[36,77623,77624],{"class":50},"'哈哈'",[36,77626,77598],{"class":42},[36,77628,77601],{"class":2621},[36,77630,77631,77633,77635,77637,77639,77641,77643,77645,77647,77649,77652,77655],{"class":38,"line":939},[36,77632,76098],{"class":42},[36,77634,60595],{"class":79},[36,77636,92],{"class":42},[36,77638,3139],{"class":50},[36,77640,77583],{"class":50326},[36,77642,3139],{"class":50},[36,77644,3113],{"class":42},[36,77646,77590],{"class":79},[36,77648,92],{"class":42},[36,77650,77651],{"class":50},"'二哈'",[36,77653,77654],{"class":42},"))   ",[36,77656,77601],{"class":2621},[36,77658,77659],{"class":38,"line":949},[36,77660,70],{"emptyLinePlaceholder":69},[36,77662,77663],{"class":38,"line":962},[36,77664,77665],{"class":2621},"    \u002F\u002F 1.边界符\n",[36,77667,77668,77670,77672,77674,77676,77678,77680,77682,77684,77686,77688,77690,77692],{"class":38,"line":974},[36,77669,76098],{"class":42},[36,77671,60595],{"class":79},[36,77673,92],{"class":42},[36,77675,3139],{"class":50},[36,77677,3517],{"class":46},[36,77679,77583],{"class":50326},[36,77681,3139],{"class":50},[36,77683,3113],{"class":42},[36,77685,77590],{"class":79},[36,77687,92],{"class":42},[36,77689,77595],{"class":50},[36,77691,77598],{"class":42},[36,77693,77601],{"class":2621},[36,77695,77696,77698,77700,77702,77704,77706,77708,77710,77712,77714,77716,77718,77720,77722],{"class":38,"line":979},[36,77697,76098],{"class":42},[36,77699,60595],{"class":79},[36,77701,92],{"class":42},[36,77703,3139],{"class":50},[36,77705,3517],{"class":46},[36,77707,77583],{"class":50326},[36,77709,2859],{"class":46},[36,77711,3139],{"class":50},[36,77713,3113],{"class":42},[36,77715,77590],{"class":79},[36,77717,92],{"class":42},[36,77719,77624],{"class":50},[36,77721,77598],{"class":42},[36,77723,77724],{"class":2621},"\u002F\u002Ffalse\n",[36,77726,77727],{"class":38,"line":994},[36,77728,77729],{"class":2621},"    \u002F\u002F 2.量词\n",[36,77731,77732],{"class":38,"line":1006},[36,77733,77734],{"class":2621},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,77736,77737,77739,77741,77743,77745,77747,77749,77752,77754,77756,77758,77760,77762,77764],{"class":38,"line":1011},[36,77738,76098],{"class":42},[36,77740,60595],{"class":79},[36,77742,92],{"class":42},[36,77744,3139],{"class":50},[36,77746,3517],{"class":46},[36,77748,77583],{"class":50326},[36,77750,77751],{"class":46},"*$",[36,77753,3139],{"class":50},[36,77755,3113],{"class":42},[36,77757,77590],{"class":79},[36,77759,92],{"class":42},[36,77761,77624],{"class":50},[36,77763,77598],{"class":42},[36,77765,77601],{"class":2621},[36,77767,77768,77770,77772,77774,77776,77778,77780,77782,77784,77786,77788,77790,77793,77795],{"class":38,"line":1023},[36,77769,76098],{"class":42},[36,77771,60595],{"class":79},[36,77773,92],{"class":42},[36,77775,3139],{"class":50},[36,77777,3517],{"class":46},[36,77779,77583],{"class":50326},[36,77781,77751],{"class":46},[36,77783,3139],{"class":50},[36,77785,3113],{"class":42},[36,77787,77590],{"class":79},[36,77789,92],{"class":42},[36,77791,77792],{"class":50},"'二哈好傻'",[36,77794,77598],{"class":42},[36,77796,77797],{"class":2621},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,77799,77800,77802,77804,77806,77808,77810,77812,77814,77816,77818,77820,77822,77825,77827],{"class":38,"line":1028},[36,77801,76098],{"class":42},[36,77803,60595],{"class":79},[36,77805,92],{"class":42},[36,77807,3139],{"class":50},[36,77809,3517],{"class":46},[36,77811,77583],{"class":50326},[36,77813,77751],{"class":46},[36,77815,3139],{"class":50},[36,77817,3113],{"class":42},[36,77819,77590],{"class":79},[36,77821,92],{"class":42},[36,77823,77824],{"class":50},"'哈好哈'",[36,77826,77654],{"class":42},[36,77828,77829],{"class":2621},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,77831,77832],{"class":38,"line":1033},[36,77833,70],{"emptyLinePlaceholder":69},[36,77835,77836],{"class":38,"line":1053},[36,77837,77838],{"class":2621},"    \u002F\u002F +类似于>=1\n",[36,77840,77841,77843,77845,77847,77849,77851,77853,77856,77858,77860,77862,77864,77866,77868],{"class":38,"line":1064},[36,77842,76098],{"class":42},[36,77844,60595],{"class":79},[36,77846,92],{"class":42},[36,77848,3139],{"class":50},[36,77850,3517],{"class":46},[36,77852,77583],{"class":50326},[36,77854,77855],{"class":46},"+$",[36,77857,3139],{"class":50},[36,77859,3113],{"class":42},[36,77861,77590],{"class":79},[36,77863,92],{"class":42},[36,77865,77624],{"class":50},[36,77867,77598],{"class":42},[36,77869,77601],{"class":2621},[36,77871,77872,77874,77876,77878,77880,77882,77884,77886,77888,77890,77892,77894,77896,77898],{"class":38,"line":1075},[36,77873,76098],{"class":42},[36,77875,60595],{"class":79},[36,77877,92],{"class":42},[36,77879,3139],{"class":50},[36,77881,3517],{"class":46},[36,77883,77583],{"class":50326},[36,77885,77855],{"class":46},[36,77887,3139],{"class":50},[36,77889,3113],{"class":42},[36,77891,77590],{"class":79},[36,77893,92],{"class":42},[36,77895,77792],{"class":50},[36,77897,77598],{"class":42},[36,77899,77797],{"class":2621},[36,77901,77902,77904,77906,77908,77910,77912,77914,77916,77918,77920,77922,77924,77926,77928],{"class":38,"line":2291},[36,77903,76098],{"class":42},[36,77905,60595],{"class":79},[36,77907,92],{"class":42},[36,77909,3139],{"class":50},[36,77911,3517],{"class":46},[36,77913,77583],{"class":50326},[36,77915,77855],{"class":46},[36,77917,3139],{"class":50},[36,77919,3113],{"class":42},[36,77921,77590],{"class":79},[36,77923,92],{"class":42},[36,77925,77824],{"class":50},[36,77927,77654],{"class":42},[36,77929,77724],{"class":2621},[36,77931,77932],{"class":38,"line":2329},[36,77933,70],{"emptyLinePlaceholder":69},[36,77935,77936],{"class":38,"line":2334},[36,77937,77938],{"class":2621},"    \u002F\u002F ?类似于0次或一次\n",[36,77940,77941,77943,77945,77947,77949,77951,77954,77956,77958,77960,77962,77964,77966,77968],{"class":38,"line":2339},[36,77942,76098],{"class":42},[36,77944,60595],{"class":79},[36,77946,92],{"class":42},[36,77948,3139],{"class":50},[36,77950,3517],{"class":46},[36,77952,77953],{"class":50326},"哈？",[36,77955,2859],{"class":46},[36,77957,3139],{"class":50},[36,77959,3113],{"class":42},[36,77961,77590],{"class":79},[36,77963,92],{"class":42},[36,77965,76573],{"class":50},[36,77967,77654],{"class":42},[36,77969,77601],{"class":2621},[36,77971,77972,77974,77976,77978,77980,77982,77984,77987,77989,77991,77993,77995,77997,77999],{"class":38,"line":2365},[36,77973,76098],{"class":42},[36,77975,60595],{"class":79},[36,77977,92],{"class":42},[36,77979,3139],{"class":50},[36,77981,3517],{"class":46},[36,77983,77583],{"class":50326},[36,77985,77986],{"class":46},"?$",[36,77988,3139],{"class":50},[36,77990,3113],{"class":42},[36,77992,77590],{"class":79},[36,77994,92],{"class":42},[36,77996,77624],{"class":50},[36,77998,77598],{"class":42},[36,78000,77724],{"class":2621},[36,78002,78003,78005,78007,78009,78011,78013,78015,78017,78019,78021,78023,78025,78027,78029],{"class":38,"line":2373},[36,78004,76098],{"class":42},[36,78006,60595],{"class":79},[36,78008,92],{"class":42},[36,78010,3139],{"class":50},[36,78012,3517],{"class":46},[36,78014,77583],{"class":50326},[36,78016,77986],{"class":46},[36,78018,3139],{"class":50},[36,78020,3113],{"class":42},[36,78022,77590],{"class":79},[36,78024,92],{"class":42},[36,78026,77792],{"class":50},[36,78028,77598],{"class":42},[36,78030,77797],{"class":2621},[36,78032,78033,78035,78037,78039,78041,78043,78045,78047,78049,78051,78053,78055,78057,78059],{"class":38,"line":5001},[36,78034,76098],{"class":42},[36,78036,60595],{"class":79},[36,78038,92],{"class":42},[36,78040,3139],{"class":50},[36,78042,3517],{"class":46},[36,78044,77583],{"class":50326},[36,78046,77986],{"class":46},[36,78048,3139],{"class":50},[36,78050,3113],{"class":42},[36,78052,77590],{"class":79},[36,78054,92],{"class":42},[36,78056,77824],{"class":50},[36,78058,77598],{"class":42},[36,78060,77724],{"class":2621},[36,78062,78063],{"class":38,"line":5006},[36,78064,70],{"emptyLinePlaceholder":69},[36,78066,78067],{"class":38,"line":10328},[36,78068,78069],{"class":2621},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,78071,78072,78074,78076,78078,78080,78082,78084,78087,78089,78091,78093,78095,78098,78101],{"class":38,"line":10352},[36,78073,76098],{"class":42},[36,78075,60595],{"class":79},[36,78077,92],{"class":42},[36,78079,3139],{"class":50},[36,78081,3517],{"class":46},[36,78083,77583],{"class":50326},[36,78085,78086],{"class":46},"{4}$",[36,78088,3139],{"class":50},[36,78090,3113],{"class":42},[36,78092,77590],{"class":79},[36,78094,92],{"class":42},[36,78096,78097],{"class":50},"'哈哈哈哈'",[36,78099,78100],{"class":42},")) ",[36,78102,77601],{"class":2621},[36,78104,78105],{"class":38,"line":10357},[36,78106,70],{"emptyLinePlaceholder":69},[36,78108,78109],{"class":38,"line":10363},[36,78110,78111],{"class":2621},"    \u002F\u002F {n,}大于等于n次\n",[36,78113,78114,78116,78118,78120,78122,78124,78126,78129,78131,78133,78135,78137,78139,78141],{"class":38,"line":10390},[36,78115,76098],{"class":42},[36,78117,60595],{"class":79},[36,78119,92],{"class":42},[36,78121,3139],{"class":50},[36,78123,3517],{"class":46},[36,78125,77583],{"class":50326},[36,78127,78128],{"class":46},"{4,}$",[36,78130,3139],{"class":50},[36,78132,3113],{"class":42},[36,78134,77590],{"class":79},[36,78136,92],{"class":42},[36,78138,78097],{"class":50},[36,78140,78100],{"class":42},[36,78142,77601],{"class":2621},[36,78144,78145,78147,78149,78151,78153,78155,78157,78159,78161,78163,78165,78167,78170,78172],{"class":38,"line":10395},[36,78146,76098],{"class":42},[36,78148,60595],{"class":79},[36,78150,92],{"class":42},[36,78152,3139],{"class":50},[36,78154,3517],{"class":46},[36,78156,77583],{"class":50326},[36,78158,78128],{"class":46},[36,78160,3139],{"class":50},[36,78162,3113],{"class":42},[36,78164,77590],{"class":79},[36,78166,92],{"class":42},[36,78168,78169],{"class":50},"'哈哈哈哈哈'",[36,78171,78100],{"class":42},[36,78173,77601],{"class":2621},[36,78175,78176],{"class":38,"line":10401},[36,78177,70],{"emptyLinePlaceholder":69},[36,78179,78180],{"class":38,"line":10413},[36,78181,78182],{"class":2621},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,78184,78185,78187,78189,78191,78193,78195,78197,78200,78202,78204,78206,78208,78210,78212],{"class":38,"line":10425},[36,78186,76098],{"class":42},[36,78188,60595],{"class":79},[36,78190,92],{"class":42},[36,78192,3139],{"class":50},[36,78194,3517],{"class":46},[36,78196,77583],{"class":50326},[36,78198,78199],{"class":46},"{4,6}$",[36,78201,3139],{"class":50},[36,78203,3113],{"class":42},[36,78205,77590],{"class":79},[36,78207,92],{"class":42},[36,78209,78097],{"class":50},[36,78211,78100],{"class":42},[36,78213,77601],{"class":2621},[36,78215,78216,78218,78220,78222,78224,78226,78228,78230,78232,78234,78236,78238,78240,78242],{"class":38,"line":10437},[36,78217,76098],{"class":42},[36,78219,60595],{"class":79},[36,78221,92],{"class":42},[36,78223,3139],{"class":50},[36,78225,3517],{"class":46},[36,78227,77583],{"class":50326},[36,78229,78199],{"class":46},[36,78231,3139],{"class":50},[36,78233,3113],{"class":42},[36,78235,77590],{"class":79},[36,78237,92],{"class":42},[36,78239,78169],{"class":50},[36,78241,78100],{"class":42},[36,78243,77601],{"class":2621},[36,78245,78246,78248,78250,78252,78254,78256,78258,78260,78262,78264,78266,78268,78271,78273],{"class":38,"line":12095},[36,78247,76098],{"class":42},[36,78249,60595],{"class":79},[36,78251,92],{"class":42},[36,78253,3139],{"class":50},[36,78255,3517],{"class":46},[36,78257,77583],{"class":50326},[36,78259,78199],{"class":46},[36,78261,3139],{"class":50},[36,78263,3113],{"class":42},[36,78265,77590],{"class":79},[36,78267,92],{"class":42},[36,78269,78270],{"class":50},"'哈哈哈哈哈哈哈'",[36,78272,78100],{"class":42},[36,78274,77724],{"class":2621},[36,78276,78277],{"class":38,"line":12120},[36,78278,70],{"emptyLinePlaceholder":69},[36,78280,78281],{"class":38,"line":12143},[36,78282,78283],{"class":2621},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,78285,78286,78288,78290,78292,78294,78296,78299,78301,78303,78305,78307,78309,78312,78314],{"class":38,"line":12167},[36,78287,76098],{"class":42},[36,78289,60595],{"class":79},[36,78291,92],{"class":42},[36,78293,3139],{"class":50},[36,78295,3517],{"class":46},[36,78297,78298],{"class":62},"[abc]",[36,78300,2859],{"class":46},[36,78302,3139],{"class":50},[36,78304,3113],{"class":42},[36,78306,77590],{"class":79},[36,78308,92],{"class":42},[36,78310,78311],{"class":50},"'a'",[36,78313,77598],{"class":42},[36,78315,77601],{"class":2621},[36,78317,78318,78320,78322,78324,78326,78328,78330,78332,78334,78336,78338,78340,78343,78345],{"class":38,"line":12172},[36,78319,76098],{"class":42},[36,78321,60595],{"class":79},[36,78323,92],{"class":42},[36,78325,3139],{"class":50},[36,78327,3517],{"class":46},[36,78329,78298],{"class":62},[36,78331,2859],{"class":46},[36,78333,3139],{"class":50},[36,78335,3113],{"class":42},[36,78337,77590],{"class":79},[36,78339,92],{"class":42},[36,78341,78342],{"class":50},"'b'",[36,78344,77598],{"class":42},[36,78346,77601],{"class":2621},[36,78348,78349,78351,78353,78355,78357,78359,78361,78363,78365,78367,78369,78371,78374,78376],{"class":38,"line":12177},[36,78350,76098],{"class":42},[36,78352,60595],{"class":79},[36,78354,92],{"class":42},[36,78356,3139],{"class":50},[36,78358,3517],{"class":46},[36,78360,78298],{"class":62},[36,78362,2859],{"class":46},[36,78364,3139],{"class":50},[36,78366,3113],{"class":42},[36,78368,77590],{"class":79},[36,78370,92],{"class":42},[36,78372,78373],{"class":50},"'c'",[36,78375,77598],{"class":42},[36,78377,77601],{"class":2621},[36,78379,78380,78382,78384,78386,78388,78390,78392,78394,78396,78398,78401,78403],{"class":38,"line":12182},[36,78381,76098],{"class":42},[36,78383,60595],{"class":79},[36,78385,92],{"class":42},[36,78387,3139],{"class":50},[36,78389,78298],{"class":62},[36,78391,3139],{"class":50},[36,78393,3113],{"class":42},[36,78395,77590],{"class":79},[36,78397,92],{"class":42},[36,78399,78400],{"class":50},"'ab'",[36,78402,77598],{"class":42},[36,78404,77601],{"class":2621},[36,78406,78407,78409,78411,78413,78415,78417,78419,78421,78423,78425,78427,78429,78431,78433],{"class":38,"line":12191},[36,78408,76098],{"class":42},[36,78410,60595],{"class":79},[36,78412,92],{"class":42},[36,78414,3139],{"class":50},[36,78416,3517],{"class":46},[36,78418,78298],{"class":62},[36,78420,2859],{"class":46},[36,78422,3139],{"class":50},[36,78424,3113],{"class":42},[36,78426,77590],{"class":79},[36,78428,92],{"class":42},[36,78430,78400],{"class":50},[36,78432,77598],{"class":42},[36,78434,78435],{"class":2621},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,78437,78438,78440,78442,78444,78446,78448,78450,78453,78455,78457,78459,78461,78463,78465],{"class":38,"line":12196},[36,78439,76098],{"class":42},[36,78441,60595],{"class":79},[36,78443,92],{"class":42},[36,78445,3139],{"class":50},[36,78447,3517],{"class":46},[36,78449,78298],{"class":62},[36,78451,78452],{"class":46},"{2}$",[36,78454,3139],{"class":50},[36,78456,3113],{"class":42},[36,78458,77590],{"class":79},[36,78460,92],{"class":42},[36,78462,78400],{"class":50},[36,78464,77598],{"class":42},[36,78466,78467],{"class":2621},"\u002F\u002Ftrue   可以选两个\n",[36,78469,78470,78472,78474,78476,78478,78480,78483,78485,78487,78489,78491,78493,78496,78498],{"class":38,"line":12202},[36,78471,76098],{"class":42},[36,78473,60595],{"class":79},[36,78475,92],{"class":42},[36,78477,3139],{"class":50},[36,78479,3517],{"class":46},[36,78481,78482],{"class":62},"[a-z]",[36,78484,2859],{"class":46},[36,78486,3139],{"class":50},[36,78488,3113],{"class":42},[36,78490,77590],{"class":79},[36,78492,92],{"class":42},[36,78494,78495],{"class":50},"'p'",[36,78497,77654],{"class":42},[36,78499,78500],{"class":2621},"\u002F\u002Ftrue   依然只能选一个\n",[36,78502,78503,78505,78507,78509,78511,78513,78516,78518,78520,78522,78524,78526,78528,78530],{"class":38,"line":12223},[36,78504,76098],{"class":42},[36,78506,60595],{"class":79},[36,78508,92],{"class":42},[36,78510,3139],{"class":50},[36,78512,3517],{"class":46},[36,78514,78515],{"class":62},"[A-Z]",[36,78517,2859],{"class":46},[36,78519,3139],{"class":50},[36,78521,3113],{"class":42},[36,78523,77590],{"class":79},[36,78525,92],{"class":42},[36,78527,78495],{"class":50},[36,78529,77654],{"class":42},[36,78531,77724],{"class":2621},[36,78533,78534,78536,78538,78540,78542,78544,78546,78548,78550,78552,78554,78556,78559,78561],{"class":38,"line":12229},[36,78535,76098],{"class":42},[36,78537,60595],{"class":79},[36,78539,92],{"class":42},[36,78541,3139],{"class":50},[36,78543,3517],{"class":46},[36,78545,78515],{"class":62},[36,78547,2859],{"class":46},[36,78549,3139],{"class":50},[36,78551,3113],{"class":42},[36,78553,77590],{"class":79},[36,78555,92],{"class":42},[36,78557,78558],{"class":50},"'P'",[36,78560,77654],{"class":42},[36,78562,77601],{"class":2621},[36,78564,78565,78567,78569,78571,78573,78575,78578,78580,78582,78584,78586,78588,78591,78593],{"class":38,"line":12243},[36,78566,76098],{"class":42},[36,78568,60595],{"class":79},[36,78570,92],{"class":42},[36,78572,3139],{"class":50},[36,78574,3517],{"class":46},[36,78576,78577],{"class":62},"[0-9]",[36,78579,2859],{"class":46},[36,78581,3139],{"class":50},[36,78583,3113],{"class":42},[36,78585,77590],{"class":79},[36,78587,92],{"class":42},[36,78589,78590],{"class":50},"'0'",[36,78592,77654],{"class":42},[36,78594,77601],{"class":2621},[36,78596,78597,78599,78601,78603,78605,78607,78610,78612,78614,78616,78618,78620,78622,78624],{"class":38,"line":12249},[36,78598,76098],{"class":42},[36,78600,60595],{"class":79},[36,78602,92],{"class":42},[36,78604,3139],{"class":50},[36,78606,3517],{"class":46},[36,78608,78609],{"class":62},"[a-zA-Z0-9]",[36,78611,2859],{"class":46},[36,78613,3139],{"class":50},[36,78615,3113],{"class":42},[36,78617,77590],{"class":79},[36,78619,92],{"class":42},[36,78621,78495],{"class":50},[36,78623,77598],{"class":42},[36,78625,77601],{"class":2621},[36,78627,78628,78630,78632],{"class":38,"line":12276},[36,78629,54765],{"class":42},[36,78631,54161],{"class":53649},[36,78633,53656],{"class":42},[36,78635,78636,78638,78640],{"class":38,"line":12285},[36,78637,54133],{"class":42},[36,78639,54148],{"class":53649},[36,78641,53656],{"class":42},[36,78643,78644],{"class":38,"line":12291},[36,78645,70],{"emptyLinePlaceholder":69},[36,78647,78648,78650,78652],{"class":38,"line":12299},[36,78649,54133],{"class":42},[36,78651,52984],{"class":53649},[36,78653,53656],{"class":42},[24368,78655,78657],{"id":78656},"_3624-修饰符","3.6.2.4 修饰符",[19,78659,78660],{},[3879,78661],{"alt":31,"src":78662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78664,78665],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78667,78668],{},[3879,78669],{"alt":31,"src":78670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,78672,78674],{"className":52982,"code":78673,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[33,78675,78676,78686,78700,78708,78722,78742,78754,78762,78770,78778,78810,78841,78846,78878,78889,78922,78931,78939,78947],{"__ignoreMap":31},[36,78677,78678,78680,78682,78684],{"class":38,"line":39},[36,78679,53646],{"class":42},[36,78681,53650],{"class":53649},[36,78683,53653],{"class":79},[36,78685,53656],{"class":42},[36,78687,78688,78690,78692,78694,78696,78698],{"class":38,"line":54},[36,78689,3463],{"class":42},[36,78691,52984],{"class":53649},[36,78693,53665],{"class":79},[36,78695,47],{"class":42},[36,78697,53670],{"class":50},[36,78699,53656],{"class":42},[36,78701,78702,78704,78706],{"class":38,"line":66},[36,78703,3463],{"class":42},[36,78705,53683],{"class":53649},[36,78707,53656],{"class":42},[36,78709,78710,78712,78714,78716,78718,78720],{"class":38,"line":73},[36,78711,54492],{"class":42},[36,78713,53693],{"class":53649},[36,78715,53696],{"class":79},[36,78717,47],{"class":42},[36,78719,53701],{"class":50},[36,78721,53656],{"class":42},[36,78723,78724,78726,78728,78730,78732,78734,78736,78738,78740],{"class":38,"line":86},[36,78725,54492],{"class":42},[36,78727,53693],{"class":53649},[36,78729,17295],{"class":79},[36,78731,47],{"class":42},[36,78733,53740],{"class":50},[36,78735,53720],{"class":79},[36,78737,47],{"class":42},[36,78739,53747],{"class":50},[36,78741,53656],{"class":42},[36,78743,78744,78746,78748,78750,78752],{"class":38,"line":126},[36,78745,54492],{"class":42},[36,78747,53756],{"class":53649},[36,78749,53759],{"class":42},[36,78751,53756],{"class":53649},[36,78753,53656],{"class":42},[36,78755,78756,78758,78760],{"class":38,"line":131},[36,78757,54133],{"class":42},[36,78759,53683],{"class":53649},[36,78761,53656],{"class":42},[36,78763,78764,78766,78768],{"class":38,"line":225},[36,78765,3463],{"class":42},[36,78767,54148],{"class":53649},[36,78769,53656],{"class":42},[36,78771,78772,78774,78776],{"class":38,"line":235},[36,78773,54492],{"class":42},[36,78775,54161],{"class":53649},[36,78777,53656],{"class":42},[36,78779,78780,78782,78784,78786,78788,78790,78793,78795,78797,78799,78801,78803,78806,78808],{"class":38,"line":377},[36,78781,76098],{"class":42},[36,78783,60595],{"class":79},[36,78785,92],{"class":42},[36,78787,3139],{"class":50},[36,78789,3517],{"class":46},[36,78791,78792],{"class":50326},"java",[36,78794,2859],{"class":46},[36,78796,3139],{"class":50},[36,78798,3113],{"class":42},[36,78800,77590],{"class":79},[36,78802,92],{"class":42},[36,78804,78805],{"class":50},"'java'",[36,78807,78100],{"class":42},[36,78809,77601],{"class":2621},[36,78811,78812,78814,78816,78818,78820,78822,78824,78826,78828,78830,78832,78834,78837,78839],{"class":38,"line":617},[36,78813,76098],{"class":42},[36,78815,60595],{"class":79},[36,78817,92],{"class":42},[36,78819,3139],{"class":50},[36,78821,3517],{"class":46},[36,78823,78792],{"class":50326},[36,78825,2859],{"class":46},[36,78827,3139],{"class":50},[36,78829,3113],{"class":42},[36,78831,77590],{"class":79},[36,78833,92],{"class":42},[36,78835,78836],{"class":50},"'Java'",[36,78838,78100],{"class":42},[36,78840,77724],{"class":2621},[36,78842,78843],{"class":38,"line":643},[36,78844,78845],{"class":2621},"    \u002F\u002F 不区分大小写、\n",[36,78847,78848,78850,78852,78854,78856,78858,78860,78862,78864,78866,78868,78870,78872,78874,78876],{"class":38,"line":921},[36,78849,76098],{"class":42},[36,78851,60595],{"class":79},[36,78853,92],{"class":42},[36,78855,3139],{"class":50},[36,78857,3517],{"class":46},[36,78859,78792],{"class":50326},[36,78861,2859],{"class":46},[36,78863,3139],{"class":50},[36,78865,2997],{"class":46},[36,78867,3113],{"class":42},[36,78869,77590],{"class":79},[36,78871,92],{"class":42},[36,78873,78836],{"class":50},[36,78875,78100],{"class":42},[36,78877,77601],{"class":2621},[36,78879,78880,78882,78884,78886],{"class":38,"line":934},[36,78881,13599],{"class":46},[36,78883,76264],{"class":62},[36,78885,15941],{"class":46},[36,78887,78888],{"class":50}," 'java是一门编程语言，学完java工资很高'\n",[36,78890,78891,78893,78896,78898,78901,78904,78906,78908,78910,78912,78915,78917,78920],{"class":38,"line":939},[36,78892,13599],{"class":46},[36,78894,78895],{"class":62}," result",[36,78897,15941],{"class":46},[36,78899,78900],{"class":42}," str.",[36,78902,78903],{"class":79},"replace",[36,78905,92],{"class":42},[36,78907,3139],{"class":50},[36,78909,78792],{"class":50326},[36,78911,3139],{"class":50},[36,78913,78914],{"class":46},"ig",[36,78916,630],{"class":42},[36,78918,78919],{"class":50},"'前端'",[36,78921,123],{"class":42},[36,78923,78924,78926,78928],{"class":38,"line":949},[36,78925,76098],{"class":42},[36,78927,60595],{"class":79},[36,78929,78930],{"class":42},"(result)\n",[36,78932,78933,78935,78937],{"class":38,"line":962},[36,78934,54765],{"class":42},[36,78936,54161],{"class":53649},[36,78938,53656],{"class":42},[36,78940,78941,78943,78945],{"class":38,"line":974},[36,78942,54133],{"class":42},[36,78944,54148],{"class":53649},[36,78946,53656],{"class":42},[36,78948,78949,78951,78953],{"class":38,"line":979},[36,78950,54133],{"class":42},[36,78952,52984],{"class":53649},[36,78954,53656],{"class":42},[2467,78956,78957],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":31,"searchDepth":54,"depth":54,"links":78959},[78960,78970,78982,78999,79006,79014],{"id":55708,"depth":54,"text":55709,"children":78961},[78962,78963,78964,78965,78966,78967,78968,78969],{"id":55712,"depth":66,"text":55713},{"id":55745,"depth":66,"text":55746},{"id":55784,"depth":66,"text":55785},{"id":55942,"depth":66,"text":55943},{"id":55990,"depth":66,"text":55991},{"id":56127,"depth":66,"text":56128},{"id":56449,"depth":66,"text":56450},{"id":59437,"depth":66,"text":59438},{"id":59465,"depth":54,"text":59466,"children":78971},[78972,78973,78974,78975,78976,78977,78978,78979,78980,78981],{"id":59469,"depth":66,"text":59470},{"id":59492,"depth":66,"text":59493},{"id":60407,"depth":66,"text":60408},{"id":61097,"depth":66,"text":61098},{"id":61379,"depth":66,"text":61380},{"id":65539,"depth":66,"text":65540},{"id":65709,"depth":66,"text":65710},{"id":65837,"depth":66,"text":65838},{"id":65862,"depth":66,"text":65863},{"id":67251,"depth":66,"text":67252},{"id":68404,"depth":54,"text":68405,"children":78983},[78984,78985,78986,78987,78988,78989,78990,78991,78992,78993,78994,78995,78996,78997,78998],{"id":68408,"depth":66,"text":68409},{"id":69062,"depth":66,"text":69063},{"id":70757,"depth":66,"text":70758},{"id":70798,"depth":66,"text":70799},{"id":70840,"depth":66,"text":70841},{"id":70854,"depth":66,"text":70855},{"id":70903,"depth":66,"text":70904},{"id":70915,"depth":66,"text":70916},{"id":70930,"depth":66,"text":70931},{"id":70966,"depth":66,"text":70967},{"id":71047,"depth":66,"text":71048},{"id":71175,"depth":66,"text":71176},{"id":71187,"depth":66,"text":71188},{"id":71206,"depth":66,"text":71207},{"id":73315,"depth":66,"text":73316},{"id":73334,"depth":54,"text":73335,"children":79000},[79001,79002,79003,79004,79005],{"id":73355,"depth":66,"text":73356},{"id":73375,"depth":66,"text":73376},{"id":73424,"depth":66,"text":73425},{"id":73549,"depth":66,"text":73550},{"id":73730,"depth":66,"text":73731},{"id":73748,"depth":54,"text":73749,"children":79007},[79008,79009,79010,79011,79012,79013],{"id":73763,"depth":66,"text":73764},{"id":73822,"depth":66,"text":73823},{"id":73846,"depth":66,"text":73847},{"id":74166,"depth":66,"text":74167},{"id":74198,"depth":66,"text":74199},{"id":74221,"depth":66,"text":74222},{"id":77289,"depth":54,"text":77290,"children":79015},[79016,79017],{"id":77323,"depth":66,"text":77324},{"id":77362,"depth":66,"text":77363},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55680,"description":2493},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79024,"title":79025,"body":79026,"description":2493,"extension":2494,"meta":95159,"navigation":69,"path":95160,"seo":95161,"stem":95162,"__hash__":95163},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79027,"toc":95095},[79028,79031,79034,79038,79042,79047,79052,79063,79067,79072,79075,79079,79082,79087,79091,79095,79098,79103,79106,79110,79113,79121,79124,79128,79133,79138,79141,79145,79150,79155,79158,79162,79167,79170,79175,79178,79183,79186,79191,79196,79199,79202,79206,79211,79216,79219,79223,79227,79230,79233,79236,79240,79244,79249,79254,79257,79261,79266,79271,79274,79277,79280,79283,79286,79289,79292,79295,79298,79303,79307,79312,79317,79320,79323,79326,79329,79332,79335,79338,79341,79345,79349,79352,79355,79358,79363,79365,79368,79371,79374,79377,79380,79383,79386,79389,79392,79395,79398,79401,79404,79409,79414,79419,79422,79426,79429,79434,79438,79440,79451,79456,79557,79560,79563,79566,79569,79572,79575,79578,79581,79583,79586,79589,79592,79595,79598,79600,79603,79606,79609,79612,79615,79618,79620,79623,79625,79627,79630,79634,79638,79641,79644,79647,79650,79653,79656,79659,79662,79665,79670,79790,79793,79796,79801,79804,79807,79810,79813,79818,79821,79824,79827,79830,79835,79838,79938,80003,80077,80081,80084,80087,80091,80094,80108,80137,80140,80143,80146,80149,80152,80155,80158,80160,80163,80166,80169,80172,80176,80181,80185,80190,80265,80268,80451,80454,80457,80460,80463,80466,80468,80471,80474,80477,80480,80483,80486,80488,80492,80495,80500,80503,80506,80509,80512,80514,80519,80522,80525,80528,80531,80533,80538,80541,80544,80546,80548,80551,80555,80558,80561,80566,80569,80572,80575,80625,80630,80634,80639,80642,80711,80714,80723,80727,80732,80735,80738,80746,80749,80766,82567,82571,82575,82580,82583,82587,82593,82599,82749,82754,82759,82762,82765,82768,82771,82774,82777,82780,82783,82786,82789,82792,82795,82800,82804,82807,82818,82822,82827,82830,82833,82836,82839,82842,82844,82847,82850,82853,82856,82858,82875,82878,82882,82885,82890,82895,82898,82901,82905,82908,82911,82920,82923,82927,82930,82935,82940,83007,83011,83014,83017,83022,83027,83113,83118,83122,83125,83128,83143,83146,83151,83155,83160,83269,83272,83283,83433,83437,83442,83551,83555,83560,83565,83570,83573,83580,83600,83636,83800,83805,83808,83813,83820,83823,83826,83829,83888,83944,84000,84004,84009,84324,84327,84331,84334,84339,84448,84453,84457,84462,84466,84537,84541,84543,84546,84549,84587,84863,84867,84884,84950,84984,84988,84991,84996,85025,85032,85041,85046,85061,85066,85075,85078,85215,85219,85281,85285,85290,85535,85539,85544,85547,85550,85553,85556,85560,85565,87146,87150,87154,87160,87163,87168,87172,87175,87180,87183,87194,87198,87203,87207,87212,87217,87220,87225,87229,87233,87236,87241,87246,87249,87252,87255,87377,87382,87484,87487,87490,87494,87499,87671,87676,87680,87683,87688,87754,87759,87762,87893,87896,87901,87904,87907,87998,88003,88006,88009,88012,88015,88020,88025,88028,88033,88038,88043,88047,88050,88053,88058,88063,88068,88073,88127,88130,88133,88138,88141,88144,88149,88154,88159,88163,88168,88182,88187,88190,88195,88199,88204,88209,88214,88219,88224,88229,88234,88239,88242,88246,88251,88254,88257,88260,88265,88270,88273,88276,88280,88283,88286,88291,88296,88301,88306,88309,88314,88319,88380,88385,88388,88393,89634,89639,89643,89647,89652,89655,89660,89665,89668,89673,89675,89680,89684,89687,89690,89701,89705,89710,89715,89770,89775,89780,89785,89996,90001,90005,90010,90013,90015,90018,90021,90467,90472,90479,90485,90488,90491,90755,90760,90764,91029,91034,91038,91043,91048,91053,91058,91389,91392,91397,91402,91405,91409,91413,91418,91423,91428,91433,91438,91443,91447,91450,91455,91460,91463,91537,91542,91547,91552,91554,91557,91927,91932,91937,91942,91945,91948,92050,92055,92060,92163,92167,92172,92176,92180,92185,92190,92193,92198,92201,92204,92597,92602,92605,92608,92611,92614,93134,93138,93143,93148,93153,93156,93161,93164,93167,93549,93554,93556,93558,93561,93564,94076,94080,94141,94144,94147,94150,94154,94157,94162,94167,95092],[10,79029,79025],{"id":79030},"_4js进阶",[19,79032,79033],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79035,79037],{"id":79036},"_41-作用域","4.1 作用域",[1752,79039,79041],{"id":79040},"_411-局部作用域","4.1.1 局部作用域",[19,79043,79044],{},[3879,79045],{"alt":31,"src":79046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79048,79049],{},[3879,79050],{"alt":31,"src":79051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3557,79053,79054,79057,79060],{},[653,79055,79056],{},"函数作用域在函数内部",[653,79058,79059],{},"块级作用域在{}",[653,79061,79062],{},"对象的那个{}不是作用域，不是块作用域",[1752,79064,79066],{"id":79065},"_412-全局作用域","4.1.2 全局作用域",[19,79068,79069],{},[3879,79070],{"alt":31,"src":79071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,79073,79074],{},"window.a=10不要这样写",[1752,79076,79078],{"id":79077},"_413-作用域链","4.1.3 作用域链",[19,79080,79081],{},"变量查找机制",[19,79083,79084],{},[3879,79085],{"alt":31,"src":79086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79088,79090],{"id":79089},"_42-垃圾回收机制","4.2 垃圾回收机制",[1752,79092,79094],{"id":79093},"_421-大体介绍","4.2.1 大体介绍",[19,79096,79097],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,79099,79100],{},[3879,79101],{"alt":31,"src":79102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,79104,79105],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1752,79107,79109],{"id":79108},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,79111,79112],{},"堆栈空间分配区别：",[650,79114,79115,79118],{},[653,79116,79117],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[653,79119,79120],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79122,79123],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24368,79125,79127],{"id":79126},"_4221-引用计数","4.2.2.1 引用计数",[19,79129,79130],{},[3879,79131],{"alt":31,"src":79132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79134,79135],{},[3879,79136],{"alt":31,"src":79137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79139,79140],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24368,79142,79144],{"id":79143},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79146,79147],{},[3879,79148],{"alt":31,"src":79149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79151,79152],{},[3879,79153],{"alt":31,"src":79154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79156,79157],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79159,79161],{"id":79160},"_43-闭包","4.3 闭包",[19,79163,79164],{},[3879,79165],{"alt":31,"src":79166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79168,79169],{},"闭包：内层函数+外层函数的变量",[19,79171,79172],{},[3879,79173],{"alt":31,"src":79174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79176,79177],{},"closure就是闭包",[19,79179,79180],{},[3879,79181],{"alt":31,"src":79182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79184,79185],{},"内层函数必须包含外层函数的变量才是闭包",[19,79187,79188],{},[3879,79189],{"alt":31,"src":79190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79192,79193],{},[3879,79194],{"alt":31,"src":79195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79197,79198],{},"闭包可能会引起内存泄漏",[19,79200,79201],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79203,79205],{"id":79204},"_44-变量提升","4.4 变量提升",[19,79207,79208],{},[3879,79209],{"alt":31,"src":79210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79212,79213],{},[3879,79214],{"alt":31,"src":79215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79217,79218],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79220,79222],{"id":79221},"_45-函数进阶","4.5 函数进阶",[1752,79224,79226],{"id":79225},"_451-函数提升","4.5.1 函数提升",[19,79228,79229],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79231,79232],{},"只提升函数声明，不提升函数调用",[54161,79234,79235],{},"\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",[1752,79237,79239],{"id":79238},"_452-函数参数","4.5.2 函数参数",[24368,79241,79243],{"id":79242},"_4521-动态参数","4.5.2.1 动态参数",[19,79245,79246],{},[3879,79247],{"alt":31,"src":79248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79250,79251],{},[3879,79252],{"alt":31,"src":79253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79255,79256],{},"箭头函数里边没有arguments",[24368,79258,79260],{"id":79259},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79262,79263],{},[3879,79264],{"alt":31,"src":79265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79267,79268],{},[3879,79269],{"alt":31,"src":79270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79272,79273],{},"剩余参数使用的时候不需要写...",[19,79275,79276],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79278,79279],{},"  function getSum(a,b,...arr) {",[19,79281,79282],{},"  console.log(11)",[19,79284,79285],{},"  }",[19,79287,79288],{},"  getSum(1,2,3,4)",[19,79290,79291],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79293,79294],{},"  getSum(1,2)",[19,79296,79297],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79299,79300],{},[3879,79301],{"alt":31,"src":79302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24368,79304,79306],{"id":79305},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79308,79309],{},[3879,79310],{"alt":31,"src":79311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79313,79314],{},[3879,79315],{"alt":31,"src":79316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79318,79319],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79321,79322],{},"展开运算符可以用于数组之间的合并：",[19,79324,79325],{},"const arr1 = [1, 2, 3]",[19,79327,79328],{},"const arr2 = [3, 4, 5]",[19,79330,79331],{},"const arr = [...arr1, ...arr2]",[19,79333,79334],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79336,79337],{},"剩余参数：函数参数使用，得到真数组",[19,79339,79340],{},"展开运算符：数组中使用，数组展开",[1752,79342,79344],{"id":79343},"_453-箭头函数","4.5.3 箭头函数",[24368,79346,79348],{"id":79347},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79350,79351],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79353,79354],{},"它不是万能的！！！",[19,79356,79357],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79359,79360],{},[3879,79361],{"alt":31,"src":79362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79364,2595],{},[19,79366,79367],{},"① 只有一个形参的时候，可以省略小括号：",[19,79369,79370],{},"const fn=x=>{console.log(x)}",[19,79372,79373],{},"② 只有一行代码时可以省略大括号：",[19,79375,79376],{},"const fn=x=>console.log(11)",[19,79378,79379],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79381,79382],{},"const fn=x=>x+x",[19,79384,79385],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79387,79388],{},"⑤ 阻止表单默认提交：",[19,79390,79391],{},"const form = document.querySelector('form')",[19,79393,79394],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79396,79397],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79399,79400],{},"const fn=uname=>({uname:uname})",[19,79402,79403],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79405,79406],{},[3879,79407],{"alt":31,"src":79408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79410,79411],{},[3879,79412],{"alt":31,"src":79413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79415,79416],{},[3879,79417],{"alt":31,"src":79418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79420,79421],{},"一定不要忘记用()，有()就理解为自带return",[24368,79423,79425],{"id":79424},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79427,79428],{},"箭头函数是没有动态参数的arguments",[19,79430,79431],{},[3879,79432],{"alt":31,"src":79433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24368,79435,79437],{"id":79436},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79439,13710],{},[650,79441,79442,79445,79448],{},[653,79443,79444],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[653,79446,79447],{},"事件回调函数使用箭头函数时，this 为全局的 window",[653,79449,79450],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79452,79453],{},[3879,79454],{"alt":31,"src":79455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,79457,79459],{"className":55415,"code":79458,"language":55417,"meta":31,"style":31},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[33,79460,79461,79469,79474,79479,79484,79489,79494,79498,79503,79507,79511,79516,79521,79526,79530,79534,79539,79544,79549],{"__ignoreMap":31},[36,79462,79463,79465,79467],{"class":38,"line":39},[36,79464,54492],{"class":42},[36,79466,54161],{"class":53649},[36,79468,53656],{"class":42},[36,79470,79471],{"class":38,"line":54},[36,79472,79473],{"class":42},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,79475,79476],{"class":38,"line":66},[36,79477,79478],{"class":42},"    console.log(this) \u002F\u002F指向window\n",[36,79480,79481],{"class":38,"line":73},[36,79482,79483],{"class":42},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,79485,79486],{"class":38,"line":86},[36,79487,79488],{"class":42},"    function fn() {\n",[36,79490,79491],{"class":38,"line":126},[36,79492,79493],{"class":42},"      console.log(this)  \u002F\u002F指向window\n",[36,79495,79496],{"class":38,"line":131},[36,79497,4580],{"class":42},[36,79499,79500],{"class":38,"line":225},[36,79501,79502],{"class":42},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,79504,79505],{"class":38,"line":235},[36,79506,70],{"emptyLinePlaceholder":69},[36,79508,79509],{"class":38,"line":377},[36,79510,73868],{"class":42},[36,79512,79513],{"class":38,"line":617},[36,79514,79515],{"class":42},"      name: 'andy',\n",[36,79517,79518],{"class":38,"line":643},[36,79519,79520],{"class":42},"      sayHai: function () {\n",[36,79522,79523],{"class":38,"line":921},[36,79524,79525],{"class":42},"        console.log(this)\n",[36,79527,79528],{"class":38,"line":934},[36,79529,54746],{"class":42},[36,79531,79532],{"class":38,"line":939},[36,79533,4580],{"class":42},[36,79535,79536],{"class":38,"line":949},[36,79537,79538],{"class":42},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,79540,79541],{"class":38,"line":962},[36,79542,79543],{"class":42},"    \u002F\u002F 2.箭头函数的this\n",[36,79545,79546],{"class":38,"line":974},[36,79547,79548],{"class":42},"    const fn = () => console.log(this)\n",[36,79550,79551,79553,79555],{"class":38,"line":979},[36,79552,54765],{"class":42},[36,79554,54161],{"class":53649},[36,79556,53656],{"class":42},[19,79558,79559],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79561,79562],{},"const fn = () => console.log(this)",[19,79564,79565],{},"fn() \u002F\u002F指向window",[19,79567,79568],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79570,79571],{},"①",[19,79573,79574],{},"const obj = {",[19,79576,79577],{},"uname: 'pink老师',",[19,79579,79580],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79582,107],{},[19,79584,79585],{},"调用对象里边的函数",[19,79587,79588],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79590,79591],{},"obj.sayHai()",[19,79593,79594],{},"②",[19,79596,79597],{},"const obj1 = {",[19,79599,79577],{},[19,79601,79602],{},"sayHai: function () {",[19,79604,79605],{},"let i = 10",[19,79607,79608],{},"const count = () => {",[19,79610,79611],{},"console.log(this)",[19,79613,79614],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79616,79617],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79619,107],{},[19,79621,79622],{},"count()",[19,79624,107],{},[19,79626,107],{},[19,79628,79629],{},"obj1.sayHai()",[14,79631,79633],{"id":79632},"_46-解构赋值","4.6 解构赋值",[1752,79635,79637],{"id":79636},"_461-数组解构","4.6.1 数组解构",[19,79639,79640],{},"以前要是使用数组中的值的话：",[19,79642,79643],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79645,79646],{},"const arr=[100,60,80]",[19,79648,79649],{},"const max=arr[0]",[19,79651,79652],{},"const min=arr[1]",[19,79654,79655],{},"const avg=arr[2]",[19,79657,79658],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79660,79661],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79663,79664],{},"这个写法就类似于上边的那种用很多const的方法",[19,79666,79667],{},[3879,79668],{"alt":31,"src":79669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,79671,79673],{"className":52982,"code":79672,"language":52984,"meta":31,"style":31},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[33,79674,79675,79680,79685,79690,79695,79700,79704,79708,79713,79717,79722,79727,79731,79736,79741,79752,79762,79767,79772,79777,79781,79785],{"__ignoreMap":31},[36,79676,79677],{"class":38,"line":39},[36,79678,79679],{"class":42},"①变量之间交换值:\n",[36,79681,79682],{"class":38,"line":54},[36,79683,79684],{"class":42},"let a=1\n",[36,79686,79687],{"class":38,"line":66},[36,79688,79689],{"class":42},"let b=2;\n",[36,79691,79692],{"class":38,"line":73},[36,79693,79694],{"class":42},"必须加这行代码，不然就会报错\n",[36,79696,79697],{"class":38,"line":86},[36,79698,79699],{"class":42},"[b,a]=[a,b]\n",[36,79701,79702],{"class":38,"line":126},[36,79703,70],{"emptyLinePlaceholder":69},[36,79705,79706],{"class":38,"line":131},[36,79707,70],{"emptyLinePlaceholder":69},[36,79709,79710],{"class":38,"line":225},[36,79711,79712],{"class":42},"可以写成下面的方式：\n",[36,79714,79715],{"class":38,"line":235},[36,79716,79684],{"class":42},[36,79718,79719],{"class":38,"line":377},[36,79720,79721],{"class":42},"let b=2\n",[36,79723,79724],{"class":38,"line":617},[36,79725,79726],{"class":42},";[b,a]=[a,b]\n",[36,79728,79729],{"class":38,"line":643},[36,79730,70],{"emptyLinePlaceholder":69},[36,79732,79733],{"class":38,"line":921},[36,79734,79735],{"class":42},"②排序\n",[36,79737,79738],{"class":38,"line":934},[36,79739,79740],{"class":42},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,79742,79743,79746,79749],{"class":38,"line":939},[36,79744,79745],{"class":42},"for (let i = 0; i ",[36,79747,3463],{"class":79748},"s7hpK",[36,79750,79751],{"class":42}," arr1.length; i++) {\n",[36,79753,79754,79757,79759],{"class":38,"line":949},[36,79755,79756],{"class":42},"   for (let j = 0; j ",[36,79758,3463],{"class":79748},[36,79760,79761],{"class":42}," arr1.length - 1; j++) {\n",[36,79763,79764],{"class":38,"line":962},[36,79765,79766],{"class":42},"      if (arr1[j] > arr1[j + 1]) {\n",[36,79768,79769],{"class":38,"line":974},[36,79770,79771],{"class":42},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,79773,79774],{"class":38,"line":979},[36,79775,79776],{"class":42},"       }\n",[36,79778,79779],{"class":38,"line":994},[36,79780,6692],{"class":42},[36,79782,79783],{"class":38,"line":1006},[36,79784,3982],{"class":42},[36,79786,79787],{"class":38,"line":1011},[36,79788,79789],{"class":42},"console.log(arr1)\n",[19,79791,79792],{},"数组解构的细节：",[19,79794,79795],{},"①变量多，单元值少",[19,79797,79798],{},[3879,79799],{"alt":31,"src":79800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79802,79803],{},"防止出现undefined的方法：",[19,79805,79806],{},"const [a=0,b=0] =[1]",[19,79808,79809],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79811,79812],{},"②变量少，单元值多",[19,79814,79815],{},[3879,79816],{"alt":31,"src":79817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79819,79820],{},"此时可以使用剩余参数来接收多余的值",[19,79822,79823],{},"const [a,b,...c]=[1,2,3,4]",[19,79825,79826],{},"console.log(c) 输出[3,4]",[19,79828,79829],{},"③可以按需导入，忽略某些返回值",[19,79831,79832],{},[3879,79833],{"alt":31,"src":79834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79836,79837],{},"④支持多维数组的结构",[26,79839,79843],{"className":79840,"code":79841,"language":79842,"meta":31,"style":31},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[33,79844,79845,79873,79889,79904,79919],{"__ignoreMap":31},[36,79846,79847,79849,79851,79853,79855,79857,79859,79861,79864,79866,79868,79870],{"class":38,"line":39},[36,79848,9173],{"class":46},[36,79850,54181],{"class":42},[36,79852,47],{"class":46},[36,79854,54574],{"class":42},[36,79856,1906],{"class":62},[36,79858,630],{"class":42},[36,79860,1911],{"class":62},[36,79862,79863],{"class":42},", [",[36,79865,2634],{"class":62},[36,79867,630],{"class":42},[36,79869,2850],{"class":62},[36,79871,79872],{"class":42},"]]\n",[36,79874,79875,79878,79880,79882,79884,79886],{"class":38,"line":54},[36,79876,79877],{"class":42},"console.",[36,79879,60595],{"class":79},[36,79881,6235],{"class":42},[36,79883,2751],{"class":62},[36,79885,6599],{"class":42},[36,79887,79888],{"class":2621},"  \u002F\u002F1\n",[36,79890,79891,79893,79895,79897,79899,79901],{"class":38,"line":66},[36,79892,79877],{"class":42},[36,79894,60595],{"class":79},[36,79896,6235],{"class":42},[36,79898,1906],{"class":62},[36,79900,6599],{"class":42},[36,79902,79903],{"class":2621},"  \u002F\u002F2\n",[36,79905,79906,79908,79910,79912,79914,79916],{"class":38,"line":73},[36,79907,79877],{"class":42},[36,79909,60595],{"class":79},[36,79911,6235],{"class":42},[36,79913,1911],{"class":62},[36,79915,6599],{"class":42},[36,79917,79918],{"class":2621},"  \u002F\u002F[3,4]\n",[36,79920,79921,79923,79925,79927,79929,79931,79933,79935],{"class":38,"line":86},[36,79922,79877],{"class":42},[36,79924,60595],{"class":79},[36,79926,6235],{"class":42},[36,79928,1911],{"class":62},[36,79930,7284],{"class":42},[36,79932,2751],{"class":62},[36,79934,6599],{"class":42},[36,79936,79937],{"class":2621},"  \u002F\u002F3\n",[26,79939,79941],{"className":79840,"code":79940,"language":79842,"meta":31,"style":31},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[33,79942,79943,79970,79981,79992],{"__ignoreMap":31},[36,79944,79945,79947,79950,79952,79954,79956,79958,79960,79962,79964,79966,79968],{"class":38,"line":39},[36,79946,9173],{"class":46},[36,79948,79949],{"class":42}," [a, b, c] ",[36,79951,47],{"class":46},[36,79953,54574],{"class":42},[36,79955,1906],{"class":62},[36,79957,630],{"class":42},[36,79959,1911],{"class":62},[36,79961,79863],{"class":42},[36,79963,2634],{"class":62},[36,79965,630],{"class":42},[36,79967,2850],{"class":62},[36,79969,79872],{"class":42},[36,79971,79972,79974,79976,79979],{"class":38,"line":54},[36,79973,79877],{"class":42},[36,79975,60595],{"class":79},[36,79977,79978],{"class":42},"(a)",[36,79980,79888],{"class":2621},[36,79982,79983,79985,79987,79990],{"class":38,"line":66},[36,79984,79877],{"class":42},[36,79986,60595],{"class":79},[36,79988,79989],{"class":42},"(b)",[36,79991,79903],{"class":2621},[36,79993,79994,79996,79998,80001],{"class":38,"line":73},[36,79995,79877],{"class":42},[36,79997,60595],{"class":79},[36,79999,80000],{"class":42},"(c)",[36,80002,79918],{"class":2621},[26,80004,80006],{"className":79840,"code":80005,"language":79842,"meta":31,"style":31},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[33,80007,80008,80035,80045,80055,80065],{"__ignoreMap":31},[36,80009,80010,80012,80015,80017,80019,80021,80023,80025,80027,80029,80031,80033],{"class":38,"line":39},[36,80011,9173],{"class":46},[36,80013,80014],{"class":42}," [a, b, [c, d]] ",[36,80016,47],{"class":46},[36,80018,54574],{"class":42},[36,80020,1906],{"class":62},[36,80022,630],{"class":42},[36,80024,1911],{"class":62},[36,80026,79863],{"class":42},[36,80028,2634],{"class":62},[36,80030,630],{"class":42},[36,80032,2850],{"class":62},[36,80034,79872],{"class":42},[36,80036,80037,80039,80041,80043],{"class":38,"line":54},[36,80038,79877],{"class":42},[36,80040,60595],{"class":79},[36,80042,79978],{"class":42},[36,80044,79888],{"class":2621},[36,80046,80047,80049,80051,80053],{"class":38,"line":66},[36,80048,79877],{"class":42},[36,80050,60595],{"class":79},[36,80052,79989],{"class":42},[36,80054,79903],{"class":2621},[36,80056,80057,80059,80061,80063],{"class":38,"line":73},[36,80058,79877],{"class":42},[36,80060,60595],{"class":79},[36,80062,80000],{"class":42},[36,80064,79937],{"class":2621},[36,80066,80067,80069,80071,80074],{"class":38,"line":86},[36,80068,79877],{"class":42},[36,80070,60595],{"class":79},[36,80072,80073],{"class":42},"(d)",[36,80075,80076],{"class":2621},"  \u002F\u002F4\n",[1752,80078,80080],{"id":80079},"_462-对象解构","4.6.2 对象解构",[19,80082,80083],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,80085,80086],{},"用的非常非常多！！！！！！",[24368,80088,80090],{"id":80089},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,80092,80093],{},"基本语法：",[650,80095,80096,80099,80102,80105],{},[653,80097,80098],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[653,80100,80101],{},"对象属性的值将被赋值给与属性名相同的变量",[653,80103,80104],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[653,80106,80107],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,80109,80111],{"className":52982,"code":80110,"language":52984,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,80112,80113,80118,80123,80128,80132],{"__ignoreMap":31},[36,80114,80115],{"class":38,"line":39},[36,80116,80117],{"class":42},"const obj = {\n",[36,80119,80120],{"class":38,"line":54},[36,80121,80122],{"class":42},"   uname: 'pink老师',\n",[36,80124,80125],{"class":38,"line":66},[36,80126,80127],{"class":42},"   age: 18,\n",[36,80129,80130],{"class":38,"line":73},[36,80131,3982],{"class":42},[36,80133,80134],{"class":38,"line":86},[36,80135,80136],{"class":42},"const { uname, age } = obj\n",[19,80138,80139],{},"上方代码这样写等价于：",[19,80141,80142],{},"const uname等价于obj.uname",[19,80144,80145],{},"变量名可以重新改名：",[19,80147,80148],{},"const uname='red老师'",[19,80150,80151],{},"const user={",[19,80153,80154],{},"  uname:'pink老师',",[19,80156,80157],{},"  age:18",[19,80159,107],{},[19,80161,80162],{},"const {uname,age}=user",[19,80164,80165],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80167,80168],{},"const {旧变量名：新变量名}=对象",[19,80170,80171],{},"const {uname:username,age}=user",[24368,80173,80175],{"id":80174},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80177,80178],{},[3879,80179],{"alt":31,"src":80180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24368,80182,80184],{"id":80183},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80186,80187],{},[3879,80188],{"alt":31,"src":80189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,80191,80193],{"className":55415,"code":80192,"language":55417,"meta":31,"style":31},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[33,80194,80195,80203,80208,80213,80218,80223,80228,80233,80238,80243,80247,80252,80257],{"__ignoreMap":31},[36,80196,80197,80199,80201],{"class":38,"line":39},[36,80198,54492],{"class":42},[36,80200,54161],{"class":53649},[36,80202,53656],{"class":42},[36,80204,80205],{"class":38,"line":54},[36,80206,80207],{"class":42},"    const pig = {\n",[36,80209,80210],{"class":38,"line":66},[36,80211,80212],{"class":42},"      name: '佩奇',\n",[36,80214,80215],{"class":38,"line":73},[36,80216,80217],{"class":42},"      family: {\n",[36,80219,80220],{"class":38,"line":86},[36,80221,80222],{"class":42},"        mother: '猪妈妈',\n",[36,80224,80225],{"class":38,"line":126},[36,80226,80227],{"class":42},"        father: '猪爸爸',\n",[36,80229,80230],{"class":38,"line":131},[36,80231,80232],{"class":42},"        sister: '乔治'\n",[36,80234,80235],{"class":38,"line":225},[36,80236,80237],{"class":42},"      },\n",[36,80239,80240],{"class":38,"line":235},[36,80241,80242],{"class":42},"      age: 6\n",[36,80244,80245],{"class":38,"line":377},[36,80246,4580],{"class":42},[36,80248,80249],{"class":38,"line":617},[36,80250,80251],{"class":42},"    \u002F\u002F 多级对象解构\n",[36,80253,80254],{"class":38,"line":643},[36,80255,80256],{"class":42},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,80258,80259,80261,80263],{"class":38,"line":921},[36,80260,54765],{"class":42},[36,80262,54161],{"class":53649},[36,80264,53656],{"class":42},[19,80266,80267],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,80269,80272],{"className":80270,"code":80271,"language":78792,"meta":31,"style":31},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[33,80273,80274,80279,80290,80302,80314,80323,80327,80338,80350,80360,80365,80369,80379,80390,80399,80403,80407,80418,80429,80438,80442,80447],{"__ignoreMap":31},[36,80275,80276],{"class":38,"line":39},[36,80277,80278],{"class":2621},"    \u002F\u002F 这是后台传递过来的数据\n",[36,80280,80281,80283,80286,80288],{"class":38,"line":54},[36,80282,13599],{"class":46},[36,80284,80285],{"class":42}," msg ",[36,80287,47],{"class":46},[36,80289,2150],{"class":42},[36,80291,80292,80295,80297,80300],{"class":38,"line":66},[36,80293,80294],{"class":50},"      \"code\"",[36,80296,3413],{"class":46},[36,80298,80299],{"class":62}," 200",[36,80301,33820],{"class":42},[36,80303,80304,80307,80309,80312],{"class":38,"line":73},[36,80305,80306],{"class":50},"      \"msg\"",[36,80308,3413],{"class":46},[36,80310,80311],{"class":50}," \"获取新闻列表成功\"",[36,80313,33820],{"class":42},[36,80315,80316,80319,80321],{"class":38,"line":86},[36,80317,80318],{"class":50},"      \"data\"",[36,80320,3413],{"class":46},[36,80322,57795],{"class":42},[36,80324,80325],{"class":38,"line":126},[36,80326,4901],{"class":42},[36,80328,80329,80332,80334,80336],{"class":38,"line":131},[36,80330,80331],{"class":50},"          \"id\"",[36,80333,3413],{"class":46},[36,80335,27489],{"class":62},[36,80337,33820],{"class":42},[36,80339,80340,80343,80345,80348],{"class":38,"line":225},[36,80341,80342],{"class":50},"          \"title\"",[36,80344,3413],{"class":46},[36,80346,80347],{"class":50}," \"5G商用自己，三大运用商收入下降\"",[36,80349,33820],{"class":42},[36,80351,80352,80355,80357],{"class":38,"line":235},[36,80353,80354],{"class":50},"          \"count\"",[36,80356,3413],{"class":46},[36,80358,80359],{"class":62}," 58\n",[36,80361,80362],{"class":38,"line":377},[36,80363,80364],{"class":42},"        },\n",[36,80366,80367],{"class":38,"line":617},[36,80368,4901],{"class":42},[36,80370,80371,80373,80375,80377],{"class":38,"line":643},[36,80372,80331],{"class":50},[36,80374,3413],{"class":46},[36,80376,17130],{"class":62},[36,80378,33820],{"class":42},[36,80380,80381,80383,80385,80388],{"class":38,"line":921},[36,80382,80342],{"class":50},[36,80384,3413],{"class":46},[36,80386,80387],{"class":50}," \"国际媒体头条速览\"",[36,80389,33820],{"class":42},[36,80391,80392,80394,80396],{"class":38,"line":934},[36,80393,80354],{"class":50},[36,80395,3413],{"class":46},[36,80397,80398],{"class":62}," 56\n",[36,80400,80401],{"class":38,"line":939},[36,80402,80364],{"class":42},[36,80404,80405],{"class":38,"line":949},[36,80406,4901],{"class":42},[36,80408,80409,80411,80413,80416],{"class":38,"line":962},[36,80410,80331],{"class":50},[36,80412,3413],{"class":46},[36,80414,80415],{"class":62}," 3",[36,80417,33820],{"class":42},[36,80419,80420,80422,80424,80427],{"class":38,"line":974},[36,80421,80342],{"class":50},[36,80423,3413],{"class":46},[36,80425,80426],{"class":50}," \"乌克兰和俄罗斯持续冲突\"",[36,80428,33820],{"class":42},[36,80430,80431,80433,80435],{"class":38,"line":979},[36,80432,80354],{"class":50},[36,80434,3413],{"class":46},[36,80436,80437],{"class":62}," 1669\n",[36,80439,80440],{"class":38,"line":994},[36,80441,80364],{"class":42},[36,80443,80444],{"class":38,"line":1006},[36,80445,80446],{"class":42},"      ]\n",[36,80448,80449],{"class":38,"line":1011},[36,80450,4580],{"class":42},[19,80452,80453],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80455,80456],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80458,80459],{},"\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,80461,80462],{},"function({data}) {",[19,80464,80465],{},"console.log(data)",[19,80467,107],{},[19,80469,80470],{},"render(msg)",[19,80472,80473],{},"实参传递给形参的时候解构了",[19,80475,80476],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80478,80479],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80481,80482],{},"function render({data:mydata}) {",[19,80484,80485],{},"  console.log(data)",[19,80487,107],{},[1752,80489,80491],{"id":80490},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80493,80494],{},"有两种情况：一个是数组结构，一个是立即执行函数",[650,80496,80497],{},[653,80498,80499],{},"如果对一个数组进行遍历，有两种方式：",[19,80501,80502],{},"①法1",[19,80504,80505],{},"const arr=[1,2,3]",[19,80507,80508],{},"arr.map(function(item,index) {",[19,80510,80511],{},"  console.log(item)",[19,80513,54812],{},[19,80515,80516],{},[3879,80517],{"alt":31,"src":80518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80520,80521],{},"②法2",[19,80523,80524],{},"const str='pink'",[19,80526,80527],{},"[1,2,3].map(function(item,index) {",[19,80529,80530],{},"console.log(item)",[19,80532,54812],{},[19,80534,80535],{},[3879,80536],{"alt":31,"src":80537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80539,80540],{},"此时会报错",[19,80542,80543],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80545,80530],{},[19,80547,54812],{},[19,80549,80550],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80552,80554],{"id":80553},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80556,80557],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80559,80560],{},"可以理解为加强版的for循环",[19,80562,80563],{},[3879,80564],{"alt":31,"src":80565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80567,80568],{},"里边不写return，不返回数组，只遍历不返回",[19,80570,80571],{},"map是返回数组",[19,80573,80574],{},"forEach主要用于遍历数组对象",[26,80576,80578],{"className":55415,"code":80577,"language":55417,"meta":31,"style":31},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[33,80579,80580,80588,80593,80598,80603,80608,80612,80617],{"__ignoreMap":31},[36,80581,80582,80584,80586],{"class":38,"line":39},[36,80583,54492],{"class":42},[36,80585,54161],{"class":53649},[36,80587,53656],{"class":42},[36,80589,80590],{"class":38,"line":54},[36,80591,80592],{"class":42},"    const arr = ['red', 'green', 'pink']\n",[36,80594,80595],{"class":38,"line":66},[36,80596,80597],{"class":42},"    const result = arr.forEach(function (item, index) {\n",[36,80599,80600],{"class":38,"line":73},[36,80601,80602],{"class":42},"      console.log(item)\n",[36,80604,80605],{"class":38,"line":86},[36,80606,80607],{"class":42},"      console.log(index)\n",[36,80609,80610],{"class":38,"line":126},[36,80611,35813],{"class":42},[36,80613,80614],{"class":38,"line":131},[36,80615,80616],{"class":42},"    console.log(result)\n",[36,80618,80619,80621,80623],{"class":38,"line":225},[36,80620,54765],{"class":42},[36,80622,54161],{"class":53649},[36,80624,53656],{"class":42},[19,80626,80627],{},[3879,80628],{"alt":31,"src":80629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80631,80633],{"id":80632},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80635,80636],{},[3879,80637],{"alt":31,"src":80638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80640,80641],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,80643,80645],{"className":55415,"code":80644,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,80646,80647,80655,80663,80668,80673,80677,80681,80686,80690,80695,80703],{"__ignoreMap":31},[36,80648,80649,80651,80653],{"class":38,"line":39},[36,80650,3463],{"class":42},[36,80652,54148],{"class":53649},[36,80654,53656],{"class":42},[36,80656,80657,80659,80661],{"class":38,"line":54},[36,80658,54492],{"class":42},[36,80660,54161],{"class":53649},[36,80662,53656],{"class":42},[36,80664,80665],{"class":38,"line":66},[36,80666,80667],{"class":42},"    const arr = [10, 20, 30]\n",[36,80669,80670],{"class":38,"line":73},[36,80671,80672],{"class":42},"    const newArr = arr.filter(function (item, index) {\n",[36,80674,80675],{"class":38,"line":86},[36,80676,80602],{"class":42},[36,80678,80679],{"class":38,"line":126},[36,80680,80607],{"class":42},[36,80682,80683],{"class":38,"line":131},[36,80684,80685],{"class":42},"      return item >= 20\n",[36,80687,80688],{"class":38,"line":225},[36,80689,35813],{"class":42},[36,80691,80692],{"class":38,"line":235},[36,80693,80694],{"class":42},"    console.log(newArr)\n",[36,80696,80697,80699,80701],{"class":38,"line":377},[36,80698,54765],{"class":42},[36,80700,54161],{"class":53649},[36,80702,53656],{"class":42},[36,80704,80705,80707,80709],{"class":38,"line":617},[36,80706,54133],{"class":42},[36,80708,54148],{"class":53649},[36,80710,53656],{"class":42},[19,80712,80713],{},"这个也可以写成箭头函数：",[26,80715,80717],{"className":52982,"code":80716,"language":52984,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,80718,80719],{"__ignoreMap":31},[36,80720,80721],{"class":38,"line":39},[36,80722,80716],{"class":42},[14,80724,80726],{"id":80725},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80728,80729],{},[3879,80730],{"alt":31,"src":80731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80733,80734],{},"步骤：",[19,80736,80737],{},"①：渲染页面模块",[3557,80739,80740,80743],{},[653,80741,80742],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[653,80744,80745],{},"用forEach+字符串的形式",[19,80747,80748],{},"②：点击不同需求，显示不同页面内容",[3557,80750,80751,80754,80757,80760,80763],{},[653,80752,80753],{},"点击采取事件委托方式 .filter",[653,80755,80756],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[653,80758,80759],{},"筛选条件是根据点击的 data-index 来判断",[653,80761,80762],{},"可以使用对象解构，把事件对象解构",[653,80764,80765],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,80767,80769],{"className":52982,"code":80768,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,80770,80771,80781,80795,80799,80807,80821,80841,80853,80861,80867,80877,80887,80897,80901,80905,80911,80924,80936,80946,80958,80962,80966,80973,80986,80998,81015,81033,81046,81050,81054,81066,81076,81080,81084,81091,81132,81159,81169,81173,81177,81185,81197,81201,81205,81213,81225,81237,81248,81252,81256,81265,81277,81288,81292,81296,81305,81317,81329,81333,81337,81344,81354,81366,81378,81393,81397,81401,81409,81425,81435,81445,81455,81467,81471,81475,81485,81496,81506,81510,81518,81526,81530,81538,81553,81579,81604,81629,81648,81656,81670,81675,81680,81685,81690,81695,81703,81711,81716,81727,81732,81742,81752,81762,81772,81776,81780,81789,81798,81807,81816,81820,81824,81833,81842,81851,81860,81864,81868,81877,81886,81895,81904,81908,81912,81921,81930,81939,81948,81952,81956,81965,81974,81983,81992,81996,82000,82009,82018,82027,82036,82040,82044,82053,82062,82070,82079,82083,82087,82091,82096,82108,82113,82125,82129,82146,82173,82182,82187,82197,82207,82216,82221,82226,82230,82235,82252,82256,82261,82269,82274,82301,82306,82326,82331,82343,82348,82353,82358,82369,82383,82420,82438,82471,82488,82512,82516,82521,82527,82531,82535,82539,82547,82555,82559],{"__ignoreMap":31},[36,80772,80773,80775,80777,80779],{"class":38,"line":39},[36,80774,53646],{"class":42},[36,80776,53650],{"class":53649},[36,80778,53653],{"class":79},[36,80780,53656],{"class":42},[36,80782,80783,80785,80787,80789,80791,80793],{"class":38,"line":54},[36,80784,3463],{"class":42},[36,80786,52984],{"class":53649},[36,80788,53665],{"class":79},[36,80790,47],{"class":42},[36,80792,53670],{"class":50},[36,80794,53656],{"class":42},[36,80796,80797],{"class":38,"line":66},[36,80798,70],{"emptyLinePlaceholder":69},[36,80800,80801,80803,80805],{"class":38,"line":73},[36,80802,3463],{"class":42},[36,80804,53683],{"class":53649},[36,80806,53656],{"class":42},[36,80808,80809,80811,80813,80815,80817,80819],{"class":38,"line":86},[36,80810,54492],{"class":42},[36,80812,53693],{"class":53649},[36,80814,53696],{"class":79},[36,80816,47],{"class":42},[36,80818,53701],{"class":50},[36,80820,53656],{"class":42},[36,80822,80823,80825,80827,80829,80831,80833,80835,80837,80839],{"class":38,"line":126},[36,80824,54492],{"class":42},[36,80826,53693],{"class":53649},[36,80828,17295],{"class":79},[36,80830,47],{"class":42},[36,80832,53740],{"class":50},[36,80834,53720],{"class":79},[36,80836,47],{"class":42},[36,80838,53747],{"class":50},[36,80840,53656],{"class":42},[36,80842,80843,80845,80847,80849,80851],{"class":38,"line":131},[36,80844,54492],{"class":42},[36,80846,53756],{"class":53649},[36,80848,53759],{"class":42},[36,80850,53756],{"class":53649},[36,80852,53656],{"class":42},[36,80854,80855,80857,80859],{"class":38,"line":225},[36,80856,54492],{"class":42},[36,80858,2467],{"class":53649},[36,80860,53656],{"class":42},[36,80862,80863,80865],{"class":38,"line":235},[36,80864,8785],{"class":53649},[36,80866,2150],{"class":42},[36,80868,80869,80871,80873,80875],{"class":38,"line":377},[36,80870,57043],{"class":62},[36,80872,2158],{"class":42},[36,80874,2751],{"class":62},[36,80876,3711],{"class":42},[36,80878,80879,80881,80883,80885],{"class":38,"line":617},[36,80880,57054],{"class":62},[36,80882,2158],{"class":42},[36,80884,2751],{"class":62},[36,80886,3711],{"class":42},[36,80888,80889,80891,80893,80895],{"class":38,"line":643},[36,80890,74941],{"class":62},[36,80892,2158],{"class":42},[36,80894,62853],{"class":62},[36,80896,3711],{"class":42},[36,80898,80899],{"class":38,"line":921},[36,80900,4580],{"class":42},[36,80902,80903],{"class":38,"line":934},[36,80904,70],{"emptyLinePlaceholder":69},[36,80906,80907,80909],{"class":38,"line":939},[36,80908,64471],{"class":79},[36,80910,2150],{"class":42},[36,80912,80913,80915,80917,80920,80922],{"class":38,"line":949},[36,80914,57119],{"class":62},[36,80916,2158],{"class":42},[36,80918,80919],{"class":62},"990",[36,80921,53840],{"class":46},[36,80923,3711],{"class":42},[36,80925,80926,80928,80930,80932,80934],{"class":38,"line":962},[36,80927,57054],{"class":62},[36,80929,2158],{"class":42},[36,80931,2751],{"class":62},[36,80933,53904],{"class":62},[36,80935,3711],{"class":42},[36,80937,80938,80940,80942,80944],{"class":38,"line":974},[36,80939,57357],{"class":62},[36,80941,2158],{"class":42},[36,80943,53825],{"class":62},[36,80945,3711],{"class":42},[36,80947,80948,80951,80953,80956],{"class":38,"line":979},[36,80949,80950],{"class":62},"      flex-wrap",[36,80952,2158],{"class":42},[36,80954,80955],{"class":62},"wrap",[36,80957,3711],{"class":42},[36,80959,80960],{"class":38,"line":994},[36,80961,4580],{"class":42},[36,80963,80964],{"class":38,"line":1006},[36,80965,70],{"emptyLinePlaceholder":69},[36,80967,80968,80971],{"class":38,"line":1011},[36,80969,80970],{"class":79},"    .item",[36,80972,2150],{"class":42},[36,80974,80975,80977,80979,80982,80984],{"class":38,"line":1023},[36,80976,57119],{"class":62},[36,80978,2158],{"class":42},[36,80980,80981],{"class":62},"240",[36,80983,53840],{"class":46},[36,80985,3711],{"class":42},[36,80987,80988,80990,80992,80994,80996],{"class":38,"line":1028},[36,80989,64348],{"class":62},[36,80991,2158],{"class":42},[36,80993,3002],{"class":62},[36,80995,53840],{"class":46},[36,80997,3711],{"class":42},[36,80999,81000,81002,81004,81006,81008,81011,81013],{"class":38,"line":1033},[36,81001,57043],{"class":62},[36,81003,2158],{"class":42},[36,81005,3254],{"class":62},[36,81007,53840],{"class":46},[36,81009,81010],{"class":62}," 30",[36,81012,53840],{"class":46},[36,81014,3711],{"class":42},[36,81016,81017,81019,81021,81023,81026,81029,81031],{"class":38,"line":1053},[36,81018,64208],{"class":62},[36,81020,2158],{"class":42},[36,81022,30491],{"class":62},[36,81024,81025],{"class":62}," ease",[36,81027,81028],{"class":62}," .5",[36,81030,3249],{"class":46},[36,81032,3711],{"class":42},[36,81034,81035,81038,81040,81042,81044],{"class":38,"line":1064},[36,81036,81037],{"class":62},"      margin-bottom",[36,81039,2158],{"class":42},[36,81041,3254],{"class":62},[36,81043,53840],{"class":46},[36,81045,3711],{"class":42},[36,81047,81048],{"class":38,"line":1075},[36,81049,4580],{"class":42},[36,81051,81052],{"class":38,"line":2291},[36,81053,70],{"emptyLinePlaceholder":69},[36,81055,81056,81059,81061,81064],{"class":38,"line":2329},[36,81057,81058],{"class":79},"    .item:nth-child",[36,81060,92],{"class":42},[36,81062,81063],{"class":62},"4n",[36,81065,14819],{"class":42},[36,81067,81068,81070,81072,81074],{"class":38,"line":2334},[36,81069,64348],{"class":62},[36,81071,2158],{"class":42},[36,81073,2751],{"class":62},[36,81075,3711],{"class":42},[36,81077,81078],{"class":38,"line":2339},[36,81079,4580],{"class":42},[36,81081,81082],{"class":38,"line":2365},[36,81083,70],{"emptyLinePlaceholder":69},[36,81085,81086,81089],{"class":38,"line":2373},[36,81087,81088],{"class":79},"    .item:hover",[36,81090,2150],{"class":42},[36,81092,81093,81096,81098,81100,81102,81104,81106,81108,81110,81113,81115,81117,81119,81121,81123,81125,81127,81130],{"class":38,"line":5001},[36,81094,81095],{"class":62},"      box-shadow",[36,81097,2158],{"class":42},[36,81099,2751],{"class":62},[36,81101,53840],{"class":46},[36,81103,899],{"class":62},[36,81105,53840],{"class":46},[36,81107,4541],{"class":62},[36,81109,53840],{"class":46},[36,81111,81112],{"class":62}," rgba",[36,81114,92],{"class":42},[36,81116,2751],{"class":62},[36,81118,630],{"class":42},[36,81120,2751],{"class":62},[36,81122,630],{"class":42},[36,81124,2751],{"class":62},[36,81126,630],{"class":42},[36,81128,81129],{"class":62},".2",[36,81131,5104],{"class":42},[36,81133,81134,81137,81139,81142,81144,81146,81148,81151,81153,81155,81157],{"class":38,"line":5006},[36,81135,81136],{"class":62},"      transform",[36,81138,2158],{"class":42},[36,81140,81141],{"class":62},"translate3d",[36,81143,92],{"class":42},[36,81145,2751],{"class":62},[36,81147,630],{"class":42},[36,81149,81150],{"class":62},"-4",[36,81152,53840],{"class":46},[36,81154,630],{"class":42},[36,81156,2751],{"class":62},[36,81158,5104],{"class":42},[36,81160,81161,81163,81165,81167],{"class":38,"line":10328},[36,81162,64373],{"class":62},[36,81164,2158],{"class":42},[36,81166,64378],{"class":62},[36,81168,3711],{"class":42},[36,81170,81171],{"class":38,"line":10352},[36,81172,4580],{"class":42},[36,81174,81175],{"class":38,"line":10357},[36,81176,70],{"emptyLinePlaceholder":69},[36,81178,81179,81181,81183],{"class":38,"line":10363},[36,81180,80970],{"class":79},[36,81182,57963],{"class":53649},[36,81184,2150],{"class":42},[36,81186,81187,81189,81191,81193,81195],{"class":38,"line":10390},[36,81188,57119],{"class":62},[36,81190,2158],{"class":42},[36,81192,1070],{"class":62},[36,81194,2884],{"class":46},[36,81196,3711],{"class":42},[36,81198,81199],{"class":38,"line":10395},[36,81200,4580],{"class":42},[36,81202,81203],{"class":38,"line":10401},[36,81204,70],{"emptyLinePlaceholder":69},[36,81206,81207,81209,81211],{"class":38,"line":10413},[36,81208,80970],{"class":79},[36,81210,64652],{"class":79},[36,81212,2150],{"class":42},[36,81214,81215,81217,81219,81221,81223],{"class":38,"line":10425},[36,81216,57270],{"class":62},[36,81218,2158],{"class":42},[36,81220,633],{"class":62},[36,81222,53840],{"class":46},[36,81224,3711],{"class":42},[36,81226,81227,81229,81231,81233,81235],{"class":38,"line":10437},[36,81228,81037],{"class":62},[36,81230,2158],{"class":42},[36,81232,3002],{"class":62},[36,81234,53840],{"class":46},[36,81236,3711],{"class":42},[36,81238,81239,81241,81243,81246],{"class":38,"line":12095},[36,81240,59764],{"class":62},[36,81242,2158],{"class":42},[36,81244,81245],{"class":62},"#666",[36,81247,3711],{"class":42},[36,81249,81250],{"class":38,"line":12120},[36,81251,4580],{"class":42},[36,81253,81254],{"class":38,"line":12143},[36,81255,70],{"emptyLinePlaceholder":69},[36,81257,81258,81260,81263],{"class":38,"line":12167},[36,81259,80970],{"class":79},[36,81261,81262],{"class":79}," .price",[36,81264,2150],{"class":42},[36,81266,81267,81269,81271,81273,81275],{"class":38,"line":12172},[36,81268,57270],{"class":62},[36,81270,2158],{"class":42},[36,81272,3304],{"class":62},[36,81274,53840],{"class":46},[36,81276,3711],{"class":42},[36,81278,81279,81281,81283,81286],{"class":38,"line":12177},[36,81280,59764],{"class":62},[36,81282,2158],{"class":42},[36,81284,81285],{"class":62},"firebrick",[36,81287,3711],{"class":42},[36,81289,81290],{"class":38,"line":12182},[36,81291,4580],{"class":42},[36,81293,81294],{"class":38,"line":12191},[36,81295,70],{"emptyLinePlaceholder":69},[36,81297,81298,81300,81303],{"class":38,"line":12196},[36,81299,80970],{"class":79},[36,81301,81302],{"class":79}," .price::before",[36,81304,2150],{"class":42},[36,81306,81307,81310,81312,81315],{"class":38,"line":12202},[36,81308,81309],{"class":62},"      content",[36,81311,2158],{"class":42},[36,81313,81314],{"class":50},"'￥'",[36,81316,3711],{"class":42},[36,81318,81319,81321,81323,81325,81327],{"class":38,"line":12223},[36,81320,57270],{"class":62},[36,81322,2158],{"class":42},[36,81324,3104],{"class":62},[36,81326,53840],{"class":46},[36,81328,3711],{"class":42},[36,81330,81331],{"class":38,"line":12229},[36,81332,4580],{"class":42},[36,81334,81335],{"class":38,"line":12243},[36,81336,70],{"emptyLinePlaceholder":69},[36,81338,81339,81342],{"class":38,"line":12249},[36,81340,81341],{"class":79},"    .filter",[36,81343,2150],{"class":42},[36,81345,81346,81348,81350,81352],{"class":38,"line":12276},[36,81347,57357],{"class":62},[36,81349,2158],{"class":42},[36,81351,53825],{"class":62},[36,81353,3711],{"class":42},[36,81355,81356,81358,81360,81362,81364],{"class":38,"line":12285},[36,81357,57119],{"class":62},[36,81359,2158],{"class":42},[36,81361,80919],{"class":62},[36,81363,53840],{"class":46},[36,81365,3711],{"class":42},[36,81367,81368,81370,81372,81374,81376],{"class":38,"line":12291},[36,81369,57054],{"class":62},[36,81371,2158],{"class":42},[36,81373,2751],{"class":62},[36,81375,53904],{"class":62},[36,81377,3711],{"class":42},[36,81379,81380,81382,81384,81386,81388,81390],{"class":38,"line":12299},[36,81381,57043],{"class":62},[36,81383,2158],{"class":42},[36,81385,3210],{"class":62},[36,81387,53840],{"class":46},[36,81389,81010],{"class":62},[36,81391,81392],{"class":46},"px\n",[36,81394,81395],{"class":38,"line":12304},[36,81396,4580],{"class":42},[36,81398,81399],{"class":38,"line":18977},[36,81400,70],{"emptyLinePlaceholder":69},[36,81402,81403,81405,81407],{"class":38,"line":18983},[36,81404,81341],{"class":79},[36,81406,3815],{"class":53649},[36,81408,2150],{"class":42},[36,81410,81411,81413,81415,81417,81419,81421,81423],{"class":38,"line":19006},[36,81412,57043],{"class":62},[36,81414,2158],{"class":42},[36,81416,3002],{"class":62},[36,81418,53840],{"class":46},[36,81420,11330],{"class":62},[36,81422,53840],{"class":46},[36,81424,3711],{"class":42},[36,81426,81427,81429,81431,81433],{"class":38,"line":19012},[36,81428,64069],{"class":62},[36,81430,2158],{"class":42},[36,81432,64166],{"class":62},[36,81434,3711],{"class":42},[36,81436,81437,81439,81441,81443],{"class":38,"line":19035},[36,81438,59764],{"class":62},[36,81440,2158],{"class":42},[36,81442,81245],{"class":62},[36,81444,3711],{"class":42},[36,81446,81447,81449,81451,81453],{"class":38,"line":19049},[36,81448,66317],{"class":62},[36,81450,2158],{"class":42},[36,81452,57085],{"class":62},[36,81454,3711],{"class":42},[36,81456,81457,81459,81461,81463,81465],{"class":38,"line":19069},[36,81458,64098],{"class":62},[36,81460,2158],{"class":42},[36,81462,3254],{"class":62},[36,81464,53840],{"class":46},[36,81466,3711],{"class":42},[36,81468,81469],{"class":38,"line":19075},[36,81470,4580],{"class":42},[36,81472,81473],{"class":38,"line":19086},[36,81474,70],{"emptyLinePlaceholder":69},[36,81476,81477,81479,81481,81483],{"class":38,"line":19109},[36,81478,81341],{"class":79},[36,81480,3815],{"class":53649},[36,81482,64248],{"class":79},[36,81484,2150],{"class":42},[36,81486,81487,81489,81491,81494],{"class":38,"line":19131},[36,81488,57232],{"class":62},[36,81490,2158],{"class":42},[36,81492,81493],{"class":62},"#05943c",[36,81495,3711],{"class":42},[36,81497,81498,81500,81502,81504],{"class":38,"line":19136},[36,81499,59764],{"class":62},[36,81501,2158],{"class":42},[36,81503,63190],{"class":62},[36,81505,3711],{"class":42},[36,81507,81508],{"class":38,"line":19142},[36,81509,4580],{"class":42},[36,81511,81512,81514,81516],{"class":38,"line":19156},[36,81513,54765],{"class":42},[36,81515,2467],{"class":53649},[36,81517,53656],{"class":42},[36,81519,81520,81522,81524],{"class":38,"line":19169},[36,81521,54133],{"class":42},[36,81523,53683],{"class":53649},[36,81525,53656],{"class":42},[36,81527,81528],{"class":38,"line":19174},[36,81529,70],{"emptyLinePlaceholder":69},[36,81531,81532,81534,81536],{"class":38,"line":19188},[36,81533,3463],{"class":42},[36,81535,54148],{"class":53649},[36,81537,53656],{"class":42},[36,81539,81540,81542,81544,81546,81548,81551],{"class":38,"line":19193},[36,81541,54492],{"class":42},[36,81543,53959],{"class":53649},[36,81545,55834],{"class":79},[36,81547,47],{"class":42},[36,81549,81550],{"class":50},"\"filter\"",[36,81552,53656],{"class":42},[36,81554,81555,81557,81559,81561,81563,81565,81568,81570,81572,81575,81577],{"class":38,"line":19199},[36,81556,53690],{"class":42},[36,81558,2796],{"class":53649},[36,81560,63405],{"class":79},[36,81562,47],{"class":42},[36,81564,63410],{"class":50},[36,81566,81567],{"class":79}," data-index",[36,81569,47],{"class":42},[36,81571,6063],{"class":50},[36,81573,81574],{"class":42},">0-100元\u003C\u002F",[36,81576,2796],{"class":53649},[36,81578,53656],{"class":42},[36,81580,81581,81583,81585,81587,81589,81591,81593,81595,81597,81600,81602],{"class":38,"line":19204},[36,81582,53690],{"class":42},[36,81584,2796],{"class":53649},[36,81586,63405],{"class":79},[36,81588,47],{"class":42},[36,81590,63410],{"class":50},[36,81592,81567],{"class":79},[36,81594,47],{"class":42},[36,81596,6086],{"class":50},[36,81598,81599],{"class":42},">100-300元\u003C\u002F",[36,81601,2796],{"class":53649},[36,81603,53656],{"class":42},[36,81605,81606,81608,81610,81612,81614,81616,81618,81620,81622,81625,81627],{"class":38,"line":19218},[36,81607,53690],{"class":42},[36,81609,2796],{"class":53649},[36,81611,63405],{"class":79},[36,81613,47],{"class":42},[36,81615,63410],{"class":50},[36,81617,81567],{"class":79},[36,81619,47],{"class":42},[36,81621,6099],{"class":50},[36,81623,81624],{"class":42},">300元以上\u003C\u002F",[36,81626,2796],{"class":53649},[36,81628,53656],{"class":42},[36,81630,81631,81633,81635,81637,81639,81641,81644,81646],{"class":38,"line":19223},[36,81632,53690],{"class":42},[36,81634,2796],{"class":53649},[36,81636,63405],{"class":79},[36,81638,47],{"class":42},[36,81640,63410],{"class":50},[36,81642,81643],{"class":42},">全部区间\u003C\u002F",[36,81645,2796],{"class":53649},[36,81647,53656],{"class":42},[36,81649,81650,81652,81654],{"class":38,"line":19228},[36,81651,54765],{"class":42},[36,81653,53959],{"class":53649},[36,81655,53656],{"class":42},[36,81657,81658,81660,81662,81664,81666,81668],{"class":38,"line":19242},[36,81659,54492],{"class":42},[36,81661,53959],{"class":53649},[36,81663,55834],{"class":79},[36,81665,47],{"class":42},[36,81667,64956],{"class":50},[36,81669,53656],{"class":42},[36,81671,81672],{"class":38,"line":19254},[36,81673,81674],{"class":2621},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,81676,81677],{"class":38,"line":19259},[36,81678,81679],{"class":2621},"      \u003Cimg src=\"\" alt=\"\">\n",[36,81681,81682],{"class":38,"line":19272},[36,81683,81684],{"class":2621},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,81686,81687],{"class":38,"line":19277},[36,81688,81689],{"class":2621},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,81691,81692],{"class":38,"line":19282},[36,81693,81694],{"class":2621},"    \u003C\u002Fdiv> -->\n",[36,81696,81697,81699,81701],{"class":38,"line":19287},[36,81698,54765],{"class":42},[36,81700,53959],{"class":53649},[36,81702,53656],{"class":42},[36,81704,81705,81707,81709],{"class":38,"line":19300},[36,81706,54492],{"class":42},[36,81708,54161],{"class":53649},[36,81710,53656],{"class":42},[36,81712,81713],{"class":38,"line":19305},[36,81714,81715],{"class":2621},"    \u002F\u002F 2. 初始化数据\n",[36,81717,81718,81720,81723,81725],{"class":38,"line":34985},[36,81719,13599],{"class":46},[36,81721,81722],{"class":62}," goodsList",[36,81724,15941],{"class":46},[36,81726,57795],{"class":42},[36,81728,81729],{"class":38,"line":34991},[36,81730,81731],{"class":42},"      {\n",[36,81733,81734,81737,81740],{"class":38,"line":34997},[36,81735,81736],{"class":42},"        id: ",[36,81738,81739],{"class":50},"'4001172'",[36,81741,33820],{"class":42},[36,81743,81744,81747,81750],{"class":38,"line":35003},[36,81745,81746],{"class":42},"        name: ",[36,81748,81749],{"class":50},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,81751,33820],{"class":42},[36,81753,81754,81757,81760],{"class":38,"line":35009},[36,81755,81756],{"class":42},"        price: ",[36,81758,81759],{"class":50},"'289.00'",[36,81761,33820],{"class":42},[36,81763,81764,81767,81770],{"class":38,"line":35020},[36,81765,81766],{"class":42},"        picture: ",[36,81768,81769],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,81771,33820],{"class":42},[36,81773,81774],{"class":38,"line":35026},[36,81775,80237],{"class":42},[36,81777,81778],{"class":38,"line":35046},[36,81779,81731],{"class":42},[36,81781,81782,81784,81787],{"class":38,"line":35052},[36,81783,81736],{"class":42},[36,81785,81786],{"class":50},"'4001594'",[36,81788,33820],{"class":42},[36,81790,81791,81793,81796],{"class":38,"line":35063},[36,81792,81746],{"class":42},[36,81794,81795],{"class":50},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,81797,33820],{"class":42},[36,81799,81800,81802,81805],{"class":38,"line":35069},[36,81801,81756],{"class":42},[36,81803,81804],{"class":50},"'288.00'",[36,81806,33820],{"class":42},[36,81808,81809,81811,81814],{"class":38,"line":35075},[36,81810,81766],{"class":42},[36,81812,81813],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,81815,33820],{"class":42},[36,81817,81818],{"class":38,"line":35081},[36,81819,80237],{"class":42},[36,81821,81822],{"class":38,"line":35087},[36,81823,81731],{"class":42},[36,81825,81826,81828,81831],{"class":38,"line":35093},[36,81827,81736],{"class":42},[36,81829,81830],{"class":50},"'4001009'",[36,81832,33820],{"class":42},[36,81834,81835,81837,81840],{"class":38,"line":35099},[36,81836,81746],{"class":42},[36,81838,81839],{"class":50},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,81841,33820],{"class":42},[36,81843,81844,81846,81849],{"class":38,"line":35105},[36,81845,81756],{"class":42},[36,81847,81848],{"class":50},"'109.00'",[36,81850,33820],{"class":42},[36,81852,81853,81855,81858],{"class":38,"line":35125},[36,81854,81766],{"class":42},[36,81856,81857],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,81859,33820],{"class":42},[36,81861,81862],{"class":38,"line":35131},[36,81863,80237],{"class":42},[36,81865,81866],{"class":38,"line":35147},[36,81867,81731],{"class":42},[36,81869,81870,81872,81875],{"class":38,"line":35153},[36,81871,81736],{"class":42},[36,81873,81874],{"class":50},"'4001874'",[36,81876,33820],{"class":42},[36,81878,81879,81881,81884],{"class":38,"line":35167},[36,81880,81746],{"class":42},[36,81882,81883],{"class":50},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,81885,33820],{"class":42},[36,81887,81888,81890,81893],{"class":38,"line":35173},[36,81889,81756],{"class":42},[36,81891,81892],{"class":50},"'488.00'",[36,81894,33820],{"class":42},[36,81896,81897,81899,81902],{"class":38,"line":35188},[36,81898,81766],{"class":42},[36,81900,81901],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,81903,33820],{"class":42},[36,81905,81906],{"class":38,"line":35194},[36,81907,80237],{"class":42},[36,81909,81910],{"class":38,"line":35203},[36,81911,81731],{"class":42},[36,81913,81914,81916,81919],{"class":38,"line":35209},[36,81915,81736],{"class":42},[36,81917,81918],{"class":50},"'4001649'",[36,81920,33820],{"class":42},[36,81922,81923,81925,81928],{"class":38,"line":35218},[36,81924,81746],{"class":42},[36,81926,81927],{"class":50},"'大师监制龙泉青瓷茶叶罐'",[36,81929,33820],{"class":42},[36,81931,81932,81934,81937],{"class":38,"line":35224},[36,81933,81756],{"class":42},[36,81935,81936],{"class":50},"'139.00'",[36,81938,33820],{"class":42},[36,81940,81941,81943,81946],{"class":38,"line":35230},[36,81942,81766],{"class":42},[36,81944,81945],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,81947,33820],{"class":42},[36,81949,81950],{"class":38,"line":35239},[36,81951,80237],{"class":42},[36,81953,81954],{"class":38,"line":35245},[36,81955,81731],{"class":42},[36,81957,81958,81960,81963],{"class":38,"line":35256},[36,81959,81736],{"class":42},[36,81961,81962],{"class":50},"'3997185'",[36,81964,33820],{"class":42},[36,81966,81967,81969,81972],{"class":38,"line":35262},[36,81968,81746],{"class":42},[36,81970,81971],{"class":50},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,81973,33820],{"class":42},[36,81975,81976,81978,81981],{"class":38,"line":35281},[36,81977,81756],{"class":42},[36,81979,81980],{"class":50},"'108.00'",[36,81982,33820],{"class":42},[36,81984,81985,81987,81990],{"class":38,"line":35287},[36,81986,81766],{"class":42},[36,81988,81989],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,81991,33820],{"class":42},[36,81993,81994],{"class":38,"line":35298},[36,81995,80237],{"class":42},[36,81997,81998],{"class":38,"line":35304},[36,81999,81731],{"class":42},[36,82001,82002,82004,82007],{"class":38,"line":35324},[36,82003,81736],{"class":42},[36,82005,82006],{"class":50},"'3997403'",[36,82008,33820],{"class":42},[36,82010,82011,82013,82016],{"class":38,"line":35340},[36,82012,81746],{"class":42},[36,82014,82015],{"class":50},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,82017,33820],{"class":42},[36,82019,82020,82022,82025],{"class":38,"line":35346},[36,82021,81756],{"class":42},[36,82023,82024],{"class":50},"'100.00'",[36,82026,33820],{"class":42},[36,82028,82029,82031,82034],{"class":38,"line":35360},[36,82030,81766],{"class":42},[36,82032,82033],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,82035,33820],{"class":42},[36,82037,82038],{"class":38,"line":35366},[36,82039,80237],{"class":42},[36,82041,82042],{"class":38,"line":35372},[36,82043,81731],{"class":42},[36,82045,82046,82048,82051],{"class":38,"line":35383},[36,82047,81736],{"class":42},[36,82049,82050],{"class":50},"'3998274'",[36,82052,33820],{"class":42},[36,82054,82055,82057,82060],{"class":38,"line":35389},[36,82056,81746],{"class":42},[36,82058,82059],{"class":50},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,82061,33820],{"class":42},[36,82063,82064,82066,82068],{"class":38,"line":35395},[36,82065,81756],{"class":42},[36,82067,81936],{"class":50},[36,82069,33820],{"class":42},[36,82071,82072,82074,82077],{"class":38,"line":35405},[36,82073,81766],{"class":42},[36,82075,82076],{"class":50},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,82078,33820],{"class":42},[36,82080,82081],{"class":38,"line":35411},[36,82082,80237],{"class":42},[36,82084,82085],{"class":38,"line":35422},[36,82086,55457],{"class":42},[36,82088,82089],{"class":38,"line":35428},[36,82090,70],{"emptyLinePlaceholder":69},[36,82092,82093],{"class":38,"line":35438},[36,82094,82095],{"class":2621},"    \u002F\u002F 1.渲染函数\n",[36,82097,82098,82100,82102,82104,82106],{"class":38,"line":35443},[36,82099,72430],{"class":46},[36,82101,72433],{"class":79},[36,82103,92],{"class":42},[36,82105,6264],{"class":7598},[36,82107,14819],{"class":42},[36,82109,82110],{"class":38,"line":35449},[36,82111,82112],{"class":2621},"      \u002F\u002F 声明空字符串\n",[36,82114,82115,82118,82121,82123],{"class":38,"line":35498},[36,82116,82117],{"class":46},"      let",[36,82119,82120],{"class":42}," str ",[36,82122,47],{"class":46},[36,82124,72450],{"class":50},[36,82126,82127],{"class":38,"line":35545},[36,82128,72455],{"class":2621},[36,82130,82131,82133,82136,82138,82141,82144],{"class":38,"line":35550},[36,82132,60355],{"class":42},[36,82134,82135],{"class":79},"forEach",[36,82137,92],{"class":42},[36,82139,82140],{"class":7598},"item",[36,82142,82143],{"class":46}," =>",[36,82145,2150],{"class":42},[36,82147,82148,82150,82153,82155,82157,82160,82162,82165,82168,82170],{"class":38,"line":35556},[36,82149,63618],{"class":46},[36,82151,82152],{"class":42}," { ",[36,82154,104],{"class":62},[36,82156,630],{"class":42},[36,82158,82159],{"class":62},"price",[36,82161,630],{"class":42},[36,82163,82164],{"class":62},"picture",[36,82166,82167],{"class":42}," } ",[36,82169,47],{"class":46},[36,82171,82172],{"class":42}," item\n",[36,82174,82175,82178,82180],{"class":38,"line":35575},[36,82176,82177],{"class":42},"        str ",[36,82179,928],{"class":46},[36,82181,72514],{"class":50},[36,82183,82184],{"class":38,"line":35581},[36,82185,82186],{"class":50},"          \u003Cdiv class=\"item\">\n",[36,82188,82189,82192,82194],{"class":38,"line":35601},[36,82190,82191],{"class":50},"            \u003Cimg src=\"${",[36,82193,82164],{"class":42},[36,82195,82196],{"class":50},"}\" alt=\"\">\n",[36,82198,82199,82202,82204],{"class":38,"line":35607},[36,82200,82201],{"class":50},"            \u003Cp class=\"name\">${",[36,82203,104],{"class":42},[36,82205,82206],{"class":50},"}\u003C\u002Fp>\n",[36,82208,82209,82212,82214],{"class":38,"line":35613},[36,82210,82211],{"class":50},"            \u003Cp class=\"price\">${",[36,82213,82159],{"class":42},[36,82215,82206],{"class":50},[36,82217,82218],{"class":38,"line":35623},[36,82219,82220],{"class":50},"          \u003C\u002Fdiv>\n",[36,82222,82223],{"class":38,"line":35628},[36,82224,82225],{"class":50},"        `\n",[36,82227,82228],{"class":38,"line":35634},[36,82229,67162],{"class":42},[36,82231,82232],{"class":38,"line":35650},[36,82233,82234],{"class":2621},"      \u002F\u002F 追加给List\n",[36,82236,82237,82239,82241,82243,82246,82248,82250],{"class":38,"line":35695},[36,82238,58119],{"class":42},[36,82240,56747],{"class":79},[36,82242,92],{"class":42},[36,82244,82245],{"class":50},"'.list'",[36,82247,76594],{"class":42},[36,82249,47],{"class":46},[36,82251,76330],{"class":42},[36,82253,82254],{"class":38,"line":35701},[36,82255,4580],{"class":42},[36,82257,82258],{"class":38,"line":35707},[36,82259,82260],{"class":2621},"    \u002F\u002F 页面一打开就需要渲染\n",[36,82262,82263,82266],{"class":38,"line":35713},[36,82264,82265],{"class":79},"    render",[36,82267,82268],{"class":42},"(goodsList)\n",[36,82270,82271],{"class":38,"line":35724},[36,82272,82273],{"class":2621},"    \u002F\u002F 2.过滤筛选\n",[36,82275,82276,82278,82280,82282,82285,82287,82289,82291,82293,82295,82297,82299],{"class":38,"line":35730},[36,82277,54755],{"class":42},[36,82279,56747],{"class":79},[36,82281,92],{"class":42},[36,82283,82284],{"class":50},"'.filter'",[36,82286,33183],{"class":42},[36,82288,60161],{"class":79},[36,82290,92],{"class":42},[36,82292,60166],{"class":50},[36,82294,630],{"class":42},[36,82296,2637],{"class":7598},[36,82298,82143],{"class":46},[36,82300,2150],{"class":42},[36,82302,82303],{"class":38,"line":35736},[36,82304,82305],{"class":2621},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,82307,82308,82310,82312,82315,82317,82319,82321,82323],{"class":38,"line":35742},[36,82309,60576],{"class":46},[36,82311,82152],{"class":42},[36,82313,82314],{"class":62},"tagName",[36,82316,630],{"class":42},[36,82318,33891],{"class":62},[36,82320,82167],{"class":42},[36,82322,47],{"class":46},[36,82324,82325],{"class":42}," e.target\n",[36,82327,82328],{"class":38,"line":35760},[36,82329,82330],{"class":2621},"      \u002F\u002F 判断\n",[36,82332,82333,82335,82337,82339,82341],{"class":38,"line":35774},[36,82334,56828],{"class":46},[36,82336,69381],{"class":42},[36,82338,56834],{"class":46},[36,82340,70603],{"class":50},[36,82342,14819],{"class":42},[36,82344,82345],{"class":38,"line":35783},[36,82346,82347],{"class":2621},"        \u002F\u002F console.log(11)\n",[36,82349,82350],{"class":38,"line":35792},[36,82351,82352],{"class":2621},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,82354,82355],{"class":38,"line":35801},[36,82356,82357],{"class":2621},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,82359,82360,82362,82364,82366],{"class":38,"line":35810},[36,82361,54178],{"class":46},[36,82363,54181],{"class":42},[36,82365,47],{"class":46},[36,82367,82368],{"class":42}," goodsList\n",[36,82370,82371,82373,82376,82378,82381],{"class":38,"line":35816},[36,82372,890],{"class":46},[36,82374,82375],{"class":42}," (dataset.index ",[36,82377,56834],{"class":46},[36,82379,82380],{"class":50}," '1'",[36,82382,14819],{"class":42},[36,82384,82385,82388,82390,82393,82396,82398,82400,82402,82405,82407,82409,82412,82414,82416,82418],{"class":38,"line":35822},[36,82386,82387],{"class":42},"          arr ",[36,82389,47],{"class":46},[36,82391,82392],{"class":42}," goodsList.",[36,82394,82395],{"class":79},"filter",[36,82397,92],{"class":42},[36,82399,82140],{"class":7598},[36,82401,82143],{"class":46},[36,82403,82404],{"class":42}," item.price ",[36,82406,2127],{"class":46},[36,82408,899],{"class":62},[36,82410,82411],{"class":46}," &&",[36,82413,82404],{"class":42},[36,82415,896],{"class":46},[36,82417,8136],{"class":62},[36,82419,123],{"class":42},[36,82421,82422,82425,82427,82429,82431,82433,82436],{"class":38,"line":35830},[36,82423,82424],{"class":42},"        } ",[36,82426,4105],{"class":46},[36,82428,4108],{"class":46},[36,82430,82375],{"class":42},[36,82432,56834],{"class":46},[36,82434,82435],{"class":50}," '2'",[36,82437,14819],{"class":42},[36,82439,82440,82442,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464,82466,82469],{"class":38,"line":35835},[36,82441,82387],{"class":42},[36,82443,47],{"class":46},[36,82445,82392],{"class":42},[36,82447,82395],{"class":79},[36,82449,92],{"class":42},[36,82451,82140],{"class":7598},[36,82453,82143],{"class":46},[36,82455,82404],{"class":42},[36,82457,2127],{"class":46},[36,82459,8136],{"class":62},[36,82461,82411],{"class":46},[36,82463,82404],{"class":42},[36,82465,896],{"class":46},[36,82467,82468],{"class":62}," 300",[36,82470,123],{"class":42},[36,82472,82473,82475,82477,82479,82481,82483,82486],{"class":38,"line":35841},[36,82474,82424],{"class":42},[36,82476,4105],{"class":46},[36,82478,4108],{"class":46},[36,82480,82375],{"class":42},[36,82482,56834],{"class":46},[36,82484,82485],{"class":50}," '3'",[36,82487,14819],{"class":42},[36,82489,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510],{"class":38,"line":35852},[36,82491,82387],{"class":42},[36,82493,47],{"class":46},[36,82495,82392],{"class":42},[36,82497,82395],{"class":79},[36,82499,92],{"class":42},[36,82501,82140],{"class":7598},[36,82503,82143],{"class":46},[36,82505,82404],{"class":42},[36,82507,2127],{"class":46},[36,82509,82468],{"class":62},[36,82511,123],{"class":42},[36,82513,82514],{"class":38,"line":35858},[36,82515,2204],{"class":42},[36,82517,82518],{"class":38,"line":35878},[36,82519,82520],{"class":2621},"        \u002F\u002F 渲染函数\n",[36,82522,82523,82525],{"class":38,"line":35884},[36,82524,72753],{"class":79},[36,82526,54760],{"class":42},[36,82528,82529],{"class":38,"line":35890},[36,82530,54746],{"class":42},[36,82532,82533],{"class":38,"line":35896},[36,82534,70],{"emptyLinePlaceholder":69},[36,82536,82537],{"class":38,"line":35913},[36,82538,35813],{"class":42},[36,82540,82541,82543,82545],{"class":38,"line":35919},[36,82542,54765],{"class":42},[36,82544,54161],{"class":53649},[36,82546,53656],{"class":42},[36,82548,82549,82551,82553],{"class":38,"line":35925},[36,82550,54133],{"class":42},[36,82552,54148],{"class":53649},[36,82554,53656],{"class":42},[36,82556,82557],{"class":38,"line":35931},[36,82558,70],{"emptyLinePlaceholder":69},[36,82560,82561,82563,82565],{"class":38,"line":35937},[36,82562,54133],{"class":42},[36,82564,52984],{"class":53649},[36,82566,53656],{"class":42},[14,82568,82570],{"id":82569},"_410-深入了解对象","4.10 深入了解对象",[1752,82572,82574],{"id":82573},"_4101-创建对象","4.10.1 创建对象",[19,82576,82577],{},[3879,82578],{"alt":31,"src":82579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82581,82582],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1752,82584,82586],{"id":82585},"_4102-构造函数","4.10.2 构造函数",[19,82588,82589,82592],{},[667,82590,82591],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82594,82595,82598],{},[667,82596,82597],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,82600,82602],{"className":52982,"code":82601,"language":52984,"meta":31,"style":31},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[33,82603,82604,82612,82617,82638,82650,82661,82673,82677,82682,82709,82714,82741],{"__ignoreMap":31},[36,82605,82606,82608,82610],{"class":38,"line":39},[36,82607,3463],{"class":42},[36,82609,54161],{"class":53649},[36,82611,53656],{"class":42},[36,82613,82614],{"class":38,"line":54},[36,82615,82616],{"class":2621},"\u002F\u002F例：\n",[36,82618,82619,82621,82624,82626,82628,82630,82632,82634,82636],{"class":38,"line":66},[36,82620,56797],{"class":46},[36,82622,82623],{"class":79}," Pig",[36,82625,92],{"class":42},[36,82627,104],{"class":7598},[36,82629,2934],{"class":42},[36,82631,115],{"class":7598},[36,82633,2934],{"class":42},[36,82635,72583],{"class":7598},[36,82637,14819],{"class":42},[36,82639,82640,82643,82645,82647],{"class":38,"line":73},[36,82641,82642],{"class":62},"    this",[36,82644,180],{"class":42},[36,82646,47],{"class":46},[36,82648,82649],{"class":42},"name\n",[36,82651,82652,82654,82656,82658],{"class":38,"line":86},[36,82653,82642],{"class":62},[36,82655,189],{"class":42},[36,82657,47],{"class":46},[36,82659,82660],{"class":42},"age\n",[36,82662,82663,82665,82668,82670],{"class":38,"line":126},[36,82664,82642],{"class":62},[36,82666,82667],{"class":42},".gender",[36,82669,47],{"class":46},[36,82671,82672],{"class":42},"gender    \n",[36,82674,82675],{"class":38,"line":131},[36,82676,3982],{"class":42},[36,82678,82679],{"class":38,"line":225},[36,82680,82681],{"class":2621},"\u002F\u002F创建佩奇对象\n",[36,82683,82684,82686,82689,82691,82693,82695,82698,82700,82702,82704,82707],{"class":38,"line":235},[36,82685,9173],{"class":46},[36,82687,82688],{"class":62}," Peppa",[36,82690,14095],{"class":46},[36,82692,82623],{"class":79},[36,82694,92],{"class":42},[36,82696,82697],{"class":50},"'佩奇'",[36,82699,2934],{"class":42},[36,82701,2900],{"class":62},[36,82703,2934],{"class":42},[36,82705,82706],{"class":50},"'女'",[36,82708,123],{"class":42},[36,82710,82711],{"class":38,"line":377},[36,82712,82713],{"class":2621},"\u002F\u002F创建乔治对象\n",[36,82715,82716,82718,82721,82723,82725,82727,82730,82732,82734,82736,82739],{"class":38,"line":617},[36,82717,9173],{"class":46},[36,82719,82720],{"class":62}," George",[36,82722,14095],{"class":46},[36,82724,82623],{"class":79},[36,82726,92],{"class":42},[36,82728,82729],{"class":50},"'乔治'",[36,82731,2934],{"class":42},[36,82733,2634],{"class":62},[36,82735,2934],{"class":42},[36,82737,82738],{"class":50},"'男'",[36,82740,123],{"class":42},[36,82742,82743,82745,82747],{"class":38,"line":643},[36,82744,54133],{"class":42},[36,82746,54161],{"class":53649},[36,82748,53656],{"class":42},[19,82750,82751],{},[3879,82752],{"alt":31,"src":82753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82755,82756],{},[3879,82757],{"alt":31,"src":82758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82760,82761],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82763,82764],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82766,82767],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82769,82770],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82772,82773],{},"这里用等号是因为：对象.属性=值",[19,82775,82776],{},"①利用对象字面量创建对象",[19,82778,82779],{},"const o={",[19,82781,82782],{},"name:'pink'",[19,82784,82785],{},"} ②利用new Object创建对象",[19,82787,82788],{},"const o=new Object({name:'pink'})",[19,82790,82791],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82793,82794],{},"构造函数创建对象的执行过程：",[19,82796,82797],{},[3879,82798],{"alt":31,"src":82799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1752,82801,82803],{"id":82802},"_4103-实例成员","4.10.3 实例成员",[19,82805,82806],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[650,82808,82809,82812,82815],{},[653,82810,82811],{},"实例对象的属性和方法即为实例成员",[653,82813,82814],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[653,82816,82817],{},"构造函数创建的实例对象彼此独立互不影响",[1752,82819,82821],{"id":82820},"_4104-静态成员","4.10.4 静态成员",[19,82823,82824],{},[3879,82825],{"alt":31,"src":82826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82828,82829],{},"静态成员有Date.now() Math.PI Math.random()",[19,82831,82832],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82834,82835],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82837,82838],{},"function Pig(name) n {",[19,82840,82841],{},"this.name=name",[19,82843,107],{},[19,82845,82846],{},"Pig.eyes=2",[19,82848,82849],{},"Pig.sayHai=function () { console.log(this) }",[19,82851,82852],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82854,82855],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82857,13710],{},[650,82859,82860,82863,82866,82869,82872],{},[653,82861,82862],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[653,82864,82865],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[653,82867,82868],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[653,82870,82871],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[653,82873,82874],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82876,82877],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1752,82879,82881],{"id":82880},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82883,82884],{},"内置构造函数包含：",[19,82886,82887],{},[3879,82888],{"alt":31,"src":82889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82891,82892],{},[3879,82893],{"alt":31,"src":82894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82896,82897],{},"这些基本数据类型，js对他们进行了包装",[54161,82899,82900],{},"\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",[24368,82902,82904],{"id":82903},"_41051-object","4.10.5.1 Object",[19,82906,82907],{},"Object 是内置的构造函数，用于创建普通对象",[19,82909,82910],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,82912,82914],{"className":52982,"code":82913,"language":52984,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,82915,82916],{"__ignoreMap":31},[36,82917,82918],{"class":38,"line":39},[36,82919,82913],{"class":42},[19,82921,82922],{},"三个常用的静态方法：",[25280,82924,82926],{"id":82925},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82928,82929],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82931,82932],{},[3879,82933],{"alt":31,"src":82934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82936,82937],{},[3879,82938],{"alt":31,"src":82939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,82941,82943],{"className":55415,"code":82942,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82944,82945,82953,82961,82966,82971,82976,82981,82986,82991,82999],{"__ignoreMap":31},[36,82946,82947,82949,82951],{"class":38,"line":39},[36,82948,3463],{"class":42},[36,82950,54148],{"class":53649},[36,82952,53656],{"class":42},[36,82954,82955,82957,82959],{"class":38,"line":54},[36,82956,54492],{"class":42},[36,82958,54161],{"class":53649},[36,82960,53656],{"class":42},[36,82962,82963],{"class":38,"line":66},[36,82964,82965],{"class":42},"    const o = { name: 'pink', age: 6 }\n",[36,82967,82968],{"class":38,"line":73},[36,82969,82970],{"class":42},"    \u002F\u002F 获得所有属性名\n",[36,82972,82973],{"class":38,"line":86},[36,82974,82975],{"class":42},"    const arr = Object.keys(o)\n",[36,82977,82978],{"class":38,"line":126},[36,82979,82980],{"class":42},"    console.log(arr)\n",[36,82982,82983],{"class":38,"line":131},[36,82984,82985],{"class":42},"    \u002F\u002F 获得所有属性值\n",[36,82987,82988],{"class":38,"line":225},[36,82989,82990],{"class":42},"    console.log(Object.values(o))\n",[36,82992,82993,82995,82997],{"class":38,"line":235},[36,82994,54765],{"class":42},[36,82996,54161],{"class":53649},[36,82998,53656],{"class":42},[36,83000,83001,83003,83005],{"class":38,"line":377},[36,83002,54133],{"class":42},[36,83004,54148],{"class":53649},[36,83006,53656],{"class":42},[25280,83008,83010],{"id":83009},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83012,83013],{},"Object.assign(oo,o)",[19,83015,83016],{},"后的东西添加给前 是追加",[19,83018,83019],{},[3879,83020],{"alt":31,"src":83021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83023,83024],{},[3879,83025],{"alt":31,"src":83026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,83028,83030],{"className":55415,"code":83029,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83031,83032,83040,83048,83052,83056,83060,83064,83068,83072,83077,83082,83087,83092,83097,83105],{"__ignoreMap":31},[36,83033,83034,83036,83038],{"class":38,"line":39},[36,83035,3463],{"class":42},[36,83037,54148],{"class":53649},[36,83039,53656],{"class":42},[36,83041,83042,83044,83046],{"class":38,"line":54},[36,83043,54492],{"class":42},[36,83045,54161],{"class":53649},[36,83047,53656],{"class":42},[36,83049,83050],{"class":38,"line":66},[36,83051,82965],{"class":42},[36,83053,83054],{"class":38,"line":73},[36,83055,82970],{"class":42},[36,83057,83058],{"class":38,"line":86},[36,83059,82975],{"class":42},[36,83061,83062],{"class":38,"line":126},[36,83063,82980],{"class":42},[36,83065,83066],{"class":38,"line":131},[36,83067,82985],{"class":42},[36,83069,83070],{"class":38,"line":225},[36,83071,82990],{"class":42},[36,83073,83074],{"class":38,"line":235},[36,83075,83076],{"class":42},"    const oo = {}\n",[36,83078,83079],{"class":38,"line":377},[36,83080,83081],{"class":42},"    Object.assign(oo, o)\n",[36,83083,83084],{"class":38,"line":617},[36,83085,83086],{"class":42},"    console.log(oo)\n",[36,83088,83089],{"class":38,"line":643},[36,83090,83091],{"class":42},"    Object.assign(o, { gender: '女' })\n",[36,83093,83094],{"class":38,"line":921},[36,83095,83096],{"class":42},"    console.log(o)\n",[36,83098,83099,83101,83103],{"class":38,"line":934},[36,83100,54765],{"class":42},[36,83102,54161],{"class":53649},[36,83104,53656],{"class":42},[36,83106,83107,83109,83111],{"class":38,"line":939},[36,83108,54133],{"class":42},[36,83110,54148],{"class":53649},[36,83112,53656],{"class":42},[19,83114,83115],{},[3879,83116],{"alt":31,"src":83117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24368,83119,83121],{"id":83120},"_41052-array","4.10.5.2 Array",[19,83123,83124],{},"Array 是内置的构造函数，用于创建数组",[19,83126,83127],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,83129,83131],{"className":52982,"code":83130,"language":52984,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,83132,83133,83138],{"__ignoreMap":31},[36,83134,83135],{"class":38,"line":39},[36,83136,83137],{"class":42},"const arr=new Array(3,5)\n",[36,83139,83140],{"class":38,"line":54},[36,83141,83142],{"class":42},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83144,83145],{},"Array的实例方法，这个方法是实例成员",[19,83147,83148],{},[3879,83149],{"alt":31,"src":83150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25280,83152,83154],{"id":83153},"_410521-reduce","4.10.5.2.1 reduce",[19,83156,83157],{},[3879,83158],{"alt":31,"src":83159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,83161,83163],{"className":55415,"code":83162,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83164,83165,83173,83181,83186,83191,83196,83201,83205,83210,83215,83220,83224,83229,83234,83238,83243,83248,83253,83261],{"__ignoreMap":31},[36,83166,83167,83169,83171],{"class":38,"line":39},[36,83168,3463],{"class":42},[36,83170,54148],{"class":53649},[36,83172,53656],{"class":42},[36,83174,83175,83177,83179],{"class":38,"line":54},[36,83176,54492],{"class":42},[36,83178,54161],{"class":53649},[36,83180,53656],{"class":42},[36,83182,83183],{"class":38,"line":66},[36,83184,83185],{"class":42},"    const arr = [1, 5, 8]\n",[36,83187,83188],{"class":38,"line":73},[36,83189,83190],{"class":42},"    \u002F\u002F 1.没有初始值\n",[36,83192,83193],{"class":38,"line":86},[36,83194,83195],{"class":42},"    const total = arr.reduce(function (prev, current) {\n",[36,83197,83198],{"class":38,"line":126},[36,83199,83200],{"class":42},"      return prev + current\n",[36,83202,83203],{"class":38,"line":131},[36,83204,35813],{"class":42},[36,83206,83207],{"class":38,"line":225},[36,83208,83209],{"class":42},"    console.log(total)   \u002F\u002F14\n",[36,83211,83212],{"class":38,"line":235},[36,83213,83214],{"class":42},"    \u002F\u002F 2.有初始值\n",[36,83216,83217],{"class":38,"line":377},[36,83218,83219],{"class":42},"    const total1 = arr.reduce(function (prev, current) {\n",[36,83221,83222],{"class":38,"line":617},[36,83223,83200],{"class":42},[36,83225,83226],{"class":38,"line":643},[36,83227,83228],{"class":42},"    }, 10)\n",[36,83230,83231],{"class":38,"line":921},[36,83232,83233],{"class":42},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,83235,83236],{"class":38,"line":934},[36,83237,70],{"emptyLinePlaceholder":69},[36,83239,83240],{"class":38,"line":939},[36,83241,83242],{"class":42},"    \u002F\u002F 3.箭头函数写法\n",[36,83244,83245],{"class":38,"line":949},[36,83246,83247],{"class":42},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,83249,83250],{"class":38,"line":962},[36,83251,83252],{"class":42},"    console.log(total2)   \u002F\u002F24\n",[36,83254,83255,83257,83259],{"class":38,"line":974},[36,83256,54765],{"class":42},[36,83258,54161],{"class":53649},[36,83260,53656],{"class":42},[36,83262,83263,83265,83267],{"class":38,"line":979},[36,83264,54133],{"class":42},[36,83266,54148],{"class":53649},[36,83268,53656],{"class":42},[19,83270,83271],{},"执行过程：",[650,83273,83274,83277,83280],{},[653,83275,83276],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[653,83278,83279],{},"每一次循环，把返回值给作为下一次循环的上一次值",[653,83281,83282],{},"如果有起始值，则起始值作为上一次值",[26,83284,83286],{"className":55415,"code":83285,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83287,83288,83296,83304,83308,83312,83316,83320,83324,83328,83333,83338,83343,83348,83353,83357,83361,83365,83369,83373,83377,83382,83386,83391,83395,83400,83405,83409,83413,83417,83425],{"__ignoreMap":31},[36,83289,83290,83292,83294],{"class":38,"line":39},[36,83291,3463],{"class":42},[36,83293,54148],{"class":53649},[36,83295,53656],{"class":42},[36,83297,83298,83300,83302],{"class":38,"line":54},[36,83299,54492],{"class":42},[36,83301,54161],{"class":53649},[36,83303,53656],{"class":42},[36,83305,83306],{"class":38,"line":66},[36,83307,83185],{"class":42},[36,83309,83310],{"class":38,"line":73},[36,83311,83190],{"class":42},[36,83313,83314],{"class":38,"line":86},[36,83315,83195],{"class":42},[36,83317,83318],{"class":38,"line":126},[36,83319,83200],{"class":42},[36,83321,83322],{"class":38,"line":131},[36,83323,35813],{"class":42},[36,83325,83326],{"class":38,"line":225},[36,83327,83209],{"class":42},[36,83329,83330],{"class":38,"line":235},[36,83331,83332],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,83334,83335],{"class":38,"line":377},[36,83336,83337],{"class":42},"    \u002F\u002F     1              5                    6\n",[36,83339,83340],{"class":38,"line":617},[36,83341,83342],{"class":42},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,83344,83345],{"class":38,"line":643},[36,83346,83347],{"class":42},"    \u002F\u002F     6              8                    14\n",[36,83349,83350],{"class":38,"line":921},[36,83351,83352],{"class":42},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,83354,83355],{"class":38,"line":934},[36,83356,83214],{"class":42},[36,83358,83359],{"class":38,"line":939},[36,83360,83219],{"class":42},[36,83362,83363],{"class":38,"line":949},[36,83364,83200],{"class":42},[36,83366,83367],{"class":38,"line":962},[36,83368,83228],{"class":42},[36,83370,83371],{"class":38,"line":974},[36,83372,83233],{"class":42},[36,83374,83375],{"class":38,"line":979},[36,83376,83332],{"class":42},[36,83378,83379],{"class":38,"line":994},[36,83380,83381],{"class":42},"    \u002F\u002F     10             1                     11\n",[36,83383,83384],{"class":38,"line":1006},[36,83385,83342],{"class":42},[36,83387,83388],{"class":38,"line":1011},[36,83389,83390],{"class":42},"    \u002F\u002F     11             5                    16\n",[36,83392,83393],{"class":38,"line":1023},[36,83394,83342],{"class":42},[36,83396,83397],{"class":38,"line":1028},[36,83398,83399],{"class":42},"    \u002F\u002F     16             8                    24\n",[36,83401,83402],{"class":38,"line":1033},[36,83403,83404],{"class":42},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,83406,83407],{"class":38,"line":1053},[36,83408,83242],{"class":42},[36,83410,83411],{"class":38,"line":1064},[36,83412,83247],{"class":42},[36,83414,83415],{"class":38,"line":1075},[36,83416,83252],{"class":42},[36,83418,83419,83421,83423],{"class":38,"line":2291},[36,83420,54765],{"class":42},[36,83422,54161],{"class":53649},[36,83424,53656],{"class":42},[36,83426,83427,83429,83431],{"class":38,"line":2329},[36,83428,54133],{"class":42},[36,83430,54148],{"class":53649},[36,83432,53656],{"class":42},[25280,83434,83436],{"id":83435},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83438,83439],{},[3879,83440],{"alt":31,"src":83441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,83443,83445],{"className":55415,"code":83444,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83446,83447,83455,83463,83468,83473,83478,83483,83487,83492,83497,83502,83507,83512,83517,83521,83526,83530,83535,83543],{"__ignoreMap":31},[36,83448,83449,83451,83453],{"class":38,"line":39},[36,83450,3463],{"class":42},[36,83452,54148],{"class":53649},[36,83454,53656],{"class":42},[36,83456,83457,83459,83461],{"class":38,"line":54},[36,83458,54492],{"class":42},[36,83460,54161],{"class":53649},[36,83462,53656],{"class":42},[36,83464,83465],{"class":38,"line":66},[36,83466,83467],{"class":42},"    const arr = [\n",[36,83469,83470],{"class":38,"line":73},[36,83471,83472],{"class":42},"      { name: '张三', salary: 10000 },\n",[36,83474,83475],{"class":38,"line":86},[36,83476,83477],{"class":42},"      { name: '李四', salary: 10000 },\n",[36,83479,83480],{"class":38,"line":126},[36,83481,83482],{"class":42},"      { name: '王五', salary: 10000 }\n",[36,83484,83485],{"class":38,"line":131},[36,83486,55457],{"class":42},[36,83488,83489],{"class":38,"line":225},[36,83490,83491],{"class":42},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,83493,83494],{"class":38,"line":235},[36,83495,83496],{"class":42},"    \u002F\u002F prev是累计值\n",[36,83498,83499],{"class":38,"line":377},[36,83500,83501],{"class":42},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,83503,83504],{"class":38,"line":617},[36,83505,83506],{"class":42},"    console.log(total)\n",[36,83508,83509],{"class":38,"line":643},[36,83510,83511],{"class":42},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,83513,83514],{"class":38,"line":921},[36,83515,83516],{"class":42},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,83518,83519],{"class":38,"line":934},[36,83520,83511],{"class":42},[36,83522,83523],{"class":38,"line":939},[36,83524,83525],{"class":42},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,83527,83528],{"class":38,"line":949},[36,83529,83511],{"class":42},[36,83531,83532],{"class":38,"line":962},[36,83533,83534],{"class":42},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,83536,83537,83539,83541],{"class":38,"line":974},[36,83538,54765],{"class":42},[36,83540,54161],{"class":53649},[36,83542,53656],{"class":42},[36,83544,83545,83547,83549],{"class":38,"line":979},[36,83546,54133],{"class":42},[36,83548,54148],{"class":53649},[36,83550,53656],{"class":42},[25280,83552,83554],{"id":83553},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83556,83557],{},[3879,83558],{"alt":31,"src":83559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83561,83562],{},[3879,83563],{"alt":31,"src":83564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[650,83566,83567],{},[653,83568,83569],{},"find()",[19,83571,83572],{},"循环查找，找到第一个就ok",[19,83574,83575],{},[2796,83576,83579],{"href":83577,"rel":83578},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26235],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,83581,83583],{"className":52982,"code":83582,"language":52984,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,83584,83585,83590,83595],{"__ignoreMap":31},[36,83586,83587],{"class":38,"line":39},[36,83588,83589],{"class":42},"const array1 = [5, 12, 8, 130, 44]\n",[36,83591,83592],{"class":38,"line":54},[36,83593,83594],{"class":42},"const found = array1.find((element) => element > 10)\n",[36,83596,83597],{"class":38,"line":66},[36,83598,83599],{"class":42},"console.log(found)  \u002F\u002F12\n",[19,83601,83602,83604,83605,83610,83611,83614,83615,83617,83618,83623,83624,83626,83627,83629,83630,83632,83633],{},[33,83603,83569],{}," 方法是一个",[2796,83606,83609],{"href":83607,"rel":83608},"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",[26235],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,83612,83613],{},"callbackFn"," 函数，直到 ",[33,83616,83613],{}," 返回一个",[2796,83619,83622],{"href":83620,"rel":83621},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26235],"真值","。然后 ",[33,83625,83569],{}," 返回该元素并停止迭代数组。如果 ",[33,83628,83613],{}," 从未返回真值，则 ",[33,83631,83569],{}," 返回 ",[33,83634,83635],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,83637,83639],{"className":55415,"code":83638,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[33,83640,83641,83649,83657,83662,83667,83672,83676,83681,83686,83690,83695,83700,83704,83708,83713,83718,83722,83726,83731,83736,83741,83746,83751,83755,83760,83765,83770,83775,83779,83784,83792],{"__ignoreMap":31},[36,83642,83643,83645,83647],{"class":38,"line":39},[36,83644,3463],{"class":42},[36,83646,54148],{"class":53649},[36,83648,53656],{"class":42},[36,83650,83651,83653,83655],{"class":38,"line":54},[36,83652,54492],{"class":42},[36,83654,54161],{"class":53649},[36,83656,53656],{"class":42},[36,83658,83659],{"class":38,"line":66},[36,83660,83661],{"class":42},"    const arr = ['red', 'blue', 'green']\n",[36,83663,83664],{"class":38,"line":73},[36,83665,83666],{"class":42},"    const found = arr.find(item => item === 'pink')\n",[36,83668,83669],{"class":38,"line":86},[36,83670,83671],{"class":42},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,83673,83674],{"class":38,"line":126},[36,83675,70],{"emptyLinePlaceholder":69},[36,83677,83678],{"class":38,"line":131},[36,83679,83680],{"class":42},"    \u002F\u002F 使用场景，用于查找数据\n",[36,83682,83683],{"class":38,"line":225},[36,83684,83685],{"class":42},"    const arr1 = [\n",[36,83687,83688],{"class":38,"line":235},[36,83689,81731],{"class":42},[36,83691,83692],{"class":38,"line":377},[36,83693,83694],{"class":42},"        name: '小米',\n",[36,83696,83697],{"class":38,"line":617},[36,83698,83699],{"class":42},"        price: 1999\n",[36,83701,83702],{"class":38,"line":643},[36,83703,80237],{"class":42},[36,83705,83706],{"class":38,"line":921},[36,83707,81731],{"class":42},[36,83709,83710],{"class":38,"line":934},[36,83711,83712],{"class":42},"        name: '华为',\n",[36,83714,83715],{"class":38,"line":939},[36,83716,83717],{"class":42},"        price: 3999\n",[36,83719,83720],{"class":38,"line":949},[36,83721,54746],{"class":42},[36,83723,83724],{"class":38,"line":962},[36,83725,55457],{"class":42},[36,83727,83728],{"class":38,"line":974},[36,83729,83730],{"class":42},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,83732,83733],{"class":38,"line":979},[36,83734,83735],{"class":42},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,83737,83738],{"class":38,"line":994},[36,83739,83740],{"class":42},"    \u002F\u002F   if (item.name === '小米') {\n",[36,83742,83743],{"class":38,"line":1006},[36,83744,83745],{"class":42},"    \u002F\u002F     return item\n",[36,83747,83748],{"class":38,"line":1011},[36,83749,83750],{"class":42},"    \u002F\u002F   }\n",[36,83752,83753],{"class":38,"line":1023},[36,83754,65637],{"class":42},[36,83756,83757],{"class":38,"line":1028},[36,83758,83759],{"class":42},"    \u002F\u002F 另一种写法\n",[36,83761,83762],{"class":38,"line":1033},[36,83763,83764],{"class":42},"    const found1 = arr1.find(item => {\n",[36,83766,83767],{"class":38,"line":1053},[36,83768,83769],{"class":42},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,83771,83772],{"class":38,"line":1064},[36,83773,83774],{"class":42},"      return item.name = '小米'\n",[36,83776,83777],{"class":38,"line":1075},[36,83778,35813],{"class":42},[36,83780,83781],{"class":38,"line":2291},[36,83782,83783],{"class":42},"    console.log(found1)\n",[36,83785,83786,83788,83790],{"class":38,"line":2329},[36,83787,54765],{"class":42},[36,83789,54161],{"class":53649},[36,83791,53656],{"class":42},[36,83793,83794,83796,83798],{"class":38,"line":2334},[36,83795,54133],{"class":42},[36,83797,54148],{"class":53649},[36,83799,53656],{"class":42},[19,83801,83802],{},[3879,83803],{"alt":31,"src":83804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83806,83807],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[650,83809,83810],{"start":54},[653,83811,83812],{},"every()返回的是布尔值",[19,83814,83815],{},[2796,83816,83819],{"href":83817,"rel":83818},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26235],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83821,83822],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83824,83825],{},"some是只有有一个就没问题",[19,83827,83828],{},"every是必须全是才行",[26,83830,83834],{"className":83831,"code":83832,"language":83833,"meta":31,"style":31},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[33,83835,83836,83852,83866,83870,83879],{"__ignoreMap":31},[36,83837,83838,83840,83843,83845,83847,83850],{"class":38,"line":39},[36,83839,56797],{"class":46},[36,83841,83842],{"class":42}," isBigEnough(element, ",[36,83844,76403],{"class":46},[36,83846,630],{"class":42},[36,83848,83849],{"class":46},"array",[36,83851,14819],{"class":42},[36,83853,83854,83857,83860,83862,83864],{"class":38,"line":54},[36,83855,83856],{"class":46},"  return",[36,83858,83859],{"class":42}," element ",[36,83861,2127],{"class":46},[36,83863,4431],{"class":62},[36,83865,3711],{"class":42},[36,83867,83868],{"class":38,"line":66},[36,83869,3982],{"class":42},[36,83871,83872,83875,83877],{"class":38,"line":73},[36,83873,83874],{"class":42},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,83876,35681],{"class":46},[36,83878,56864],{"class":42},[36,83880,83881,83884,83886],{"class":38,"line":86},[36,83882,83883],{"class":42},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,83885,35681],{"class":46},[36,83887,60288],{"class":42},[26,83889,83891],{"className":55415,"code":83890,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83892,83893,83901,83909,83914,83918,83923,83928,83936],{"__ignoreMap":31},[36,83894,83895,83897,83899],{"class":38,"line":39},[36,83896,3463],{"class":42},[36,83898,54148],{"class":53649},[36,83900,53656],{"class":42},[36,83902,83903,83905,83907],{"class":38,"line":54},[36,83904,54492],{"class":42},[36,83906,54161],{"class":53649},[36,83908,53656],{"class":42},[36,83910,83911],{"class":38,"line":66},[36,83912,83913],{"class":42},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,83915,83916],{"class":38,"line":73},[36,83917,80667],{"class":42},[36,83919,83920],{"class":38,"line":86},[36,83921,83922],{"class":42},"    const flag = arr.every(item => item >= 10)\n",[36,83924,83925],{"class":38,"line":126},[36,83926,83927],{"class":42},"    console.log(flag)    \u002F\u002Ftrue\n",[36,83929,83930,83932,83934],{"class":38,"line":131},[36,83931,54765],{"class":42},[36,83933,54161],{"class":53649},[36,83935,53656],{"class":42},[36,83937,83938,83940,83942],{"class":38,"line":225},[36,83939,54133],{"class":42},[36,83941,54148],{"class":53649},[36,83943,53656],{"class":42},[26,83945,83947],{"className":55415,"code":83946,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83948,83949,83957,83965,83969,83974,83979,83984,83992],{"__ignoreMap":31},[36,83950,83951,83953,83955],{"class":38,"line":39},[36,83952,3463],{"class":42},[36,83954,54148],{"class":53649},[36,83956,53656],{"class":42},[36,83958,83959,83961,83963],{"class":38,"line":54},[36,83960,54492],{"class":42},[36,83962,54161],{"class":53649},[36,83964,53656],{"class":42},[36,83966,83967],{"class":38,"line":66},[36,83968,83913],{"class":42},[36,83970,83971],{"class":38,"line":73},[36,83972,83973],{"class":42},"    const arr = [10, 0, 5]\n",[36,83975,83976],{"class":38,"line":86},[36,83977,83978],{"class":42},"    const flag = arr.some(item => item >= 10)\n",[36,83980,83981],{"class":38,"line":126},[36,83982,83983],{"class":42},"    console.log(flag)   \u002F\u002Ftrue\n",[36,83985,83986,83988,83990],{"class":38,"line":131},[36,83987,54765],{"class":42},[36,83989,54161],{"class":53649},[36,83991,53656],{"class":42},[36,83993,83994,83996,83998],{"class":38,"line":225},[36,83995,54133],{"class":42},[36,83997,54148],{"class":53649},[36,83999,53656],{"class":42},[25280,84001,84003],{"id":84002},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84005,84006],{},[3879,84007],{"alt":31,"src":84008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,84010,84012],{"className":52982,"code":84011,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,84013,84014,84024,84038,84042,84050,84064,84084,84096,84104,84111,84123,84135,84147,84159,84169,84179,84183,84191,84199,84203,84211,84223,84231,84253,84258,84263,84296,84304,84312,84316],{"__ignoreMap":31},[36,84015,84016,84018,84020,84022],{"class":38,"line":39},[36,84017,53646],{"class":42},[36,84019,53650],{"class":53649},[36,84021,53653],{"class":79},[36,84023,53656],{"class":42},[36,84025,84026,84028,84030,84032,84034,84036],{"class":38,"line":54},[36,84027,3463],{"class":42},[36,84029,52984],{"class":53649},[36,84031,53665],{"class":79},[36,84033,47],{"class":42},[36,84035,53670],{"class":50},[36,84037,53656],{"class":42},[36,84039,84040],{"class":38,"line":66},[36,84041,70],{"emptyLinePlaceholder":69},[36,84043,84044,84046,84048],{"class":38,"line":73},[36,84045,3463],{"class":42},[36,84047,53683],{"class":53649},[36,84049,53656],{"class":42},[36,84051,84052,84054,84056,84058,84060,84062],{"class":38,"line":86},[36,84053,54492],{"class":42},[36,84055,53693],{"class":53649},[36,84057,53696],{"class":79},[36,84059,47],{"class":42},[36,84061,53701],{"class":50},[36,84063,53656],{"class":42},[36,84065,84066,84068,84070,84072,84074,84076,84078,84080,84082],{"class":38,"line":126},[36,84067,54492],{"class":42},[36,84069,53693],{"class":53649},[36,84071,17295],{"class":79},[36,84073,47],{"class":42},[36,84075,53740],{"class":50},[36,84077,53720],{"class":79},[36,84079,47],{"class":42},[36,84081,53747],{"class":50},[36,84083,53656],{"class":42},[36,84085,84086,84088,84090,84092,84094],{"class":38,"line":131},[36,84087,54492],{"class":42},[36,84089,53756],{"class":53649},[36,84091,53759],{"class":42},[36,84093,53756],{"class":53649},[36,84095,53656],{"class":42},[36,84097,84098,84100,84102],{"class":38,"line":225},[36,84099,54492],{"class":42},[36,84101,2467],{"class":53649},[36,84103,53656],{"class":42},[36,84105,84106,84109],{"class":38,"line":235},[36,84107,84108],{"class":53649},"    div",[36,84110,2150],{"class":42},[36,84112,84113,84115,84117,84119,84121],{"class":38,"line":377},[36,84114,57119],{"class":62},[36,84116,2158],{"class":42},[36,84118,1059],{"class":62},[36,84120,53840],{"class":46},[36,84122,3711],{"class":42},[36,84124,84125,84127,84129,84131,84133],{"class":38,"line":617},[36,84126,57133],{"class":62},[36,84128,2158],{"class":42},[36,84130,2957],{"class":62},[36,84132,53840],{"class":46},[36,84134,3711],{"class":42},[36,84136,84137,84139,84141,84143,84145],{"class":38,"line":643},[36,84138,59707],{"class":62},[36,84140,2158],{"class":42},[36,84142,2957],{"class":62},[36,84144,53840],{"class":46},[36,84146,3711],{"class":42},[36,84148,84149,84151,84153,84155,84157],{"class":38,"line":921},[36,84150,67480],{"class":62},[36,84152,2158],{"class":42},[36,84154,3053],{"class":62},[36,84156,53840],{"class":46},[36,84158,3711],{"class":42},[36,84160,84161,84163,84165,84167],{"class":38,"line":934},[36,84162,59634],{"class":62},[36,84164,2158],{"class":42},[36,84166,53940],{"class":62},[36,84168,3711],{"class":42},[36,84170,84171,84173,84175,84177],{"class":38,"line":939},[36,84172,57232],{"class":62},[36,84174,2158],{"class":42},[36,84176,53993],{"class":62},[36,84178,3711],{"class":42},[36,84180,84181],{"class":38,"line":949},[36,84182,4580],{"class":42},[36,84184,84185,84187,84189],{"class":38,"line":962},[36,84186,54765],{"class":42},[36,84188,2467],{"class":53649},[36,84190,53656],{"class":42},[36,84192,84193,84195,84197],{"class":38,"line":974},[36,84194,54133],{"class":42},[36,84196,53683],{"class":53649},[36,84198,53656],{"class":42},[36,84200,84201],{"class":38,"line":979},[36,84202,70],{"emptyLinePlaceholder":69},[36,84204,84205,84207,84209],{"class":38,"line":994},[36,84206,3463],{"class":42},[36,84208,54148],{"class":53649},[36,84210,53656],{"class":42},[36,84212,84213,84215,84217,84219,84221],{"class":38,"line":1006},[36,84214,54492],{"class":42},[36,84216,53959],{"class":53649},[36,84218,57662],{"class":42},[36,84220,53959],{"class":53649},[36,84222,53656],{"class":42},[36,84224,84225,84227,84229],{"class":38,"line":1011},[36,84226,54492],{"class":42},[36,84228,54161],{"class":53649},[36,84230,53656],{"class":42},[36,84232,84233,84235,84238,84240,84243,84246,84248,84251],{"class":38,"line":1023},[36,84234,13599],{"class":46},[36,84236,84237],{"class":62}," spec",[36,84239,15941],{"class":46},[36,84241,84242],{"class":42}," { size: ",[36,84244,84245],{"class":50},"'40cm*40cm'",[36,84247,57812],{"class":42},[36,84249,84250],{"class":50},"'黑色'",[36,84252,57952],{"class":42},[36,84254,84255],{"class":38,"line":1028},[36,84256,84257],{"class":2621},"    \u002F\u002F const arr = Object.values(spec)\n",[36,84259,84260],{"class":38,"line":1033},[36,84261,84262],{"class":2621},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,84264,84265,84267,84269,84271,84274,84276,84278,84281,84284,84287,84289,84291,84294],{"class":38,"line":1053},[36,84266,54755],{"class":42},[36,84268,56747],{"class":79},[36,84270,92],{"class":42},[36,84272,84273],{"class":50},"'div'",[36,84275,76594],{"class":42},[36,84277,47],{"class":46},[36,84279,84280],{"class":42}," Object.",[36,84282,84283],{"class":79},"values",[36,84285,84286],{"class":42},"(spec).",[36,84288,76568],{"class":79},[36,84290,92],{"class":42},[36,84292,84293],{"class":50},"'\u002F'",[36,84295,123],{"class":42},[36,84297,84298,84300,84302],{"class":38,"line":1064},[36,84299,54765],{"class":42},[36,84301,54161],{"class":53649},[36,84303,53656],{"class":42},[36,84305,84306,84308,84310],{"class":38,"line":1075},[36,84307,54133],{"class":42},[36,84309,54148],{"class":53649},[36,84311,53656],{"class":42},[36,84313,84314],{"class":38,"line":2291},[36,84315,70],{"emptyLinePlaceholder":69},[36,84317,84318,84320,84322],{"class":38,"line":2329},[36,84319,54133],{"class":42},[36,84321,52984],{"class":53649},[36,84323,53656],{"class":42},[19,84325,84326],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25280,84328,84330],{"id":84329},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84332,84333],{},"静态方法，将伪数组转换为真数组",[19,84335,84336],{},[3879,84337],{"alt":31,"src":84338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,84340,84342],{"className":55415,"code":84341,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,84343,84344,84352,84360,84372,84384,84396,84404,84412,84417,84422,84427,84432,84440],{"__ignoreMap":31},[36,84345,84346,84348,84350],{"class":38,"line":39},[36,84347,3463],{"class":42},[36,84349,54148],{"class":53649},[36,84351,53656],{"class":42},[36,84353,84354,84356,84358],{"class":38,"line":54},[36,84355,54492],{"class":42},[36,84357,3557],{"class":53649},[36,84359,53656],{"class":42},[36,84361,84362,84364,84366,84368,84370],{"class":38,"line":66},[36,84363,53690],{"class":42},[36,84365,653],{"class":53649},[36,84367,57662],{"class":42},[36,84369,653],{"class":53649},[36,84371,53656],{"class":42},[36,84373,84374,84376,84378,84380,84382],{"class":38,"line":73},[36,84375,53690],{"class":42},[36,84377,653],{"class":53649},[36,84379,57662],{"class":42},[36,84381,653],{"class":53649},[36,84383,53656],{"class":42},[36,84385,84386,84388,84390,84392,84394],{"class":38,"line":86},[36,84387,53690],{"class":42},[36,84389,653],{"class":53649},[36,84391,57662],{"class":42},[36,84393,653],{"class":53649},[36,84395,53656],{"class":42},[36,84397,84398,84400,84402],{"class":38,"line":126},[36,84399,54765],{"class":42},[36,84401,3557],{"class":53649},[36,84403,53656],{"class":42},[36,84405,84406,84408,84410],{"class":38,"line":131},[36,84407,54492],{"class":42},[36,84409,54161],{"class":53649},[36,84411,53656],{"class":42},[36,84413,84414],{"class":38,"line":225},[36,84415,84416],{"class":42},"    const lis = document.querySelectorAll('li')\n",[36,84418,84419],{"class":38,"line":235},[36,84420,84421],{"class":42},"    const liss = Array.from(lis)\n",[36,84423,84424],{"class":38,"line":377},[36,84425,84426],{"class":42},"    liss.pop()\n",[36,84428,84429],{"class":38,"line":617},[36,84430,84431],{"class":42},"    console.log(liss)\n",[36,84433,84434,84436,84438],{"class":38,"line":643},[36,84435,54765],{"class":42},[36,84437,54161],{"class":53649},[36,84439,53656],{"class":42},[36,84441,84442,84444,84446],{"class":38,"line":921},[36,84443,54133],{"class":42},[36,84445,54148],{"class":53649},[36,84447,53656],{"class":42},[19,84449,84450],{},[3879,84451],{"alt":31,"src":84452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24368,84454,84456],{"id":84455},"_41053-string","4.10.5.3 String",[19,84458,84459],{},[3879,84460],{"alt":31,"src":84461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25280,84463,84465],{"id":84464},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,84467,84469],{"className":55415,"code":84468,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,84470,84471,84479,84487,84492,84497,84502,84506,84511,84516,84521,84529],{"__ignoreMap":31},[36,84472,84473,84475,84477],{"class":38,"line":39},[36,84474,3463],{"class":42},[36,84476,54148],{"class":53649},[36,84478,53656],{"class":42},[36,84480,84481,84483,84485],{"class":38,"line":54},[36,84482,54492],{"class":42},[36,84484,54161],{"class":53649},[36,84486,53656],{"class":42},[36,84488,84489],{"class":38,"line":66},[36,84490,84491],{"class":42},"    \u002F\u002F 把字符串转化为数组\n",[36,84493,84494],{"class":38,"line":73},[36,84495,84496],{"class":42},"    const str = 'pink,red'\n",[36,84498,84499],{"class":38,"line":86},[36,84500,84501],{"class":42},"    const arr = str.split(',')\n",[36,84503,84504],{"class":38,"line":126},[36,84505,82980],{"class":42},[36,84507,84508],{"class":38,"line":131},[36,84509,84510],{"class":42},"    const str1 = '2025-8-25'\n",[36,84512,84513],{"class":38,"line":225},[36,84514,84515],{"class":42},"    const arr1 = str1.split('-')\n",[36,84517,84518],{"class":38,"line":235},[36,84519,84520],{"class":42},"    console.log(arr1)\n",[36,84522,84523,84525,84527],{"class":38,"line":377},[36,84524,54765],{"class":42},[36,84526,54161],{"class":53649},[36,84528,53656],{"class":42},[36,84530,84531,84533,84535],{"class":38,"line":617},[36,84532,54133],{"class":42},[36,84534,54148],{"class":53649},[36,84536,53656],{"class":42},[25280,84538,84540],{"id":84539},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84542,7564],{},[19,84544,84545],{},"substring(indexStart)",[19,84547,84548],{},"substring(indexStart, indexEnd)",[3557,84550,84551,84562,84574,84584],{},[653,84552,84553,84554,84557,84558,84561],{},"如果省略了 ",[33,84555,84556],{},"indexEnd","，则 ",[33,84559,84560],{},"substring()"," 提取字符直到字符串的末尾",[653,84563,84564,84565,84568,84569,84557,84571,84573],{},"如果 ",[33,84566,84567],{},"indexStart"," 等于 ",[33,84570,84556],{},[33,84572,84560],{}," 返回一个空字符串",[653,84575,84564,84576,84578,84579,84557,84581,84583],{},[33,84577,84567],{}," 大于 ",[33,84580,84556],{},[33,84582,84560],{}," 的效果就像交换了这两个参数一样",[653,84585,84586],{},"结束的索引号不包含想要截取的部分",[26,84588,84590],{"className":83831,"code":84589,"language":83833,"meta":31,"style":31},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[33,84591,84592,84604,84608,84642,84672,84676,84707,84711,84738,84768,84798,84802,84833],{"__ignoreMap":31},[36,84593,84594,84597,84599,84602],{"class":38,"line":39},[36,84595,84596],{"class":42},"const anyString ",[36,84598,47],{"class":46},[36,84600,84601],{"class":50}," \"Mozilla\"",[36,84603,3711],{"class":42},[36,84605,84606],{"class":38,"line":54},[36,84607,70],{"emptyLinePlaceholder":69},[36,84609,84610,84613,84615,84617,84619,84622,84624,84627,84629,84631,84633,84635,84637,84639],{"class":38,"line":66},[36,84611,84612],{"class":62},"console",[36,84614,3113],{"class":42},[36,84616,60595],{"class":62},[36,84618,92],{"class":42},[36,84620,84621],{"class":62},"anyString",[36,84623,3113],{"class":42},[36,84625,84626],{"class":62},"substring",[36,84628,92],{"class":42},[36,84630,2751],{"class":62},[36,84632,630],{"class":42},[36,84634,1906],{"class":62},[36,84636,77598],{"class":42},[36,84638,35681],{"class":46},[36,84640,84641],{"class":50}," 'M'\n",[36,84643,84644,84646,84648,84650,84652,84654,84656,84658,84660,84662,84664,84666,84668,84670],{"class":38,"line":73},[36,84645,84612],{"class":62},[36,84647,3113],{"class":42},[36,84649,60595],{"class":62},[36,84651,92],{"class":42},[36,84653,84621],{"class":62},[36,84655,3113],{"class":42},[36,84657,84626],{"class":62},[36,84659,92],{"class":42},[36,84661,1906],{"class":62},[36,84663,630],{"class":42},[36,84665,2751],{"class":62},[36,84667,77598],{"class":42},[36,84669,35681],{"class":46},[36,84671,84641],{"class":50},[36,84673,84674],{"class":38,"line":86},[36,84675,70],{"emptyLinePlaceholder":69},[36,84677,84678,84680,84682,84684,84686,84688,84690,84692,84694,84696,84698,84700,84702,84704],{"class":38,"line":126},[36,84679,84612],{"class":62},[36,84681,3113],{"class":42},[36,84683,60595],{"class":62},[36,84685,92],{"class":42},[36,84687,84621],{"class":62},[36,84689,3113],{"class":42},[36,84691,84626],{"class":62},[36,84693,92],{"class":42},[36,84695,2751],{"class":62},[36,84697,630],{"class":42},[36,84699,2900],{"class":62},[36,84701,77598],{"class":42},[36,84703,35681],{"class":46},[36,84705,84706],{"class":50}," 'Mozill'\n",[36,84708,84709],{"class":38,"line":131},[36,84710,70],{"emptyLinePlaceholder":69},[36,84712,84713,84715,84717,84719,84721,84723,84725,84727,84729,84731,84733,84735],{"class":38,"line":225},[36,84714,84612],{"class":62},[36,84716,3113],{"class":42},[36,84718,60595],{"class":62},[36,84720,92],{"class":42},[36,84722,84621],{"class":62},[36,84724,3113],{"class":42},[36,84726,84626],{"class":62},[36,84728,92],{"class":42},[36,84730,2850],{"class":62},[36,84732,77598],{"class":42},[36,84734,35681],{"class":46},[36,84736,84737],{"class":50}," 'lla'\n",[36,84739,84740,84742,84744,84746,84748,84750,84752,84754,84756,84758,84760,84762,84764,84766],{"class":38,"line":235},[36,84741,84612],{"class":62},[36,84743,3113],{"class":42},[36,84745,60595],{"class":62},[36,84747,92],{"class":42},[36,84749,84621],{"class":62},[36,84751,3113],{"class":42},[36,84753,84626],{"class":62},[36,84755,92],{"class":42},[36,84757,2850],{"class":62},[36,84759,630],{"class":42},[36,84761,2925],{"class":62},[36,84763,77654],{"class":42},[36,84765,35681],{"class":46},[36,84767,84737],{"class":50},[36,84769,84770,84772,84774,84776,84778,84780,84782,84784,84786,84788,84790,84792,84794,84796],{"class":38,"line":377},[36,84771,84612],{"class":62},[36,84773,3113],{"class":42},[36,84775,60595],{"class":62},[36,84777,92],{"class":42},[36,84779,84621],{"class":62},[36,84781,3113],{"class":42},[36,84783,84626],{"class":62},[36,84785,92],{"class":42},[36,84787,2925],{"class":62},[36,84789,630],{"class":42},[36,84791,2850],{"class":62},[36,84793,77598],{"class":42},[36,84795,35681],{"class":46},[36,84797,84737],{"class":50},[36,84799,84800],{"class":38,"line":617},[36,84801,70],{"emptyLinePlaceholder":69},[36,84803,84804,84806,84808,84810,84812,84814,84816,84818,84820,84822,84824,84826,84828,84830],{"class":38,"line":643},[36,84805,84612],{"class":62},[36,84807,3113],{"class":42},[36,84809,60595],{"class":62},[36,84811,92],{"class":42},[36,84813,84621],{"class":62},[36,84815,3113],{"class":42},[36,84817,84626],{"class":62},[36,84819,92],{"class":42},[36,84821,2751],{"class":62},[36,84823,630],{"class":42},[36,84825,2925],{"class":62},[36,84827,77598],{"class":42},[36,84829,35681],{"class":46},[36,84831,84832],{"class":50}," 'Mozilla'\n",[36,84834,84835,84837,84839,84841,84843,84845,84847,84849,84851,84853,84855,84857,84859,84861],{"class":38,"line":921},[36,84836,84612],{"class":62},[36,84838,3113],{"class":42},[36,84840,60595],{"class":62},[36,84842,92],{"class":42},[36,84844,84621],{"class":62},[36,84846,3113],{"class":42},[36,84848,84626],{"class":62},[36,84850,92],{"class":42},[36,84852,2751],{"class":62},[36,84854,630],{"class":42},[36,84856,3002],{"class":62},[36,84858,77598],{"class":42},[36,84860,35681],{"class":46},[36,84862,84832],{"class":50},[25280,84864,84866],{"id":84865},"_410533-startswith","4.10.5.3.3 startsWith",[19,84868,84869,84872,84873,84878,84879,84881,84882],{},[33,84870,84871],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[667,84874,84875],{},[33,84876,84877],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,84880,3779],{}," 或 ",[33,84883,68367],{},[26,84885,84887],{"className":79840,"code":84886,"language":79842,"meta":31,"style":31},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[33,84888,84889,84901,84920,84925,84945],{"__ignoreMap":31},[36,84890,84891,84893,84896,84898],{"class":38,"line":39},[36,84892,9173],{"class":46},[36,84894,84895],{"class":42}," str1 ",[36,84897,47],{"class":46},[36,84899,84900],{"class":50}," \"Saturday night plans\"\n",[36,84902,84903,84905,84907,84910,84913,84915,84918],{"class":38,"line":54},[36,84904,79877],{"class":42},[36,84906,60595],{"class":79},[36,84908,84909],{"class":42},"(str1.",[36,84911,84912],{"class":79},"startsWith",[36,84914,92],{"class":42},[36,84916,84917],{"class":50},"\"Sat\"",[36,84919,1914],{"class":42},[36,84921,84922],{"class":38,"line":66},[36,84923,84924],{"class":2621},"\u002F\u002F Expected output: true\n",[36,84926,84927,84929,84931,84933,84935,84937,84939,84941,84943],{"class":38,"line":73},[36,84928,79877],{"class":42},[36,84930,60595],{"class":79},[36,84932,84909],{"class":42},[36,84934,84912],{"class":79},[36,84936,92],{"class":42},[36,84938,84917],{"class":50},[36,84940,630],{"class":42},[36,84942,2634],{"class":62},[36,84944,1914],{"class":42},[36,84946,84947],{"class":38,"line":86},[36,84948,84949],{"class":2621},"\u002F\u002F Expected output: false\n",[26,84951,84953],{"className":52982,"code":84952,"language":52984,"meta":31,"style":31},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[33,84954,84955,84960,84965,84969,84974,84979],{"__ignoreMap":31},[36,84956,84957],{"class":38,"line":39},[36,84958,84959],{"class":42},"startsWith(searchString)\n",[36,84961,84962],{"class":38,"line":54},[36,84963,84964],{"class":42},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,84966,84967],{"class":38,"line":66},[36,84968,70],{"emptyLinePlaceholder":69},[36,84970,84971],{"class":38,"line":73},[36,84972,84973],{"class":42},"const str3 = 'pink老师上课中'\n",[36,84975,84976],{"class":38,"line":86},[36,84977,84978],{"class":42},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,84980,84981],{"class":38,"line":126},[36,84982,84983],{"class":42},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25280,84985,84987],{"id":84986},"_410534-includes","4.10.5.3.4 includes",[19,84989,84990],{},"includes(searchString) includes(searchString, position)",[650,84992,84993],{},[653,84994,84995],{},"searchString:",[19,84997,84998,84999,85001,85002,85007,85008,85013,85014,23870,85017,85020,85021,85024],{},"一个要在 ",[33,85000,669],{}," 中查找的字符串。",[2796,85003,85006],{"href":85004,"rel":85005},"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",[26235],"不能是正则表达式","。所有非正则表达式的值都会被",[2796,85009,85012],{"href":85010,"rel":85011},"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",[26235],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,85015,85016],{},"undefined",[33,85018,85019],{},"includes()"," 方法会在字符串中搜索 ",[33,85022,85023],{},"\"undefined\"","，这通常不是你想要的",[650,85026,85027],{"start":54},[653,85028,85029,3413],{},[33,85030,85031],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85033,85034,85035,85038,85039],{},"在字符串中开始搜索 ",[33,85036,85037],{},"searchString"," 的位置。默认值为 ",[33,85040,2751],{},[650,85042,85043],{"start":66},[653,85044,85045],{},"返回值：",[19,85047,85048,85049,85051,85052,85056,85057],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,85050,85037],{}," 为空字符串的情况），则返回 ",[667,85053,85054],{},[33,85055,3779],{}," ，否则返回 ",[667,85058,85059],{},[33,85060,68367],{},[650,85062,85063],{"start":73},[653,85064,85065],{},"异常：",[19,85067,84564,85068,16172,85070,85074],{},[33,85069,85037],{},[2796,85071,85073],{"href":85004,"rel":85072},[26235],"是一个正则表达式","，则会抛出",[19,85076,85077],{},"只要是有就是true，不需要非得以谁开头结尾",[26,85079,85081],{"className":79840,"code":85080,"language":79842,"meta":31,"style":31},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[33,85082,85083,85094,85117,85136,85156,85178,85197],{"__ignoreMap":31},[36,85084,85085,85087,85089,85091],{"class":38,"line":39},[36,85086,9173],{"class":46},[36,85088,82120],{"class":42},[36,85090,47],{"class":46},[36,85092,85093],{"class":50}," \"To be, or not to be, that is the question.\"\n",[36,85095,85096,85098,85100,85103,85106,85108,85111,85114],{"class":38,"line":54},[36,85097,79877],{"class":42},[36,85099,60595],{"class":79},[36,85101,85102],{"class":42},"(str.",[36,85104,85105],{"class":79},"includes",[36,85107,92],{"class":42},[36,85109,85110],{"class":50},"\"To be\"",[36,85112,85113],{"class":42},"))",[36,85115,85116],{"class":2621},"  \u002F\u002F true\n",[36,85118,85119,85121,85123,85125,85127,85129,85132,85134],{"class":38,"line":66},[36,85120,79877],{"class":42},[36,85122,60595],{"class":79},[36,85124,85102],{"class":42},[36,85126,85105],{"class":79},[36,85128,92],{"class":42},[36,85130,85131],{"class":50},"\"question\"",[36,85133,85113],{"class":42},[36,85135,85116],{"class":2621},[36,85137,85138,85140,85142,85144,85146,85148,85151,85153],{"class":38,"line":73},[36,85139,79877],{"class":42},[36,85141,60595],{"class":79},[36,85143,85102],{"class":42},[36,85145,85105],{"class":79},[36,85147,92],{"class":42},[36,85149,85150],{"class":50},"\"nonexistent\"",[36,85152,85113],{"class":42},[36,85154,85155],{"class":2621},"  \u002F\u002F false\n",[36,85157,85158,85160,85162,85164,85166,85168,85170,85172,85174,85176],{"class":38,"line":86},[36,85159,79877],{"class":42},[36,85161,60595],{"class":79},[36,85163,85102],{"class":42},[36,85165,85105],{"class":79},[36,85167,92],{"class":42},[36,85169,85110],{"class":50},[36,85171,630],{"class":42},[36,85173,1906],{"class":62},[36,85175,85113],{"class":42},[36,85177,85155],{"class":2621},[36,85179,85180,85182,85184,85186,85188,85190,85193,85195],{"class":38,"line":126},[36,85181,79877],{"class":42},[36,85183,60595],{"class":79},[36,85185,85102],{"class":42},[36,85187,85105],{"class":79},[36,85189,92],{"class":42},[36,85191,85192],{"class":50},"\"TO BE\"",[36,85194,85113],{"class":42},[36,85196,85155],{"class":2621},[36,85198,85199,85201,85203,85205,85207,85209,85211,85213],{"class":38,"line":131},[36,85200,79877],{"class":42},[36,85202,60595],{"class":79},[36,85204,85102],{"class":42},[36,85206,85105],{"class":79},[36,85208,92],{"class":42},[36,85210,10033],{"class":50},[36,85212,85113],{"class":42},[36,85214,85116],{"class":2621},[25280,85216,85218],{"id":85217},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,85220,85222],{"className":55415,"code":85221,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,85223,85224,85232,85240,85245,85250,85255,85260,85265,85273],{"__ignoreMap":31},[36,85225,85226,85228,85230],{"class":38,"line":39},[36,85227,3463],{"class":42},[36,85229,54148],{"class":53649},[36,85231,53656],{"class":42},[36,85233,85234,85236,85238],{"class":38,"line":54},[36,85235,54492],{"class":42},[36,85237,54161],{"class":53649},[36,85239,53656],{"class":42},[36,85241,85242],{"class":38,"line":66},[36,85243,85244],{"class":42},"    const num = 10\n",[36,85246,85247],{"class":38,"line":73},[36,85248,85249],{"class":42},"    \u002F\u002F 强制转换\n",[36,85251,85252],{"class":38,"line":86},[36,85253,85254],{"class":42},"    console.log(String(num))\n",[36,85256,85257],{"class":38,"line":126},[36,85258,85259],{"class":42},"    \u002F\u002F toString()方法转换\n",[36,85261,85262],{"class":38,"line":131},[36,85263,85264],{"class":42},"    console.log(num.toString())\n",[36,85266,85267,85269,85271],{"class":38,"line":225},[36,85268,54765],{"class":42},[36,85270,54161],{"class":53649},[36,85272,53656],{"class":42},[36,85274,85275,85277,85279],{"class":38,"line":235},[36,85276,54133],{"class":42},[36,85278,54148],{"class":53649},[36,85280,53656],{"class":42},[25280,85282,85284],{"id":85283},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85286,85287],{},[3879,85288],{"alt":31,"src":85289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,85291,85293],{"className":52982,"code":85292,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,85294,85295,85305,85319,85323,85331,85345,85365,85377,85385,85389,85397,85409,85417,85429,85434,85439,85444,85491,85507,85515,85523,85527],{"__ignoreMap":31},[36,85296,85297,85299,85301,85303],{"class":38,"line":39},[36,85298,53646],{"class":42},[36,85300,53650],{"class":53649},[36,85302,53653],{"class":79},[36,85304,53656],{"class":42},[36,85306,85307,85309,85311,85313,85315,85317],{"class":38,"line":54},[36,85308,3463],{"class":42},[36,85310,52984],{"class":53649},[36,85312,53665],{"class":79},[36,85314,47],{"class":42},[36,85316,53670],{"class":50},[36,85318,53656],{"class":42},[36,85320,85321],{"class":38,"line":66},[36,85322,70],{"emptyLinePlaceholder":69},[36,85324,85325,85327,85329],{"class":38,"line":73},[36,85326,3463],{"class":42},[36,85328,53683],{"class":53649},[36,85330,53656],{"class":42},[36,85332,85333,85335,85337,85339,85341,85343],{"class":38,"line":86},[36,85334,54492],{"class":42},[36,85336,53693],{"class":53649},[36,85338,53696],{"class":79},[36,85340,47],{"class":42},[36,85342,53701],{"class":50},[36,85344,53656],{"class":42},[36,85346,85347,85349,85351,85353,85355,85357,85359,85361,85363],{"class":38,"line":126},[36,85348,54492],{"class":42},[36,85350,53693],{"class":53649},[36,85352,17295],{"class":79},[36,85354,47],{"class":42},[36,85356,53740],{"class":50},[36,85358,53720],{"class":79},[36,85360,47],{"class":42},[36,85362,53747],{"class":50},[36,85364,53656],{"class":42},[36,85366,85367,85369,85371,85373,85375],{"class":38,"line":131},[36,85368,54492],{"class":42},[36,85370,53756],{"class":53649},[36,85372,53759],{"class":42},[36,85374,53756],{"class":53649},[36,85376,53656],{"class":42},[36,85378,85379,85381,85383],{"class":38,"line":225},[36,85380,54133],{"class":42},[36,85382,53683],{"class":53649},[36,85384,53656],{"class":42},[36,85386,85387],{"class":38,"line":235},[36,85388,70],{"emptyLinePlaceholder":69},[36,85390,85391,85393,85395],{"class":38,"line":377},[36,85392,3463],{"class":42},[36,85394,54148],{"class":53649},[36,85396,53656],{"class":42},[36,85398,85399,85401,85403,85405,85407],{"class":38,"line":617},[36,85400,54492],{"class":42},[36,85402,53959],{"class":53649},[36,85404,57662],{"class":42},[36,85406,53959],{"class":53649},[36,85408,53656],{"class":42},[36,85410,85411,85413,85415],{"class":38,"line":643},[36,85412,54492],{"class":42},[36,85414,54161],{"class":53649},[36,85416,53656],{"class":42},[36,85418,85419,85421,85424,85426],{"class":38,"line":921},[36,85420,13599],{"class":46},[36,85422,85423],{"class":62}," gift",[36,85425,15941],{"class":46},[36,85427,85428],{"class":50}," '50g的茶叶，清洗球'\n",[36,85430,85431],{"class":38,"line":934},[36,85432,85433],{"class":2621},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,85435,85436],{"class":38,"line":939},[36,85437,85438],{"class":2621},"    \u002F\u002F console.log(gift.split(','))\n",[36,85440,85441],{"class":38,"line":949},[36,85442,85443],{"class":2621},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,85445,85446,85448,85450,85452,85455,85458,85460,85463,85465,85467,85469,85471,85473,85476,85478,85481,85483,85485,85487,85489],{"class":38,"line":962},[36,85447,13599],{"class":46},[36,85449,76264],{"class":62},[36,85451,15941],{"class":46},[36,85453,85454],{"class":42}," gift.",[36,85456,85457],{"class":79},"split",[36,85459,92],{"class":42},[36,85461,85462],{"class":50},"'，'",[36,85464,33183],{"class":42},[36,85466,76389],{"class":79},[36,85468,92],{"class":42},[36,85470,82140],{"class":7598},[36,85472,82143],{"class":46},[36,85474,85475],{"class":50}," `\u003Cspan>【赠品】${",[36,85477,82140],{"class":42},[36,85479,85480],{"class":50},"}\u003C\u002Fspan>\u003Cbr>`",[36,85482,33183],{"class":42},[36,85484,76568],{"class":79},[36,85486,92],{"class":42},[36,85488,76573],{"class":50},[36,85490,123],{"class":42},[36,85492,85493,85495,85497,85499,85501,85503,85505],{"class":38,"line":974},[36,85494,54755],{"class":42},[36,85496,56747],{"class":79},[36,85498,92],{"class":42},[36,85500,84273],{"class":50},[36,85502,76594],{"class":42},[36,85504,47],{"class":46},[36,85506,76330],{"class":42},[36,85508,85509,85511,85513],{"class":38,"line":979},[36,85510,54765],{"class":42},[36,85512,54161],{"class":53649},[36,85514,53656],{"class":42},[36,85516,85517,85519,85521],{"class":38,"line":994},[36,85518,54133],{"class":42},[36,85520,54148],{"class":53649},[36,85522,53656],{"class":42},[36,85524,85525],{"class":38,"line":1006},[36,85526,70],{"emptyLinePlaceholder":69},[36,85528,85529,85531,85533],{"class":38,"line":1011},[36,85530,54133],{"class":42},[36,85532,52984],{"class":53649},[36,85534,53656],{"class":42},[24368,85536,85538],{"id":85537},"_41054-number","4.10.5.4 Number",[19,85540,85541],{},[3879,85542],{"alt":31,"src":85543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85545,85546],{},"整数也可以进行toFixed来保留小数",[19,85548,85549],{},"比如：",[19,85551,85552],{},"const price=10",[19,85554,85555],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24368,85557,85559],{"id":85558},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85561,85562],{},[3879,85563],{"alt":31,"src":85564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,85566,85568],{"className":52982,"code":85567,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,85569,85570,85580,85594,85598,85606,85620,85640,85652,85660,85666,85676,85686,85696,85700,85704,85710,85722,85736,85740,85744,85750,85762,85778,85788,85804,85808,85812,85818,85828,85838,85842,85846,85854,85866,85878,85890,85894,85898,85906,85918,85922,85926,85937,85947,85959,85971,85981,85985,85989,85997,86006,86018,86028,86038,86042,86046,86054,86063,86070,86080,86092,86096,86100,86109,86119,86130,86142,86154,86158,86162,86171,86181,86192,86196,86200,86206,86218,86230,86240,86250,86268,86280,86284,86288,86297,86309,86319,86329,86341,86345,86353,86361,86365,86373,86387,86395,86409,86437,86445,86453,86463,86467,86475,86483,86492,86500,86509,86519,86523,86527,86535,86543,86552,86560,86568,86581,86585,86589,86597,86605,86614,86622,86630,86645,86649,86653,86661,86669,86678,86686,86694,86708,86716,86720,86724,86729,86755,86760,86797,86802,86825,86830,86884,86889,86925,86929,86935,86940,86949,86963,86972,86991,87000,87010,87015,87020,87033,87038,87092,87118,87126,87134,87138],{"__ignoreMap":31},[36,85571,85572,85574,85576,85578],{"class":38,"line":39},[36,85573,53646],{"class":42},[36,85575,53650],{"class":53649},[36,85577,53653],{"class":79},[36,85579,53656],{"class":42},[36,85581,85582,85584,85586,85588,85590,85592],{"class":38,"line":54},[36,85583,3463],{"class":42},[36,85585,52984],{"class":53649},[36,85587,53665],{"class":79},[36,85589,47],{"class":42},[36,85591,53670],{"class":50},[36,85593,53656],{"class":42},[36,85595,85596],{"class":38,"line":66},[36,85597,70],{"emptyLinePlaceholder":69},[36,85599,85600,85602,85604],{"class":38,"line":73},[36,85601,3463],{"class":42},[36,85603,53683],{"class":53649},[36,85605,53656],{"class":42},[36,85607,85608,85610,85612,85614,85616,85618],{"class":38,"line":86},[36,85609,54492],{"class":42},[36,85611,53693],{"class":53649},[36,85613,53696],{"class":79},[36,85615,47],{"class":42},[36,85617,53701],{"class":50},[36,85619,53656],{"class":42},[36,85621,85622,85624,85626,85628,85630,85632,85634,85636,85638],{"class":38,"line":126},[36,85623,54492],{"class":42},[36,85625,53693],{"class":53649},[36,85627,17295],{"class":79},[36,85629,47],{"class":42},[36,85631,53740],{"class":50},[36,85633,53720],{"class":79},[36,85635,47],{"class":42},[36,85637,53747],{"class":50},[36,85639,53656],{"class":42},[36,85641,85642,85644,85646,85648,85650],{"class":38,"line":131},[36,85643,54492],{"class":42},[36,85645,53756],{"class":53649},[36,85647,53759],{"class":42},[36,85649,53756],{"class":53649},[36,85651,53656],{"class":42},[36,85653,85654,85656,85658],{"class":38,"line":225},[36,85655,54492],{"class":42},[36,85657,2467],{"class":53649},[36,85659,53656],{"class":42},[36,85661,85662,85664],{"class":38,"line":235},[36,85663,8785],{"class":53649},[36,85665,2150],{"class":42},[36,85667,85668,85670,85672,85674],{"class":38,"line":377},[36,85669,57043],{"class":62},[36,85671,2158],{"class":42},[36,85673,2751],{"class":62},[36,85675,3711],{"class":42},[36,85677,85678,85680,85682,85684],{"class":38,"line":617},[36,85679,57054],{"class":62},[36,85681,2158],{"class":42},[36,85683,2751],{"class":62},[36,85685,3711],{"class":42},[36,85687,85688,85690,85692,85694],{"class":38,"line":643},[36,85689,74941],{"class":62},[36,85691,2158],{"class":42},[36,85693,62853],{"class":62},[36,85695,3711],{"class":42},[36,85697,85698],{"class":38,"line":921},[36,85699,4580],{"class":42},[36,85701,85702],{"class":38,"line":934},[36,85703,70],{"emptyLinePlaceholder":69},[36,85705,85706,85708],{"class":38,"line":939},[36,85707,64471],{"class":79},[36,85709,2150],{"class":42},[36,85711,85712,85714,85716,85718,85720],{"class":38,"line":949},[36,85713,57119],{"class":62},[36,85715,2158],{"class":42},[36,85717,80919],{"class":62},[36,85719,53840],{"class":46},[36,85721,3711],{"class":42},[36,85723,85724,85726,85728,85730,85732,85734],{"class":38,"line":962},[36,85725,57054],{"class":62},[36,85727,2158],{"class":42},[36,85729,1070],{"class":62},[36,85731,53840],{"class":46},[36,85733,53904],{"class":62},[36,85735,3711],{"class":42},[36,85737,85738],{"class":38,"line":974},[36,85739,4580],{"class":42},[36,85741,85742],{"class":38,"line":979},[36,85743,70],{"emptyLinePlaceholder":69},[36,85745,85746,85748],{"class":38,"line":994},[36,85747,80970],{"class":79},[36,85749,2150],{"class":42},[36,85751,85752,85754,85756,85758,85760],{"class":38,"line":1006},[36,85753,57043],{"class":62},[36,85755,2158],{"class":42},[36,85757,3130],{"class":62},[36,85759,53840],{"class":46},[36,85761,3711],{"class":42},[36,85763,85764,85766,85768,85770,85772,85774,85776],{"class":38,"line":1011},[36,85765,64208],{"class":62},[36,85767,2158],{"class":42},[36,85769,30491],{"class":62},[36,85771,81025],{"class":62},[36,85773,81028],{"class":62},[36,85775,3249],{"class":46},[36,85777,3711],{"class":42},[36,85779,85780,85782,85784,85786],{"class":38,"line":1023},[36,85781,57357],{"class":62},[36,85783,2158],{"class":42},[36,85785,53825],{"class":62},[36,85787,3711],{"class":42},[36,85789,85790,85792,85794,85796,85798,85800,85802],{"class":38,"line":1028},[36,85791,64325],{"class":62},[36,85793,2158],{"class":42},[36,85795,1906],{"class":62},[36,85797,53840],{"class":46},[36,85799,53869],{"class":62},[36,85801,64592],{"class":62},[36,85803,3711],{"class":42},[36,85805,85806],{"class":38,"line":1033},[36,85807,4580],{"class":42},[36,85809,85810],{"class":38,"line":1053},[36,85811,70],{"emptyLinePlaceholder":69},[36,85813,85814,85816],{"class":38,"line":1064},[36,85815,81088],{"class":79},[36,85817,2150],{"class":42},[36,85819,85820,85822,85824,85826],{"class":38,"line":1075},[36,85821,64373],{"class":62},[36,85823,2158],{"class":42},[36,85825,64378],{"class":62},[36,85827,3711],{"class":42},[36,85829,85830,85832,85834,85836],{"class":38,"line":2291},[36,85831,57232],{"class":62},[36,85833,2158],{"class":42},[36,85835,64166],{"class":62},[36,85837,3711],{"class":42},[36,85839,85840],{"class":38,"line":2329},[36,85841,4580],{"class":42},[36,85843,85844],{"class":38,"line":2334},[36,85845,70],{"emptyLinePlaceholder":69},[36,85847,85848,85850,85852],{"class":38,"line":2339},[36,85849,80970],{"class":79},[36,85851,57963],{"class":53649},[36,85853,2150],{"class":42},[36,85855,85856,85858,85860,85862,85864],{"class":38,"line":2365},[36,85857,57119],{"class":62},[36,85859,2158],{"class":42},[36,85861,3167],{"class":62},[36,85863,53840],{"class":46},[36,85865,3711],{"class":42},[36,85867,85868,85870,85872,85874,85876],{"class":38,"line":2373},[36,85869,57133],{"class":62},[36,85871,2158],{"class":42},[36,85873,3167],{"class":62},[36,85875,53840],{"class":46},[36,85877,3711],{"class":42},[36,85879,85880,85882,85884,85886,85888],{"class":38,"line":5001},[36,85881,64098],{"class":62},[36,85883,2158],{"class":42},[36,85885,2875],{"class":62},[36,85887,53840],{"class":46},[36,85889,3711],{"class":42},[36,85891,85892],{"class":38,"line":5006},[36,85893,4580],{"class":42},[36,85895,85896],{"class":38,"line":10328},[36,85897,70],{"emptyLinePlaceholder":69},[36,85899,85900,85902,85904],{"class":38,"line":10352},[36,85901,80970],{"class":79},[36,85903,64652],{"class":79},[36,85905,2150],{"class":42},[36,85907,85908,85910,85912,85914,85916],{"class":38,"line":10357},[36,85909,57119],{"class":62},[36,85911,2158],{"class":42},[36,85913,1059],{"class":62},[36,85915,53840],{"class":46},[36,85917,3711],{"class":42},[36,85919,85920],{"class":38,"line":10363},[36,85921,4580],{"class":42},[36,85923,85924],{"class":38,"line":10390},[36,85925,70],{"emptyLinePlaceholder":69},[36,85927,85928,85930,85932,85935],{"class":38,"line":10395},[36,85929,80970],{"class":79},[36,85931,64652],{"class":79},[36,85933,85934],{"class":79}," .tag",[36,85936,2150],{"class":42},[36,85938,85939,85941,85943,85945],{"class":38,"line":10401},[36,85940,57357],{"class":62},[36,85942,2158],{"class":42},[36,85944,63217],{"class":62},[36,85946,3711],{"class":42},[36,85948,85949,85951,85953,85955,85957],{"class":38,"line":10413},[36,85950,57043],{"class":62},[36,85952,2158],{"class":42},[36,85954,1911],{"class":62},[36,85956,53840],{"class":46},[36,85958,3711],{"class":42},[36,85960,85961,85963,85965,85967,85969],{"class":38,"line":10425},[36,85962,57270],{"class":62},[36,85964,2158],{"class":42},[36,85966,3053],{"class":62},[36,85968,53840],{"class":46},[36,85970,3711],{"class":42},[36,85972,85973,85975,85977,85979],{"class":38,"line":10437},[36,85974,59764],{"class":62},[36,85976,2158],{"class":42},[36,85978,64418],{"class":62},[36,85980,3711],{"class":42},[36,85982,85983],{"class":38,"line":12095},[36,85984,4580],{"class":42},[36,85986,85987],{"class":38,"line":12120},[36,85988,70],{"emptyLinePlaceholder":69},[36,85990,85991,85993,85995],{"class":38,"line":12143},[36,85992,80970],{"class":79},[36,85994,81262],{"class":79},[36,85996,33820],{"class":42},[36,85998,85999,86001,86004],{"class":38,"line":12167},[36,86000,80970],{"class":79},[36,86002,86003],{"class":79}," .sub-total",[36,86005,2150],{"class":42},[36,86007,86008,86010,86012,86014,86016],{"class":38,"line":12172},[36,86009,57270],{"class":62},[36,86011,2158],{"class":42},[36,86013,633],{"class":62},[36,86015,53840],{"class":46},[36,86017,3711],{"class":42},[36,86019,86020,86022,86024,86026],{"class":38,"line":12177},[36,86021,59764],{"class":62},[36,86023,2158],{"class":42},[36,86025,81285],{"class":62},[36,86027,3711],{"class":42},[36,86029,86030,86032,86034,86036],{"class":38,"line":12182},[36,86031,64185],{"class":62},[36,86033,2158],{"class":42},[36,86035,1906],{"class":62},[36,86037,3711],{"class":42},[36,86039,86040],{"class":38,"line":12191},[36,86041,4580],{"class":42},[36,86043,86044],{"class":38,"line":12196},[36,86045,70],{"emptyLinePlaceholder":69},[36,86047,86048,86050,86052],{"class":38,"line":12202},[36,86049,80970],{"class":79},[36,86051,81302],{"class":79},[36,86053,33820],{"class":42},[36,86055,86056,86058,86061],{"class":38,"line":12223},[36,86057,80970],{"class":79},[36,86059,86060],{"class":79}," .sub-total::before",[36,86062,33820],{"class":42},[36,86064,86065,86068],{"class":38,"line":12229},[36,86066,86067],{"class":79},"    .amount::before",[36,86069,2150],{"class":42},[36,86071,86072,86074,86076,86078],{"class":38,"line":12243},[36,86073,81309],{"class":62},[36,86075,2158],{"class":42},[36,86077,81314],{"class":50},[36,86079,3711],{"class":42},[36,86081,86082,86084,86086,86088,86090],{"class":38,"line":12249},[36,86083,57270],{"class":62},[36,86085,2158],{"class":42},[36,86087,3053],{"class":62},[36,86089,53840],{"class":46},[36,86091,3711],{"class":42},[36,86093,86094],{"class":38,"line":12276},[36,86095,4580],{"class":42},[36,86097,86098],{"class":38,"line":12285},[36,86099,70],{"emptyLinePlaceholder":69},[36,86101,86102,86104,86107],{"class":38,"line":12291},[36,86103,80970],{"class":79},[36,86105,86106],{"class":79}," .spec",[36,86108,2150],{"class":42},[36,86110,86111,86113,86115,86117],{"class":38,"line":12299},[36,86112,64185],{"class":62},[36,86114,2158],{"class":42},[36,86116,1911],{"class":62},[36,86118,3711],{"class":42},[36,86120,86121,86123,86125,86128],{"class":38,"line":12304},[36,86122,59764],{"class":62},[36,86124,2158],{"class":42},[36,86126,86127],{"class":62},"#888",[36,86129,3711],{"class":42},[36,86131,86132,86134,86136,86138,86140],{"class":38,"line":18977},[36,86133,57270],{"class":62},[36,86135,2158],{"class":42},[36,86137,3104],{"class":62},[36,86139,53840],{"class":46},[36,86141,3711],{"class":42},[36,86143,86144,86146,86148,86150,86152],{"class":38,"line":18983},[36,86145,64348],{"class":62},[36,86147,2158],{"class":42},[36,86149,3254],{"class":62},[36,86151,53840],{"class":46},[36,86153,3711],{"class":42},[36,86155,86156],{"class":38,"line":19006},[36,86157,4580],{"class":42},[36,86159,86160],{"class":38,"line":19012},[36,86161,70],{"emptyLinePlaceholder":69},[36,86163,86164,86166,86169],{"class":38,"line":19035},[36,86165,80970],{"class":79},[36,86167,86168],{"class":79}," .count",[36,86170,2150],{"class":42},[36,86172,86173,86175,86177,86179],{"class":38,"line":19049},[36,86174,64185],{"class":62},[36,86176,2158],{"class":42},[36,86178,1906],{"class":62},[36,86180,3711],{"class":42},[36,86182,86183,86185,86187,86190],{"class":38,"line":19069},[36,86184,59764],{"class":62},[36,86186,2158],{"class":42},[36,86188,86189],{"class":62},"#aaa",[36,86191,3711],{"class":42},[36,86193,86194],{"class":38,"line":19075},[36,86195,4580],{"class":42},[36,86197,86198],{"class":38,"line":19086},[36,86199,70],{"emptyLinePlaceholder":69},[36,86201,86202,86204],{"class":38,"line":19109},[36,86203,74820],{"class":79},[36,86205,2150],{"class":42},[36,86207,86208,86210,86212,86214,86216],{"class":38,"line":19131},[36,86209,57119],{"class":62},[36,86211,2158],{"class":42},[36,86213,80919],{"class":62},[36,86215,53840],{"class":46},[36,86217,3711],{"class":42},[36,86219,86220,86222,86224,86226,86228],{"class":38,"line":19136},[36,86221,57054],{"class":62},[36,86223,2158],{"class":42},[36,86225,2751],{"class":62},[36,86227,53904],{"class":62},[36,86229,3711],{"class":42},[36,86231,86232,86234,86236,86238],{"class":38,"line":19142},[36,86233,57357],{"class":62},[36,86235,2158],{"class":42},[36,86237,53825],{"class":62},[36,86239,3711],{"class":42},[36,86241,86242,86244,86246,86248],{"class":38,"line":19156},[36,86243,57368],{"class":62},[36,86245,2158],{"class":42},[36,86247,53928],{"class":62},[36,86249,3711],{"class":42},[36,86251,86252,86255,86257,86259,86261,86263,86266],{"class":38,"line":19169},[36,86253,86254],{"class":62},"      border-top",[36,86256,2158],{"class":42},[36,86258,1906],{"class":62},[36,86260,53840],{"class":46},[36,86262,53869],{"class":62},[36,86264,86265],{"class":62}," #4e4e4e",[36,86267,3711],{"class":42},[36,86269,86270,86272,86274,86276,86278],{"class":38,"line":19174},[36,86271,57043],{"class":62},[36,86273,2158],{"class":42},[36,86275,3254],{"class":62},[36,86277,53840],{"class":46},[36,86279,3711],{"class":42},[36,86281,86282],{"class":38,"line":19188},[36,86283,4580],{"class":42},[36,86285,86286],{"class":38,"line":19193},[36,86287,70],{"emptyLinePlaceholder":69},[36,86289,86290,86292,86295],{"class":38,"line":19199},[36,86291,74820],{"class":79},[36,86293,86294],{"class":79}," .amount",[36,86296,2150],{"class":42},[36,86298,86299,86301,86303,86305,86307],{"class":38,"line":19204},[36,86300,57270],{"class":62},[36,86302,2158],{"class":42},[36,86304,633],{"class":62},[36,86306,53840],{"class":46},[36,86308,3711],{"class":42},[36,86310,86311,86313,86315,86317],{"class":38,"line":19218},[36,86312,59764],{"class":62},[36,86314,2158],{"class":42},[36,86316,81285],{"class":62},[36,86318,3711],{"class":42},[36,86320,86321,86323,86325,86327],{"class":38,"line":19223},[36,86322,64682],{"class":62},[36,86324,2158],{"class":42},[36,86326,53837],{"class":62},[36,86328,3711],{"class":42},[36,86330,86331,86333,86335,86337,86339],{"class":38,"line":19228},[36,86332,64098],{"class":62},[36,86334,2158],{"class":42},[36,86336,3210],{"class":62},[36,86338,53840],{"class":46},[36,86340,3711],{"class":42},[36,86342,86343],{"class":38,"line":19242},[36,86344,4580],{"class":42},[36,86346,86347,86349,86351],{"class":38,"line":19254},[36,86348,54765],{"class":42},[36,86350,2467],{"class":53649},[36,86352,53656],{"class":42},[36,86354,86355,86357,86359],{"class":38,"line":19259},[36,86356,54133],{"class":42},[36,86358,53683],{"class":53649},[36,86360,53656],{"class":42},[36,86362,86363],{"class":38,"line":19272},[36,86364,70],{"emptyLinePlaceholder":69},[36,86366,86367,86369,86371],{"class":38,"line":19277},[36,86368,3463],{"class":42},[36,86370,54148],{"class":53649},[36,86372,53656],{"class":42},[36,86374,86375,86377,86379,86381,86383,86385],{"class":38,"line":19282},[36,86376,54492],{"class":42},[36,86378,53959],{"class":53649},[36,86380,55834],{"class":79},[36,86382,47],{"class":42},[36,86384,64956],{"class":50},[36,86386,53656],{"class":42},[36,86388,86389,86391,86393],{"class":38,"line":19287},[36,86390,54765],{"class":42},[36,86392,53959],{"class":53649},[36,86394,53656],{"class":42},[36,86396,86397,86399,86401,86403,86405,86407],{"class":38,"line":19300},[36,86398,54492],{"class":42},[36,86400,53959],{"class":53649},[36,86402,55834],{"class":79},[36,86404,47],{"class":42},[36,86406,64928],{"class":50},[36,86408,53656],{"class":42},[36,86410,86411,86413,86415,86418,86420,86422,86424,86427,86429,86431,86433,86435],{"class":38,"line":19305},[36,86412,53690],{"class":42},[36,86414,53959],{"class":53649},[36,86416,86417],{"class":42},">合计：\u003C",[36,86419,36],{"class":53649},[36,86421,55834],{"class":79},[36,86423,47],{"class":42},[36,86425,86426],{"class":50},"\"amount\"",[36,86428,57662],{"class":42},[36,86430,36],{"class":53649},[36,86432,57662],{"class":42},[36,86434,53959],{"class":53649},[36,86436,53656],{"class":42},[36,86438,86439,86441,86443],{"class":38,"line":34985},[36,86440,54765],{"class":42},[36,86442,53959],{"class":53649},[36,86444,53656],{"class":42},[36,86446,86447,86449,86451],{"class":38,"line":34991},[36,86448,54492],{"class":42},[36,86450,54161],{"class":53649},[36,86452,53656],{"class":42},[36,86454,86455,86457,86459,86461],{"class":38,"line":34997},[36,86456,13599],{"class":46},[36,86458,81722],{"class":62},[36,86460,15941],{"class":46},[36,86462,57795],{"class":42},[36,86464,86465],{"class":38,"line":35003},[36,86466,81731],{"class":42},[36,86468,86469,86471,86473],{"class":38,"line":35009},[36,86470,81736],{"class":42},[36,86472,81739],{"class":50},[36,86474,33820],{"class":42},[36,86476,86477,86479,86481],{"class":38,"line":35020},[36,86478,81746],{"class":42},[36,86480,81749],{"class":50},[36,86482,33820],{"class":42},[36,86484,86485,86487,86490],{"class":38,"line":35026},[36,86486,81756],{"class":42},[36,86488,86489],{"class":62},"289.9",[36,86491,33820],{"class":42},[36,86493,86494,86496,86498],{"class":38,"line":35046},[36,86495,81766],{"class":42},[36,86497,81769],{"class":50},[36,86499,33820],{"class":42},[36,86501,86502,86505,86507],{"class":38,"line":35052},[36,86503,86504],{"class":42},"        count: ",[36,86506,1911],{"class":62},[36,86508,33820],{"class":42},[36,86510,86511,86514,86517],{"class":38,"line":35063},[36,86512,86513],{"class":42},"        spec: { color: ",[36,86515,86516],{"class":50},"'白色'",[36,86518,57952],{"class":42},[36,86520,86521],{"class":38,"line":35069},[36,86522,80237],{"class":42},[36,86524,86525],{"class":38,"line":35075},[36,86526,81731],{"class":42},[36,86528,86529,86531,86533],{"class":38,"line":35081},[36,86530,81736],{"class":42},[36,86532,81830],{"class":50},[36,86534,33820],{"class":42},[36,86536,86537,86539,86541],{"class":38,"line":35087},[36,86538,81746],{"class":42},[36,86540,81839],{"class":50},[36,86542,33820],{"class":42},[36,86544,86545,86547,86550],{"class":38,"line":35093},[36,86546,81756],{"class":42},[36,86548,86549],{"class":62},"109.8",[36,86551,33820],{"class":42},[36,86553,86554,86556,86558],{"class":38,"line":35099},[36,86555,81766],{"class":42},[36,86557,81857],{"class":50},[36,86559,33820],{"class":42},[36,86561,86562,86564,86566],{"class":38,"line":35105},[36,86563,86504],{"class":42},[36,86565,2634],{"class":62},[36,86567,33820],{"class":42},[36,86569,86570,86573,86575,86577,86579],{"class":38,"line":35125},[36,86571,86572],{"class":42},"        spec: { size: ",[36,86574,84245],{"class":50},[36,86576,57812],{"class":42},[36,86578,84250],{"class":50},[36,86580,57952],{"class":42},[36,86582,86583],{"class":38,"line":35131},[36,86584,80237],{"class":42},[36,86586,86587],{"class":38,"line":35147},[36,86588,81731],{"class":42},[36,86590,86591,86593,86595],{"class":38,"line":35153},[36,86592,81736],{"class":42},[36,86594,81874],{"class":50},[36,86596,33820],{"class":42},[36,86598,86599,86601,86603],{"class":38,"line":35167},[36,86600,81746],{"class":42},[36,86602,81883],{"class":50},[36,86604,33820],{"class":42},[36,86606,86607,86609,86612],{"class":38,"line":35173},[36,86608,81756],{"class":42},[36,86610,86611],{"class":62},"488",[36,86613,33820],{"class":42},[36,86615,86616,86618,86620],{"class":38,"line":35188},[36,86617,81766],{"class":42},[36,86619,81901],{"class":50},[36,86621,33820],{"class":42},[36,86623,86624,86626,86628],{"class":38,"line":35194},[36,86625,86504],{"class":42},[36,86627,1906],{"class":62},[36,86629,33820],{"class":42},[36,86631,86632,86634,86637,86640,86643],{"class":38,"line":35203},[36,86633,86513],{"class":42},[36,86635,86636],{"class":50},"'青色'",[36,86638,86639],{"class":42},", sum: ",[36,86641,86642],{"class":50},"'一大四小'",[36,86644,57952],{"class":42},[36,86646,86647],{"class":38,"line":35209},[36,86648,80237],{"class":42},[36,86650,86651],{"class":38,"line":35218},[36,86652,81731],{"class":42},[36,86654,86655,86657,86659],{"class":38,"line":35224},[36,86656,81736],{"class":42},[36,86658,81918],{"class":50},[36,86660,33820],{"class":42},[36,86662,86663,86665,86667],{"class":38,"line":35230},[36,86664,81746],{"class":42},[36,86666,81927],{"class":50},[36,86668,33820],{"class":42},[36,86670,86671,86673,86676],{"class":38,"line":35239},[36,86672,81756],{"class":42},[36,86674,86675],{"class":62},"139",[36,86677,33820],{"class":42},[36,86679,86680,86682,86684],{"class":38,"line":35245},[36,86681,81766],{"class":42},[36,86683,81945],{"class":50},[36,86685,33820],{"class":42},[36,86687,86688,86690,86692],{"class":38,"line":35256},[36,86689,86504],{"class":42},[36,86691,1906],{"class":62},[36,86693,33820],{"class":42},[36,86695,86696,86698,86701,86703,86706],{"class":38,"line":35262},[36,86697,86572],{"class":42},[36,86699,86700],{"class":50},"'小号'",[36,86702,57812],{"class":42},[36,86704,86705],{"class":50},"'紫色'",[36,86707,57818],{"class":42},[36,86709,86710,86713],{"class":38,"line":35281},[36,86711,86712],{"class":42},"        gift: ",[36,86714,86715],{"class":50},"'50g茶叶,清洗球'\n",[36,86717,86718],{"class":38,"line":35287},[36,86719,54746],{"class":42},[36,86721,86722],{"class":38,"line":35298},[36,86723,55457],{"class":42},[36,86725,86726],{"class":38,"line":35304},[36,86727,86728],{"class":2621},"    \u002F\u002F  1.根据数据渲染页面\n",[36,86730,86731,86733,86735,86737,86739,86741,86743,86745,86747,86749,86751,86753],{"class":38,"line":35324},[36,86732,54755],{"class":42},[36,86734,56747],{"class":79},[36,86736,92],{"class":42},[36,86738,82245],{"class":50},[36,86740,76594],{"class":42},[36,86742,47],{"class":46},[36,86744,82392],{"class":42},[36,86746,76389],{"class":79},[36,86748,92],{"class":42},[36,86750,82140],{"class":7598},[36,86752,82143],{"class":46},[36,86754,2150],{"class":42},[36,86756,86757],{"class":38,"line":35340},[36,86758,86759],{"class":2621},"      \u002F\u002F 对象解构\n",[36,86761,86762,86764,86766,86768,86770,86772,86774,86777,86779,86781,86783,86786,86788,86791,86793,86795],{"class":38,"line":35346},[36,86763,60576],{"class":46},[36,86765,82152],{"class":42},[36,86767,82164],{"class":62},[36,86769,630],{"class":42},[36,86771,104],{"class":62},[36,86773,630],{"class":42},[36,86775,86776],{"class":62},"count",[36,86778,630],{"class":42},[36,86780,82159],{"class":62},[36,86782,630],{"class":42},[36,86784,86785],{"class":62},"spec",[36,86787,630],{"class":42},[36,86789,86790],{"class":62},"gift",[36,86792,82167],{"class":42},[36,86794,47],{"class":46},[36,86796,82172],{"class":42},[36,86798,86799],{"class":38,"line":35360},[36,86800,86801],{"class":2621},"      \u002F\u002F 规格文字模块处理\n",[36,86803,86804,86806,86809,86811,86813,86815,86817,86819,86821,86823],{"class":38,"line":35366},[36,86805,60576],{"class":46},[36,86807,86808],{"class":62}," text",[36,86810,15941],{"class":46},[36,86812,84280],{"class":42},[36,86814,84283],{"class":79},[36,86816,84286],{"class":42},[36,86818,76568],{"class":79},[36,86820,92],{"class":42},[36,86822,84293],{"class":50},[36,86824,123],{"class":42},[36,86826,86827],{"class":38,"line":35372},[36,86828,86829],{"class":2621},"      \u002F\u002F 处理赠品模块\n",[36,86831,86832,86834,86836,86838,86841,86843,86845,86847,86849,86852,86854,86856,86858,86860,86862,86865,86867,86870,86872,86874,86876,86878,86880,86882],{"class":38,"line":35383},[36,86833,60576],{"class":46},[36,86835,76264],{"class":62},[36,86837,15941],{"class":46},[36,86839,86840],{"class":42}," gift ",[36,86842,3537],{"class":46},[36,86844,85454],{"class":42},[36,86846,85457],{"class":79},[36,86848,92],{"class":42},[36,86850,86851],{"class":50},"','",[36,86853,33183],{"class":42},[36,86855,76389],{"class":79},[36,86857,92],{"class":42},[36,86859,82140],{"class":7598},[36,86861,82143],{"class":46},[36,86863,86864],{"class":50}," `\u003Cspan class=\"tag\">【赠品】${",[36,86866,82140],{"class":42},[36,86868,86869],{"class":50},"}\u003C\u002Fspan>`",[36,86871,33183],{"class":42},[36,86873,76568],{"class":79},[36,86875,92],{"class":42},[36,86877,76573],{"class":50},[36,86879,16091],{"class":42},[36,86881,3413],{"class":46},[36,86883,72450],{"class":50},[36,86885,86886],{"class":38,"line":35389},[36,86887,86888],{"class":2621},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,86890,86891,86893,86896,86898,86901,86903,86905,86907,86910,86912,86914,86916,86919,86921,86923],{"class":38,"line":35395},[36,86892,60576],{"class":46},[36,86894,86895],{"class":62}," subtotal",[36,86897,15941],{"class":46},[36,86899,86900],{"class":42}," ((price ",[36,86902,3011],{"class":46},[36,86904,8136],{"class":62},[36,86906,8899],{"class":46},[36,86908,86909],{"class":42}," count) ",[36,86911,3139],{"class":46},[36,86913,8136],{"class":62},[36,86915,33183],{"class":42},[36,86917,86918],{"class":79},"toFixed",[36,86920,92],{"class":42},[36,86922,1911],{"class":62},[36,86924,123],{"class":42},[36,86926,86927],{"class":38,"line":35405},[36,86928,70],{"emptyLinePlaceholder":69},[36,86930,86931,86933],{"class":38,"line":35411},[36,86932,76327],{"class":46},[36,86934,72514],{"class":50},[36,86936,86937],{"class":38,"line":35422},[36,86938,86939],{"class":50},"        \u003Cdiv class=\"item\">\n",[36,86941,86942,86945,86947],{"class":38,"line":35428},[36,86943,86944],{"class":50},"          \u003Cimg src=\"${",[36,86946,82164],{"class":42},[36,86948,82196],{"class":50},[36,86950,86951,86954,86956,86959,86961],{"class":38,"line":35438},[36,86952,86953],{"class":50},"          \u003Cp class=\"name\">${",[36,86955,104],{"class":42},[36,86957,86958],{"class":50},"}${",[36,86960,669],{"class":42},[36,86962,82206],{"class":50},[36,86964,86965,86968,86970],{"class":38,"line":35443},[36,86966,86967],{"class":50},"          \u003Cp class=\"spec\">${",[36,86969,7570],{"class":42},[36,86971,82206],{"class":50},[36,86973,86974,86977,86979,86981,86983,86985,86987,86989],{"class":38,"line":35449},[36,86975,86976],{"class":50},"          \u003Cp class=\"price\">${",[36,86978,82159],{"class":42},[36,86980,3113],{"class":50},[36,86982,86918],{"class":79},[36,86984,92],{"class":50},[36,86986,1911],{"class":62},[36,86988,2985],{"class":50},[36,86990,82206],{"class":50},[36,86992,86993,86996,86998],{"class":38,"line":35498},[36,86994,86995],{"class":50},"          \u003Cp class=\"count\">x${",[36,86997,86776],{"class":42},[36,86999,82206],{"class":50},[36,87001,87002,87005,87008],{"class":38,"line":35545},[36,87003,87004],{"class":50},"          \u003Cp class=\"sub-total\">${",[36,87006,87007],{"class":42},"subtotal",[36,87009,82206],{"class":50},[36,87011,87012],{"class":38,"line":35550},[36,87013,87014],{"class":50},"        \u003C\u002Fdiv> \n",[36,87016,87017],{"class":38,"line":35556},[36,87018,87019],{"class":50},"             `\n",[36,87021,87022,87025,87027,87029,87031],{"class":38,"line":35575},[36,87023,87024],{"class":42},"    }).",[36,87026,76568],{"class":79},[36,87028,92],{"class":42},[36,87030,76573],{"class":50},[36,87032,123],{"class":42},[36,87034,87035],{"class":38,"line":35581},[36,87036,87037],{"class":2621},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,87039,87040,87042,87044,87046,87048,87051,87053,87056,87058,87060,87062,87065,87068,87070,87073,87075,87077,87079,87082,87084,87086,87088,87090],{"class":38,"line":35601},[36,87041,13599],{"class":46},[36,87043,65132],{"class":62},[36,87045,15941],{"class":46},[36,87047,82392],{"class":42},[36,87049,87050],{"class":79},"reduce",[36,87052,4769],{"class":42},[36,87054,87055],{"class":7598},"prev",[36,87057,630],{"class":42},[36,87059,82140],{"class":7598},[36,87061,16091],{"class":42},[36,87063,87064],{"class":46},"=>",[36,87066,87067],{"class":42}," prev ",[36,87069,1885],{"class":46},[36,87071,87072],{"class":42}," (item.price ",[36,87074,3011],{"class":46},[36,87076,8136],{"class":62},[36,87078,8899],{"class":46},[36,87080,87081],{"class":42}," item.count) ",[36,87083,3139],{"class":46},[36,87085,8136],{"class":62},[36,87087,630],{"class":42},[36,87089,2751],{"class":62},[36,87091,123],{"class":42},[36,87093,87094,87096,87098,87100,87103,87105,87107,87110,87112,87114,87116],{"class":38,"line":35607},[36,87095,54755],{"class":42},[36,87097,56747],{"class":79},[36,87099,92],{"class":42},[36,87101,87102],{"class":50},"'.amount'",[36,87104,76594],{"class":42},[36,87106,47],{"class":46},[36,87108,87109],{"class":42}," total.",[36,87111,86918],{"class":79},[36,87113,92],{"class":42},[36,87115,1911],{"class":62},[36,87117,123],{"class":42},[36,87119,87120,87122,87124],{"class":38,"line":35613},[36,87121,54765],{"class":42},[36,87123,54161],{"class":53649},[36,87125,53656],{"class":42},[36,87127,87128,87130,87132],{"class":38,"line":35623},[36,87129,54133],{"class":42},[36,87131,54148],{"class":53649},[36,87133,53656],{"class":42},[36,87135,87136],{"class":38,"line":35628},[36,87137,70],{"emptyLinePlaceholder":69},[36,87139,87140,87142,87144],{"class":38,"line":35634},[36,87141,54133],{"class":42},[36,87143,52984],{"class":53649},[36,87145,53656],{"class":42},[14,87147,87149],{"id":87148},"_411-编程思想","4.11 编程思想",[1752,87151,87153],{"id":87152},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87155,87156,87159],{},[667,87157,87158],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87161,87162],{},"调用就可以了",[19,87164,87165],{},[3879,87166],{"alt":31,"src":87167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1752,87169,87171],{"id":87170},"_4112-面向对象","4.11.2 面向对象",[19,87173,87174],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87176,87177],{},[3879,87178],{"alt":31,"src":87179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87181,87182],{},"面向对象的特性：",[3557,87184,87185,87188,87191],{},[653,87186,87187],{},"封装性",[653,87189,87190],{},"继承性",[653,87192,87193],{},"多态性",[1752,87195,87197],{"id":87196},"_4113-两者比较","4.11.3 两者比较",[19,87199,87200],{},[3879,87201],{"alt":31,"src":87202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87204,87206],{"id":87205},"_412-构造函数回顾","4.12 构造函数回顾",[19,87208,87209],{},[3879,87210],{"alt":31,"src":87211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87213,87214],{},[3879,87215],{"alt":31,"src":87216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87218,87219],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87221,87222],{},[3879,87223],{"alt":31,"src":87224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87226,87228],{"id":87227},"_413-原型","4.13 原型",[1752,87230,87232],{"id":87231},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87234,87235],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87237,87238],{},[3879,87239],{"alt":31,"src":87240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87242,87243],{},[3879,87244],{"alt":31,"src":87245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87247,87248],{},"原型是构造函数的属性，它也是一个对象",[19,87250,87251],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87253,87254],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,87256,87258],{"className":55415,"code":87257,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87259,87260,87268,87273,87281,87286,87291,87296,87301,87306,87310,87314,87318,87323,87328,87332,87337,87342,87347,87352,87357,87361,87369],{"__ignoreMap":31},[36,87261,87262,87264,87266],{"class":38,"line":39},[36,87263,3463],{"class":42},[36,87265,54148],{"class":53649},[36,87267,53656],{"class":42},[36,87269,87270],{"class":38,"line":54},[36,87271,87272],{"class":2621},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,87274,87275,87277,87279],{"class":38,"line":66},[36,87276,54492],{"class":42},[36,87278,54161],{"class":53649},[36,87280,53656],{"class":42},[36,87282,87283],{"class":38,"line":73},[36,87284,87285],{"class":42},"    function Star(uname, age) {\n",[36,87287,87288],{"class":38,"line":86},[36,87289,87290],{"class":42},"      this.uname = uname,\n",[36,87292,87293],{"class":38,"line":126},[36,87294,87295],{"class":42},"        this.age = age\n",[36,87297,87298],{"class":38,"line":131},[36,87299,87300],{"class":42},"      \u002F\u002F this.sing = function () {\n",[36,87302,87303],{"class":38,"line":225},[36,87304,87305],{"class":42},"      \u002F\u002F   console.log('唱歌')\n",[36,87307,87308],{"class":38,"line":235},[36,87309,70],{"emptyLinePlaceholder":69},[36,87311,87312],{"class":38,"line":377},[36,87313,62385],{"class":42},[36,87315,87316],{"class":38,"line":617},[36,87317,4580],{"class":42},[36,87319,87320],{"class":38,"line":643},[36,87321,87322],{"class":42},"    Star.prototype.sing = function () {\n",[36,87324,87325],{"class":38,"line":921},[36,87326,87327],{"class":42},"      console.log('唱歌')\n",[36,87329,87330],{"class":38,"line":934},[36,87331,4580],{"class":42},[36,87333,87334],{"class":38,"line":939},[36,87335,87336],{"class":42},"    \u002F\u002F console.dir(Star.prototype)\n",[36,87338,87339],{"class":38,"line":949},[36,87340,87341],{"class":42},"    const pink = new Star('pink', 18)\n",[36,87343,87344],{"class":38,"line":962},[36,87345,87346],{"class":42},"    const red = new Star('red', 20)\n",[36,87348,87349],{"class":38,"line":974},[36,87350,87351],{"class":42},"    pink.sing()\n",[36,87353,87354],{"class":38,"line":979},[36,87355,87356],{"class":42},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,87358,87359],{"class":38,"line":994},[36,87360,70],{"emptyLinePlaceholder":69},[36,87362,87363,87365,87367],{"class":38,"line":1006},[36,87364,54765],{"class":42},[36,87366,54161],{"class":53649},[36,87368,53656],{"class":42},[36,87370,87371,87373,87375],{"class":38,"line":1011},[36,87372,54133],{"class":42},[36,87374,54148],{"class":53649},[36,87376,53656],{"class":42},[19,87378,87379],{},[3879,87380],{"alt":31,"src":87381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,87383,87385],{"className":55415,"code":87384,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87386,87387,87395,87403,87408,87413,87418,87423,87427,87432,87437,87442,87446,87451,87455,87459,87464,87468,87476],{"__ignoreMap":31},[36,87388,87389,87391,87393],{"class":38,"line":39},[36,87390,3463],{"class":42},[36,87392,54148],{"class":53649},[36,87394,53656],{"class":42},[36,87396,87397,87399,87401],{"class":38,"line":54},[36,87398,54492],{"class":42},[36,87400,54161],{"class":53649},[36,87402,53656],{"class":42},[36,87404,87405],{"class":38,"line":66},[36,87406,87407],{"class":42},"    let that\n",[36,87409,87410],{"class":38,"line":73},[36,87411,87412],{"class":42},"    function Star(uname) {\n",[36,87414,87415],{"class":38,"line":86},[36,87416,87417],{"class":42},"      this.uname = uname\n",[36,87419,87420],{"class":38,"line":126},[36,87421,87422],{"class":42},"      that = this\n",[36,87424,87425],{"class":38,"line":131},[36,87426,4580],{"class":42},[36,87428,87429],{"class":38,"line":225},[36,87430,87431],{"class":42},"    \u002F\u002F 实例对象是 ldh\n",[36,87433,87434],{"class":38,"line":235},[36,87435,87436],{"class":42},"    const ldh = new Star('刘德华')\n",[36,87438,87439],{"class":38,"line":377},[36,87440,87441],{"class":42},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,87443,87444],{"class":38,"line":617},[36,87445,70],{"emptyLinePlaceholder":69},[36,87447,87448],{"class":38,"line":643},[36,87449,87450],{"class":42},"    Star.sing = function () {\n",[36,87452,87453],{"class":38,"line":921},[36,87454,87327],{"class":42},[36,87456,87457],{"class":38,"line":934},[36,87458,4580],{"class":42},[36,87460,87461],{"class":38,"line":939},[36,87462,87463],{"class":42},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,87465,87466],{"class":38,"line":949},[36,87467,70],{"emptyLinePlaceholder":69},[36,87469,87470,87472,87474],{"class":38,"line":962},[36,87471,54765],{"class":42},[36,87473,54161],{"class":53649},[36,87475,53656],{"class":42},[36,87477,87478,87480,87482],{"class":38,"line":974},[36,87479,54133],{"class":42},[36,87481,54148],{"class":53649},[36,87483,53656],{"class":42},[19,87485,87486],{},"构造函数的this指向的是实例对象；",[19,87488,87489],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1752,87491,87493],{"id":87492},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87495,87496],{},[3879,87497],{"alt":31,"src":87498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,87500,87502],{"className":55415,"code":87501,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87503,87504,87512,87520,87525,87530,87535,87540,87545,87550,87555,87560,87565,87570,87574,87579,87584,87589,87594,87598,87603,87608,87613,87618,87622,87627,87632,87637,87642,87646,87651,87655,87663],{"__ignoreMap":31},[36,87505,87506,87508,87510],{"class":38,"line":39},[36,87507,3463],{"class":42},[36,87509,54148],{"class":53649},[36,87511,53656],{"class":42},[36,87513,87514,87516,87518],{"class":38,"line":54},[36,87515,54492],{"class":42},[36,87517,54161],{"class":53649},[36,87519,53656],{"class":42},[36,87521,87522],{"class":38,"line":66},[36,87523,87524],{"class":42},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,87526,87527],{"class":38,"line":73},[36,87528,87529],{"class":42},"    const arr = [1, 2, 3]\n",[36,87531,87532],{"class":38,"line":86},[36,87533,87534],{"class":42},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,87536,87537],{"class":38,"line":126},[36,87538,87539],{"class":42},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,87541,87542],{"class":38,"line":131},[36,87543,87544],{"class":42},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,87546,87547],{"class":38,"line":225},[36,87548,87549],{"class":42},"    \u002F\u002F ①.最大值\n",[36,87551,87552],{"class":38,"line":235},[36,87553,87554],{"class":42},"    Array.prototype.max = function () {\n",[36,87556,87557],{"class":38,"line":377},[36,87558,87559],{"class":42},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,87561,87562],{"class":38,"line":617},[36,87563,87564],{"class":42},"      return Math.max(...this)\n",[36,87566,87567],{"class":38,"line":643},[36,87568,87569],{"class":42},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,87571,87572],{"class":38,"line":921},[36,87573,4580],{"class":42},[36,87575,87576],{"class":38,"line":934},[36,87577,87578],{"class":42},"    console.log(arr.max())\n",[36,87580,87581],{"class":38,"line":939},[36,87582,87583],{"class":42},"    \u002F\u002F ②最小值\n",[36,87585,87586],{"class":38,"line":949},[36,87587,87588],{"class":42},"    Array.prototype.min = function () {\n",[36,87590,87591],{"class":38,"line":962},[36,87592,87593],{"class":42},"      return Math.min(...this)\n",[36,87595,87596],{"class":38,"line":974},[36,87597,4580],{"class":42},[36,87599,87600],{"class":38,"line":979},[36,87601,87602],{"class":42},"    console.log(arr.min())\n",[36,87604,87605],{"class":38,"line":994},[36,87606,87607],{"class":42},"    \u002F\u002F③求和\n",[36,87609,87610],{"class":38,"line":1006},[36,87611,87612],{"class":42},"    Array.prototype.sum = function () {\n",[36,87614,87615],{"class":38,"line":1011},[36,87616,87617],{"class":42},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,87619,87620],{"class":38,"line":1023},[36,87621,4580],{"class":42},[36,87623,87624],{"class":38,"line":1028},[36,87625,87626],{"class":42},"    console.log(arr.sum())\n",[36,87628,87629],{"class":38,"line":1033},[36,87630,87631],{"class":42},"    \u002F\u002F ③排序\n",[36,87633,87634],{"class":38,"line":1053},[36,87635,87636],{"class":42},"    Array.prototype.rever = function () {\n",[36,87638,87639],{"class":38,"line":1064},[36,87640,87641],{"class":42},"      return this.reverse()\n",[36,87643,87644],{"class":38,"line":1075},[36,87645,4580],{"class":42},[36,87647,87648],{"class":38,"line":2291},[36,87649,87650],{"class":42},"    console.log(arr.rever())\n",[36,87652,87653],{"class":38,"line":2329},[36,87654,70],{"emptyLinePlaceholder":69},[36,87656,87657,87659,87661],{"class":38,"line":2334},[36,87658,54765],{"class":42},[36,87660,54161],{"class":53649},[36,87662,53656],{"class":42},[36,87664,87665,87667,87669],{"class":38,"line":2339},[36,87666,54133],{"class":42},[36,87668,54148],{"class":53649},[36,87670,53656],{"class":42},[19,87672,87673],{},[3879,87674],{"alt":31,"src":87675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1752,87677,87679],{"id":87678},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87681,87682],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87684,87685],{},[3879,87686],{"alt":31,"src":87687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,87689,87691],{"className":55415,"code":87690,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87692,87693,87701,87709,87714,87719,87723,87728,87733,87738,87746],{"__ignoreMap":31},[36,87694,87695,87697,87699],{"class":38,"line":39},[36,87696,3463],{"class":42},[36,87698,54148],{"class":53649},[36,87700,53656],{"class":42},[36,87702,87703,87705,87707],{"class":38,"line":54},[36,87704,54492],{"class":42},[36,87706,54161],{"class":53649},[36,87708,53656],{"class":42},[36,87710,87711],{"class":38,"line":66},[36,87712,87713],{"class":42},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,87715,87716],{"class":38,"line":73},[36,87717,87718],{"class":42},"    function Star() {\n",[36,87720,87721],{"class":38,"line":86},[36,87722,4580],{"class":42},[36,87724,87725],{"class":38,"line":126},[36,87726,87727],{"class":42},"    const ldh = new Star()\n",[36,87729,87730],{"class":38,"line":131},[36,87731,87732],{"class":42},"    console.log(Star.prototype)\n",[36,87734,87735],{"class":38,"line":225},[36,87736,87737],{"class":42},"    console.log(Star.prototype.constructor === Star)\n",[36,87739,87740,87742,87744],{"class":38,"line":235},[36,87741,54765],{"class":42},[36,87743,54161],{"class":53649},[36,87745,53656],{"class":42},[36,87747,87748,87750,87752],{"class":38,"line":377},[36,87749,54133],{"class":42},[36,87751,54148],{"class":53649},[36,87753,53656],{"class":42},[19,87755,87756],{},[3879,87757],{"alt":31,"src":87758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87760,87761],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,87763,87765],{"className":55415,"code":87764,"language":55417,"meta":31,"style":31},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[33,87766,87767,87775,87779,87783,87787,87792,87797,87802,87806,87811,87816,87821,87826,87831,87836,87840,87844,87849,87854,87859,87863,87868,87873,87877,87881,87885],{"__ignoreMap":31},[36,87768,87769,87771,87773],{"class":38,"line":39},[36,87770,54492],{"class":42},[36,87772,54161],{"class":53649},[36,87774,53656],{"class":42},[36,87776,87777],{"class":38,"line":54},[36,87778,87713],{"class":42},[36,87780,87781],{"class":38,"line":66},[36,87782,87718],{"class":42},[36,87784,87785],{"class":38,"line":73},[36,87786,4580],{"class":42},[36,87788,87789],{"class":38,"line":86},[36,87790,87791],{"class":42},"    \u002F\u002F const ldh = new Star()\n",[36,87793,87794],{"class":38,"line":126},[36,87795,87796],{"class":42},"    \u002F\u002F console.log(Star.prototype)\n",[36,87798,87799],{"class":38,"line":131},[36,87800,87801],{"class":42},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,87803,87804],{"class":38,"line":225},[36,87805,70],{"emptyLinePlaceholder":69},[36,87807,87808],{"class":38,"line":235},[36,87809,87810],{"class":42},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,87812,87813],{"class":38,"line":377},[36,87814,87815],{"class":42},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,87817,87818],{"class":38,"line":617},[36,87819,87820],{"class":42},"    \u002F\u002F   console.log('唱歌')\n",[36,87822,87823],{"class":38,"line":643},[36,87824,87825],{"class":42},"    \u002F\u002F }\n",[36,87827,87828],{"class":38,"line":921},[36,87829,87830],{"class":42},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,87832,87833],{"class":38,"line":934},[36,87834,87835],{"class":42},"    \u002F\u002F   console.log('跳舞')\n",[36,87837,87838],{"class":38,"line":939},[36,87839,87825],{"class":42},[36,87841,87842],{"class":38,"line":949},[36,87843,87732],{"class":42},[36,87845,87846],{"class":38,"line":962},[36,87847,87848],{"class":42},"    Star.prototype = {\n",[36,87850,87851],{"class":38,"line":974},[36,87852,87853],{"class":42},"      sing: function () {\n",[36,87855,87856],{"class":38,"line":979},[36,87857,87858],{"class":42},"        console.log('唱歌')\n",[36,87860,87861],{"class":38,"line":994},[36,87862,80237],{"class":42},[36,87864,87865],{"class":38,"line":1006},[36,87866,87867],{"class":42},"      dance: function () {\n",[36,87869,87870],{"class":38,"line":1011},[36,87871,87872],{"class":42},"        console.log('跳舞')\n",[36,87874,87875],{"class":38,"line":1023},[36,87876,54746],{"class":42},[36,87878,87879],{"class":38,"line":1028},[36,87880,4580],{"class":42},[36,87882,87883],{"class":38,"line":1033},[36,87884,87732],{"class":42},[36,87886,87887,87889,87891],{"class":38,"line":1053},[36,87888,54765],{"class":42},[36,87890,54161],{"class":53649},[36,87892,53656],{"class":42},[19,87894,87895],{},"进行输出结果后会发现：",[19,87897,87898],{},[3879,87899],{"alt":31,"src":87900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87902,87903],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87905,87906],{},"所以，要重新指回创造这个原型对象的构造函数",[26,87908,87910],{"className":73558,"code":87909,"language":73560,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,87911,87912,87926,87931,87936,87947,87960,87965,87976,87990,87994],{"__ignoreMap":31},[36,87913,87914,87917,87919,87922,87924],{"class":38,"line":39},[36,87915,87916],{"class":62},"Star",[36,87918,3113],{"class":42},[36,87920,87921],{"class":62},"prototype",[36,87923,15941],{"class":46},[36,87925,2150],{"class":42},[36,87927,87928],{"class":38,"line":54},[36,87929,87930],{"class":2621},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,87932,87933],{"class":38,"line":66},[36,87934,87935],{"class":42},"  constructor: Star,\n",[36,87937,87938,87941,87943,87945],{"class":38,"line":73},[36,87939,87940],{"class":79},"  sing",[36,87942,2158],{"class":42},[36,87944,56797],{"class":46},[36,87946,56800],{"class":42},[36,87948,87949,87951,87953,87955,87958],{"class":38,"line":86},[36,87950,76098],{"class":42},[36,87952,60595],{"class":79},[36,87954,92],{"class":42},[36,87956,87957],{"class":50},"'唱歌'",[36,87959,123],{"class":42},[36,87961,87962],{"class":38,"line":126},[36,87963,87964],{"class":42},"   },\n",[36,87966,87967,87970,87972,87974],{"class":38,"line":131},[36,87968,87969],{"class":79},"   dance",[36,87971,2158],{"class":42},[36,87973,56797],{"class":46},[36,87975,56800],{"class":42},[36,87977,87978,87981,87983,87985,87988],{"class":38,"line":225},[36,87979,87980],{"class":42},"     console.",[36,87982,60595],{"class":79},[36,87984,92],{"class":42},[36,87986,87987],{"class":50},"'跳舞'",[36,87989,123],{"class":42},[36,87991,87992],{"class":38,"line":235},[36,87993,6692],{"class":42},[36,87995,87996],{"class":38,"line":377},[36,87997,3982],{"class":42},[19,87999,88000],{},[3879,88001],{"alt":31,"src":88002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88004,88005],{},"总结1：",[19,88007,88008],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88010,88011],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88013,88014],{},"constructor指的是他的来源",[19,88016,88017],{},[3879,88018],{"alt":31,"src":88019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88021,88022],{},[3879,88023],{"alt":31,"src":88024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88026,88027],{},"总结2：",[19,88029,88030],{},[3879,88031],{"alt":31,"src":88032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88034,88035],{},[3879,88036],{"alt":31,"src":88037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88039,88040],{},[3879,88041],{"alt":31,"src":88042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1752,88044,88046],{"id":88045},"_4134-对象原型","4.13.4 对象原型",[19,88048,88049],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,88051,88052],{},"对象原型就是__proto__这个属性",[19,88054,88055],{},[3879,88056],{"alt":31,"src":88057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,88059,88060],{},[3879,88061],{"alt":31,"src":88062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,88064,88065],{},[3879,88066],{"alt":31,"src":88067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,88069,88070],{},[3879,88071],{"alt":31,"src":88072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,88074,88076],{"className":55415,"code":88075,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,88077,88078,88086,88094,88098,88102,88106,88111,88119],{"__ignoreMap":31},[36,88079,88080,88082,88084],{"class":38,"line":39},[36,88081,3463],{"class":42},[36,88083,54148],{"class":53649},[36,88085,53656],{"class":42},[36,88087,88088,88090,88092],{"class":38,"line":54},[36,88089,54492],{"class":42},[36,88091,54161],{"class":53649},[36,88093,53656],{"class":42},[36,88095,88096],{"class":38,"line":66},[36,88097,87718],{"class":42},[36,88099,88100],{"class":38,"line":73},[36,88101,4580],{"class":42},[36,88103,88104],{"class":38,"line":86},[36,88105,87727],{"class":42},[36,88107,88108],{"class":38,"line":126},[36,88109,88110],{"class":42},"    console.log(ldh)\n",[36,88112,88113,88115,88117],{"class":38,"line":131},[36,88114,54765],{"class":42},[36,88116,54161],{"class":53649},[36,88118,53656],{"class":42},[36,88120,88121,88123,88125],{"class":38,"line":225},[36,88122,54133],{"class":42},[36,88124,54148],{"class":53649},[36,88126,53656],{"class":42},[19,88128,88129],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88131,88132],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88134,88135],{},[3879,88136],{"alt":31,"src":88137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88139,88140],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88142,88143],{},"对象原型指向原型对象",[19,88145,88146],{},[3879,88147],{"alt":31,"src":88148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88150,88151],{},[3879,88152],{"alt":31,"src":88153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88155,88156],{},[3879,88157],{"alt":31,"src":88158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1752,88160,88162],{"id":88161},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88164,88165],{},[3879,88166],{"alt":31,"src":88167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[650,88169,88170,88173,88176,88179],{},[653,88171,88172],{},"构造函数通过new的形式实例化得到实例对象",[653,88174,88175],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[653,88177,88178],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[653,88180,88181],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88183,88184],{},[3879,88185],{"alt":31,"src":88186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88188,88189],{},"题目梳理：",[19,88191,88192],{},[3879,88193],{"alt":31,"src":88194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1752,88196,88198],{"id":88197},"_4136-原型继承","4.13.6 原型继承",[19,88200,88201],{},[3879,88202],{"alt":31,"src":88203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88205,88206],{},[3879,88207],{"alt":31,"src":88208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88210,88211],{},[3879,88212],{"alt":31,"src":88213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88215,88216],{},[3879,88217],{"alt":31,"src":88218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88220,88221],{},[3879,88222],{"alt":31,"src":88223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88225,88226],{},[3879,88227],{"alt":31,"src":88228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88230,88231],{},[3879,88232],{"alt":31,"src":88233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88235,88236],{},[3879,88237],{"alt":31,"src":88238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88240,88241],{},"回顾：构造函数每次new得到对象都是不同的",[1752,88243,88245],{"id":88244},"_4137-原型链","4.13.7 原型链",[19,88247,88248],{},[3879,88249],{"alt":31,"src":88250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88252,88253],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88255,88256],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88258,88259],{},"大哥是Object",[19,88261,88262],{},[3879,88263],{"alt":31,"src":88264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88266,88267],{},[3879,88268],{"alt":31,"src":88269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88271,88272],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88274,88275],{},"万物皆对象",[1752,88277,88279],{"id":88278},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88281,88282],{},"模态框",[19,88284,88285],{},"以后遇见这个效果直接使用这个就行",[19,88287,88288],{},[3879,88289],{"alt":31,"src":88290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88292,88293],{},[3879,88294],{"alt":31,"src":88295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88297,88298],{},[3879,88299],{"alt":31,"src":88300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88302,88303],{},[3879,88304],{"alt":31,"src":88305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88307,88308],{},"补充知识点：",[650,88310,88311],{},[653,88312,88313],{},"append()",[19,88315,88316],{},[3879,88317],{"alt":31,"src":88318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,88320,88322],{"className":52982,"code":88321,"language":52984,"meta":31,"style":31},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[33,88323,88324,88329,88334,88339,88343,88347,88351,88356,88361,88366,88370],{"__ignoreMap":31},[36,88325,88326],{"class":38,"line":39},[36,88327,88328],{"class":42},"append(param1)\n",[36,88330,88331],{"class":38,"line":54},[36,88332,88333],{"class":42},"append(param1, param2)\n",[36,88335,88336],{"class":38,"line":66},[36,88337,88338],{"class":42},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,88340,88341],{"class":38,"line":73},[36,88342,70],{"emptyLinePlaceholder":69},[36,88344,88345],{"class":38,"line":86},[36,88346,70],{"emptyLinePlaceholder":69},[36,88348,88349],{"class":38,"line":126},[36,88350,70],{"emptyLinePlaceholder":69},[36,88352,88353],{"class":38,"line":131},[36,88354,88355],{"class":42},"let div = document.createElement(\"div\");\n",[36,88357,88358],{"class":38,"line":225},[36,88359,88360],{"class":42},"let p = document.createElement(\"p\");\n",[36,88362,88363],{"class":38,"line":235},[36,88364,88365],{"class":42},"div.append(p);\n",[36,88367,88368],{"class":38,"line":377},[36,88369,70],{"emptyLinePlaceholder":69},[36,88371,88372,88375,88377],{"class":38,"line":617},[36,88373,88374],{"class":42},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,88376,19],{"class":53649},[36,88378,88379],{"class":42},"> ]\n",[650,88381,88382],{"start":54},[653,88383,88384],{},"remove()",[19,88386,88387],{},"自己删自己",[19,88389,88390],{},[3879,88391],{"alt":31,"src":88392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,88394,88396],{"className":52982,"code":88395,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,88397,88398,88408,88422,88426,88434,88448,88468,88480,88488,88495,88507,88520,88555,88567,88578,88590,88602,88614,88641,88651,88655,88659,88668,88680,88694,88704,88716,88720,88724,88734,88745,88755,88765,88778,88791,88801,88805,88809,88818,88828,88840,88844,88848,88857,88867,88877,88889,88893,88897,88907,88923,88934,88944,88954,88966,88978,88990,88994,88998,89011,89022,89026,89034,89042,89046,89054,89074,89094,89102,89107,89133,89138,89143,89162,89167,89179,89184,89195,89205,89215,89220,89225,89229,89234,89239,89244,89264,89269,89289,89294,89308,89313,89318,89323,89339,89343,89348,89377,89382,89387,89392,89403,89407,89411,89415,89420,89445,89450,89475,89480,89489,89493,89498,89523,89527,89552,89556,89565,89569,89574,89592,89602,89606,89614,89622,89626],{"__ignoreMap":31},[36,88399,88400,88402,88404,88406],{"class":38,"line":39},[36,88401,53646],{"class":42},[36,88403,53650],{"class":53649},[36,88405,53653],{"class":79},[36,88407,53656],{"class":42},[36,88409,88410,88412,88414,88416,88418,88420],{"class":38,"line":54},[36,88411,3463],{"class":42},[36,88413,52984],{"class":53649},[36,88415,53665],{"class":79},[36,88417,47],{"class":42},[36,88419,53670],{"class":50},[36,88421,53656],{"class":42},[36,88423,88424],{"class":38,"line":66},[36,88425,70],{"emptyLinePlaceholder":69},[36,88427,88428,88430,88432],{"class":38,"line":73},[36,88429,3463],{"class":42},[36,88431,53683],{"class":53649},[36,88433,53656],{"class":42},[36,88435,88436,88438,88440,88442,88444,88446],{"class":38,"line":86},[36,88437,54492],{"class":42},[36,88439,53693],{"class":53649},[36,88441,53696],{"class":79},[36,88443,47],{"class":42},[36,88445,53701],{"class":50},[36,88447,53656],{"class":42},[36,88449,88450,88452,88454,88456,88458,88460,88462,88464,88466],{"class":38,"line":126},[36,88451,54492],{"class":42},[36,88453,53693],{"class":53649},[36,88455,17295],{"class":79},[36,88457,47],{"class":42},[36,88459,53740],{"class":50},[36,88461,53720],{"class":79},[36,88463,47],{"class":42},[36,88465,53747],{"class":50},[36,88467,53656],{"class":42},[36,88469,88470,88472,88474,88476,88478],{"class":38,"line":131},[36,88471,54492],{"class":42},[36,88473,53756],{"class":53649},[36,88475,53759],{"class":42},[36,88477,53756],{"class":53649},[36,88479,53656],{"class":42},[36,88481,88482,88484,88486],{"class":38,"line":225},[36,88483,54492],{"class":42},[36,88485,2467],{"class":53649},[36,88487,53656],{"class":42},[36,88489,88490,88493],{"class":38,"line":235},[36,88491,88492],{"class":79},"    .modal",[36,88494,2150],{"class":42},[36,88496,88497,88499,88501,88503,88505],{"class":38,"line":377},[36,88498,57119],{"class":62},[36,88500,2158],{"class":42},[36,88502,6357],{"class":62},[36,88504,53840],{"class":46},[36,88506,3711],{"class":42},[36,88508,88509,88512,88514,88516,88518],{"class":38,"line":617},[36,88510,88511],{"class":62},"      min-height",[36,88513,2158],{"class":42},[36,88515,1070],{"class":62},[36,88517,53840],{"class":46},[36,88519,3711],{"class":42},[36,88521,88522,88524,88526,88528,88530,88532,88534,88536,88538,88540,88542,88544,88546,88548,88550,88553],{"class":38,"line":643},[36,88523,81095],{"class":62},[36,88525,2158],{"class":42},[36,88527,2751],{"class":62},[36,88529,899],{"class":62},[36,88531,4431],{"class":62},[36,88533,53840],{"class":46},[36,88535,81112],{"class":62},[36,88537,92],{"class":42},[36,88539,2751],{"class":62},[36,88541,630],{"class":42},[36,88543,2751],{"class":62},[36,88545,630],{"class":42},[36,88547,2751],{"class":62},[36,88549,630],{"class":42},[36,88551,88552],{"class":62},"0.1",[36,88554,5104],{"class":42},[36,88556,88557,88559,88561,88563,88565],{"class":38,"line":921},[36,88558,57482],{"class":62},[36,88560,2158],{"class":42},[36,88562,2850],{"class":62},[36,88564,53840],{"class":46},[36,88566,3711],{"class":42},[36,88568,88569,88571,88573,88576],{"class":38,"line":934},[36,88570,57107],{"class":62},[36,88572,2158],{"class":42},[36,88574,88575],{"class":62},"fixed",[36,88577,3711],{"class":42},[36,88579,88580,88583,88585,88588],{"class":38,"line":939},[36,88581,88582],{"class":62},"      z-index",[36,88584,2158],{"class":42},[36,88586,88587],{"class":62},"999",[36,88589,3711],{"class":42},[36,88591,88592,88594,88596,88598,88600],{"class":38,"line":949},[36,88593,57186],{"class":62},[36,88595,2158],{"class":42},[36,88597,3210],{"class":62},[36,88599,2884],{"class":46},[36,88601,3711],{"class":42},[36,88603,88604,88606,88608,88610,88612],{"class":38,"line":962},[36,88605,57295],{"class":62},[36,88607,2158],{"class":42},[36,88609,3210],{"class":62},[36,88611,2884],{"class":46},[36,88613,3711],{"class":42},[36,88615,88616,88618,88620,88622,88624,88627,88629,88631,88633,88635,88637,88639],{"class":38,"line":974},[36,88617,81136],{"class":62},[36,88619,2158],{"class":42},[36,88621,81141],{"class":62},[36,88623,92],{"class":42},[36,88625,88626],{"class":62},"-50",[36,88628,2884],{"class":46},[36,88630,630],{"class":42},[36,88632,88626],{"class":62},[36,88634,2884],{"class":46},[36,88636,630],{"class":42},[36,88638,2751],{"class":62},[36,88640,5104],{"class":42},[36,88642,88643,88645,88647,88649],{"class":38,"line":979},[36,88644,57232],{"class":62},[36,88646,2158],{"class":42},[36,88648,63190],{"class":62},[36,88650,3711],{"class":42},[36,88652,88653],{"class":38,"line":994},[36,88654,4580],{"class":42},[36,88656,88657],{"class":38,"line":1006},[36,88658,70],{"emptyLinePlaceholder":69},[36,88660,88661,88663,88666],{"class":38,"line":1011},[36,88662,88492],{"class":79},[36,88664,88665],{"class":79}," .header",[36,88667,2150],{"class":42},[36,88669,88670,88672,88674,88676,88678],{"class":38,"line":1023},[36,88671,59707],{"class":62},[36,88673,2158],{"class":42},[36,88675,2957],{"class":62},[36,88677,53840],{"class":46},[36,88679,3711],{"class":42},[36,88681,88682,88684,88686,88688,88690,88692],{"class":38,"line":1028},[36,88683,57043],{"class":62},[36,88685,2158],{"class":42},[36,88687,2751],{"class":62},[36,88689,4431],{"class":62},[36,88691,53840],{"class":46},[36,88693,3711],{"class":42},[36,88695,88696,88698,88700,88702],{"class":38,"line":1033},[36,88697,57107],{"class":62},[36,88699,2158],{"class":42},[36,88701,57112],{"class":62},[36,88703,3711],{"class":42},[36,88705,88706,88708,88710,88712,88714],{"class":38,"line":1053},[36,88707,57270],{"class":62},[36,88709,2158],{"class":42},[36,88711,3254],{"class":62},[36,88713,53840],{"class":46},[36,88715,3711],{"class":42},[36,88717,88718],{"class":38,"line":1064},[36,88719,4580],{"class":42},[36,88721,88722],{"class":38,"line":1075},[36,88723,70],{"emptyLinePlaceholder":69},[36,88725,88726,88728,88730,88732],{"class":38,"line":2291},[36,88727,88492],{"class":79},[36,88729,88665],{"class":79},[36,88731,5417],{"class":53649},[36,88733,2150],{"class":42},[36,88735,88736,88739,88741,88743],{"class":38,"line":2329},[36,88737,88738],{"class":62},"      font-style",[36,88740,2158],{"class":42},[36,88742,66188],{"class":62},[36,88744,3711],{"class":42},[36,88746,88747,88749,88751,88753],{"class":38,"line":2334},[36,88748,59764],{"class":62},[36,88750,2158],{"class":42},[36,88752,64418],{"class":62},[36,88754,3711],{"class":42},[36,88756,88757,88759,88761,88763],{"class":38,"line":2339},[36,88758,57107],{"class":62},[36,88760,2158],{"class":42},[36,88762,57179],{"class":62},[36,88764,3711],{"class":42},[36,88766,88767,88770,88772,88774,88776],{"class":38,"line":2365},[36,88768,88769],{"class":62},"      right",[36,88771,2158],{"class":42},[36,88773,3130],{"class":62},[36,88775,53840],{"class":46},[36,88777,3711],{"class":42},[36,88779,88780,88782,88784,88787,88789],{"class":38,"line":2373},[36,88781,57295],{"class":62},[36,88783,2158],{"class":42},[36,88785,88786],{"class":62},"-2",[36,88788,53840],{"class":46},[36,88790,3711],{"class":42},[36,88792,88793,88795,88797,88799],{"class":38,"line":5001},[36,88794,64373],{"class":62},[36,88796,2158],{"class":42},[36,88798,64378],{"class":62},[36,88800,3711],{"class":42},[36,88802,88803],{"class":38,"line":5006},[36,88804,4580],{"class":42},[36,88806,88807],{"class":38,"line":10328},[36,88808,70],{"emptyLinePlaceholder":69},[36,88810,88811,88813,88816],{"class":38,"line":10352},[36,88812,88492],{"class":79},[36,88814,88815],{"class":79}," .body",[36,88817,2150],{"class":42},[36,88819,88820,88822,88824,88826],{"class":38,"line":10357},[36,88821,59634],{"class":62},[36,88823,2158],{"class":42},[36,88825,53940],{"class":62},[36,88827,3711],{"class":42},[36,88829,88830,88832,88834,88836,88838],{"class":38,"line":10363},[36,88831,57043],{"class":62},[36,88833,2158],{"class":42},[36,88835,3002],{"class":62},[36,88837,53840],{"class":46},[36,88839,3711],{"class":42},[36,88841,88842],{"class":38,"line":10390},[36,88843,4580],{"class":42},[36,88845,88846],{"class":38,"line":10395},[36,88847,70],{"emptyLinePlaceholder":69},[36,88849,88850,88852,88855],{"class":38,"line":10401},[36,88851,88492],{"class":79},[36,88853,88854],{"class":79}," .footer",[36,88856,2150],{"class":42},[36,88858,88859,88861,88863,88865],{"class":38,"line":10413},[36,88860,57357],{"class":62},[36,88862,2158],{"class":42},[36,88864,53825],{"class":62},[36,88866,3711],{"class":42},[36,88868,88869,88871,88873,88875],{"class":38,"line":10425},[36,88870,57368],{"class":62},[36,88872,2158],{"class":42},[36,88874,53928],{"class":62},[36,88876,3711],{"class":42},[36,88878,88879,88881,88883,88885,88887],{"class":38,"line":10437},[36,88880,57043],{"class":62},[36,88882,2158],{"class":42},[36,88884,3002],{"class":62},[36,88886,53840],{"class":46},[36,88888,3711],{"class":42},[36,88890,88891],{"class":38,"line":12095},[36,88892,4580],{"class":42},[36,88894,88895],{"class":38,"line":12120},[36,88896,70],{"emptyLinePlaceholder":69},[36,88898,88899,88901,88903,88905],{"class":38,"line":12143},[36,88900,88492],{"class":79},[36,88902,88854],{"class":79},[36,88904,3815],{"class":53649},[36,88906,2150],{"class":42},[36,88908,88909,88911,88913,88915,88917,88919,88921],{"class":38,"line":12167},[36,88910,57043],{"class":62},[36,88912,2158],{"class":42},[36,88914,2634],{"class":62},[36,88916,53840],{"class":46},[36,88918,4476],{"class":62},[36,88920,53840],{"class":46},[36,88922,3711],{"class":42},[36,88924,88925,88927,88929,88932],{"class":38,"line":12172},[36,88926,64069],{"class":62},[36,88928,2158],{"class":42},[36,88930,88931],{"class":62},"#ccc",[36,88933,3711],{"class":42},[36,88935,88936,88938,88940,88942],{"class":38,"line":12177},[36,88937,66317],{"class":62},[36,88939,2158],{"class":42},[36,88941,57085],{"class":62},[36,88943,3711],{"class":42},[36,88945,88946,88948,88950,88952],{"class":38,"line":12182},[36,88947,59764],{"class":62},[36,88949,2158],{"class":42},[36,88951,63190],{"class":62},[36,88953,3711],{"class":42},[36,88955,88956,88958,88960,88962,88964],{"class":38,"line":12191},[36,88957,57482],{"class":62},[36,88959,2158],{"class":42},[36,88961,1911],{"class":62},[36,88963,53840],{"class":46},[36,88965,3711],{"class":42},[36,88967,88968,88970,88972,88974,88976],{"class":38,"line":12196},[36,88969,64098],{"class":62},[36,88971,2158],{"class":42},[36,88973,3002],{"class":62},[36,88975,53840],{"class":46},[36,88977,3711],{"class":42},[36,88979,88980,88982,88984,88986,88988],{"class":38,"line":12202},[36,88981,57270],{"class":62},[36,88983,2158],{"class":42},[36,88985,3104],{"class":62},[36,88987,53840],{"class":46},[36,88989,3711],{"class":42},[36,88991,88992],{"class":38,"line":12223},[36,88993,4580],{"class":42},[36,88995,88996],{"class":38,"line":12229},[36,88997,70],{"emptyLinePlaceholder":69},[36,88999,89000,89002,89004,89006,89009],{"class":38,"line":12243},[36,89001,88492],{"class":79},[36,89003,88854],{"class":79},[36,89005,3815],{"class":53649},[36,89007,89008],{"class":79},".submit",[36,89010,2150],{"class":42},[36,89012,89013,89015,89017,89020],{"class":38,"line":12249},[36,89014,57232],{"class":62},[36,89016,2158],{"class":42},[36,89018,89019],{"class":62},"#369",[36,89021,3711],{"class":42},[36,89023,89024],{"class":38,"line":12276},[36,89025,4580],{"class":42},[36,89027,89028,89030,89032],{"class":38,"line":12285},[36,89029,54765],{"class":42},[36,89031,2467],{"class":53649},[36,89033,53656],{"class":42},[36,89035,89036,89038,89040],{"class":38,"line":12291},[36,89037,54133],{"class":42},[36,89039,53683],{"class":53649},[36,89041,53656],{"class":42},[36,89043,89044],{"class":38,"line":12299},[36,89045,70],{"emptyLinePlaceholder":69},[36,89047,89048,89050,89052],{"class":38,"line":12304},[36,89049,3463],{"class":42},[36,89051,54148],{"class":53649},[36,89053,53656],{"class":42},[36,89055,89056,89058,89060,89062,89064,89067,89070,89072],{"class":38,"line":18977},[36,89057,54492],{"class":42},[36,89059,56235],{"class":53649},[36,89061,17334],{"class":79},[36,89063,47],{"class":42},[36,89065,89066],{"class":50},"\"delete\"",[36,89068,89069],{"class":42},">删除\u003C\u002F",[36,89071,56235],{"class":53649},[36,89073,53656],{"class":42},[36,89075,89076,89078,89080,89082,89084,89087,89090,89092],{"class":38,"line":18983},[36,89077,54492],{"class":42},[36,89079,56235],{"class":53649},[36,89081,17334],{"class":79},[36,89083,47],{"class":42},[36,89085,89086],{"class":50},"\"login\"",[36,89088,89089],{"class":42},">登录\u003C\u002F",[36,89091,56235],{"class":53649},[36,89093,53656],{"class":42},[36,89095,89096,89098,89100],{"class":38,"line":19006},[36,89097,54492],{"class":42},[36,89099,54161],{"class":53649},[36,89101,53656],{"class":42},[36,89103,89104],{"class":38,"line":19012},[36,89105,89106],{"class":2621},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,89108,89109,89111,89114,89116,89118,89120,89122,89124,89127,89129,89131],{"class":38,"line":19035},[36,89110,72430],{"class":46},[36,89112,89113],{"class":79}," Modal",[36,89115,92],{"class":42},[36,89117,53756],{"class":7598},[36,89119,15941],{"class":46},[36,89121,72276],{"class":50},[36,89123,630],{"class":42},[36,89125,89126],{"class":7598},"message",[36,89128,15941],{"class":46},[36,89130,72276],{"class":50},[36,89132,14819],{"class":42},[36,89134,89135],{"class":38,"line":19049},[36,89136,89137],{"class":2621},"      \u002F\u002F 创建Model 模态框盒子\n",[36,89139,89140],{"class":38,"line":19069},[36,89141,89142],{"class":2621},"      \u002F\u002F 1.1 创建div标签\n",[36,89144,89145,89147,89150,89152,89154,89156,89158,89160],{"class":38,"line":19075},[36,89146,72397],{"class":62},[36,89148,89149],{"class":42},".modalBox ",[36,89151,47],{"class":46},[36,89153,56744],{"class":42},[36,89155,72497],{"class":79},[36,89157,92],{"class":42},[36,89159,84273],{"class":50},[36,89161,123],{"class":42},[36,89163,89164],{"class":38,"line":19086},[36,89165,89166],{"class":2621},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,89168,89169,89171,89174,89176],{"class":38,"line":19109},[36,89170,72397],{"class":62},[36,89172,89173],{"class":42},".modalBox.className ",[36,89175,47],{"class":46},[36,89177,89178],{"class":50}," 'modal'\n",[36,89180,89181],{"class":38,"line":19131},[36,89182,89183],{"class":2621},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,89185,89186,89188,89191,89193],{"class":38,"line":19136},[36,89187,72397],{"class":62},[36,89189,89190],{"class":42},".modalBox.innerHTML ",[36,89192,47],{"class":46},[36,89194,72514],{"class":50},[36,89196,89197,89200,89202],{"class":38,"line":19142},[36,89198,89199],{"class":50},"        \u003Cdiv class=\"header\">${",[36,89201,53756],{"class":42},[36,89203,89204],{"class":50},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,89206,89207,89210,89212],{"class":38,"line":19156},[36,89208,89209],{"class":50},"        \u003Cdiv class=\"body\">${",[36,89211,89126],{"class":42},[36,89213,89214],{"class":50},"}\u003C\u002Fdiv>\n",[36,89216,89217],{"class":38,"line":19169},[36,89218,89219],{"class":50},"      `\n",[36,89221,89222],{"class":38,"line":19174},[36,89223,89224],{"class":2621},"      \u002F\u002F console.log(this.modalBox)\n",[36,89226,89227],{"class":38,"line":19188},[36,89228,4580],{"class":42},[36,89230,89231],{"class":38,"line":19193},[36,89232,89233],{"class":2621},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,89235,89236],{"class":38,"line":19199},[36,89237,89238],{"class":2621},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,89240,89241],{"class":38,"line":19204},[36,89242,89243],{"class":2621},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,89245,89246,89249,89251,89253,89255,89258,89260,89262],{"class":38,"line":19218},[36,89247,89248],{"class":62},"    Modal",[36,89250,3113],{"class":42},[36,89252,87921],{"class":62},[36,89254,3113],{"class":42},[36,89256,89257],{"class":79},"open",[36,89259,15941],{"class":46},[36,89261,61266],{"class":46},[36,89263,56800],{"class":42},[36,89265,89266],{"class":38,"line":19223},[36,89267,89268],{"class":2621},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,89270,89271,89273,89276,89278,89280,89282,89284,89287],{"class":38,"line":19228},[36,89272,60576],{"class":46},[36,89274,89275],{"class":62}," box",[36,89277,15941],{"class":46},[36,89279,56744],{"class":42},[36,89281,56747],{"class":79},[36,89283,92],{"class":42},[36,89285,89286],{"class":50},"'.modal'",[36,89288,123],{"class":42},[36,89290,89291],{"class":38,"line":19242},[36,89292,89293],{"class":2621},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,89295,89296,89299,89301,89304,89306],{"class":38,"line":19254},[36,89297,89298],{"class":42},"      box ",[36,89300,4118],{"class":46},[36,89302,89303],{"class":42}," box.",[36,89305,59354],{"class":79},[36,89307,4369],{"class":42},[36,89309,89310],{"class":38,"line":19259},[36,89311,89312],{"class":2621},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,89314,89315],{"class":38,"line":19272},[36,89316,89317],{"class":2621},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,89319,89320],{"class":38,"line":19277},[36,89321,89322],{"class":2621},"      \u002F\u002F append可以增加对象\n",[36,89324,89325,89328,89331,89333,89336],{"class":38,"line":19282},[36,89326,89327],{"class":42},"      document.body.",[36,89329,89330],{"class":79},"append",[36,89332,92],{"class":42},[36,89334,89335],{"class":62},"this",[36,89337,89338],{"class":42},".modalBox)\n",[36,89340,89341],{"class":38,"line":19287},[36,89342,70],{"emptyLinePlaceholder":69},[36,89344,89345],{"class":38,"line":19300},[36,89346,89347],{"class":2621},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,89349,89350,89352,89355,89357,89359,89362,89364,89366,89368,89370,89373,89375],{"class":38,"line":19305},[36,89351,72397],{"class":62},[36,89353,89354],{"class":42},".modalBox.",[36,89356,56747],{"class":79},[36,89358,92],{"class":42},[36,89360,89361],{"class":50},"'i'",[36,89363,33183],{"class":42},[36,89365,60161],{"class":79},[36,89367,92],{"class":42},[36,89369,60166],{"class":50},[36,89371,89372],{"class":42},", () ",[36,89374,87064],{"class":46},[36,89376,2150],{"class":42},[36,89378,89379],{"class":38,"line":34985},[36,89380,89381],{"class":2621},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,89383,89384],{"class":38,"line":34991},[36,89385,89386],{"class":2621},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,89388,89389],{"class":38,"line":34997},[36,89390,89391],{"class":2621},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,89393,89394,89396,89398,89401],{"class":38,"line":35003},[36,89395,67073],{"class":62},[36,89397,3113],{"class":42},[36,89399,89400],{"class":79},"close",[36,89402,4369],{"class":42},[36,89404,89405],{"class":38,"line":35009},[36,89406,67162],{"class":42},[36,89408,89409],{"class":38,"line":35020},[36,89410,4580],{"class":42},[36,89412,89413],{"class":38,"line":35026},[36,89414,70],{"emptyLinePlaceholder":69},[36,89416,89417],{"class":38,"line":35046},[36,89418,89419],{"class":2621},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,89421,89422,89424,89426,89428,89431,89433,89435,89437,89439,89441,89443],{"class":38,"line":35052},[36,89423,54755],{"class":42},[36,89425,56747],{"class":79},[36,89427,92],{"class":42},[36,89429,89430],{"class":50},"'#delete'",[36,89432,33183],{"class":42},[36,89434,60161],{"class":79},[36,89436,92],{"class":42},[36,89438,60166],{"class":50},[36,89440,89372],{"class":42},[36,89442,87064],{"class":46},[36,89444,2150],{"class":42},[36,89446,89447],{"class":38,"line":35063},[36,89448,89449],{"class":2621},"      \u002F\u002F 先调用Model构造函数\n",[36,89451,89452,89454,89457,89459,89461,89463,89465,89468,89470,89473],{"class":38,"line":35069},[36,89453,60576],{"class":46},[36,89455,89456],{"class":62}," del",[36,89458,15941],{"class":46},[36,89460,13956],{"class":46},[36,89462,89113],{"class":79},[36,89464,92],{"class":42},[36,89466,89467],{"class":50},"'温馨的提示'",[36,89469,630],{"class":42},[36,89471,89472],{"class":50},"'您没有删除权限操作'",[36,89474,123],{"class":42},[36,89476,89477],{"class":38,"line":35075},[36,89478,89479],{"class":2621},"      \u002F\u002F 实例对象调用open方法\n",[36,89481,89482,89485,89487],{"class":38,"line":35081},[36,89483,89484],{"class":42},"      del.",[36,89486,89257],{"class":79},[36,89488,4369],{"class":42},[36,89490,89491],{"class":38,"line":35087},[36,89492,35813],{"class":42},[36,89494,89495],{"class":38,"line":35093},[36,89496,89497],{"class":2621},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,89499,89500,89502,89504,89506,89509,89511,89513,89515,89517,89519,89521],{"class":38,"line":35099},[36,89501,54755],{"class":42},[36,89503,56747],{"class":79},[36,89505,92],{"class":42},[36,89507,89508],{"class":50},"'#login'",[36,89510,33183],{"class":42},[36,89512,60161],{"class":79},[36,89514,92],{"class":42},[36,89516,60166],{"class":50},[36,89518,89372],{"class":42},[36,89520,87064],{"class":46},[36,89522,2150],{"class":42},[36,89524,89525],{"class":38,"line":35105},[36,89526,89449],{"class":2621},[36,89528,89529,89531,89534,89536,89538,89540,89542,89545,89547,89550],{"class":38,"line":35125},[36,89530,60576],{"class":46},[36,89532,89533],{"class":62}," log",[36,89535,15941],{"class":46},[36,89537,13956],{"class":46},[36,89539,89113],{"class":79},[36,89541,92],{"class":42},[36,89543,89544],{"class":50},"'友情提示'",[36,89546,630],{"class":42},[36,89548,89549],{"class":50},"'您还没有登录呢'",[36,89551,123],{"class":42},[36,89553,89554],{"class":38,"line":35131},[36,89555,89479],{"class":2621},[36,89557,89558,89561,89563],{"class":38,"line":35147},[36,89559,89560],{"class":42},"      log.",[36,89562,89257],{"class":79},[36,89564,4369],{"class":42},[36,89566,89567],{"class":38,"line":35153},[36,89568,35813],{"class":42},[36,89570,89571],{"class":38,"line":35167},[36,89572,89573],{"class":2621},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,89575,89576,89578,89580,89582,89584,89586,89588,89590],{"class":38,"line":35173},[36,89577,89248],{"class":62},[36,89579,3113],{"class":42},[36,89581,87921],{"class":62},[36,89583,3113],{"class":42},[36,89585,89400],{"class":79},[36,89587,15941],{"class":46},[36,89589,61266],{"class":46},[36,89591,56800],{"class":42},[36,89593,89594,89596,89598,89600],{"class":38,"line":35188},[36,89595,72397],{"class":62},[36,89597,89354],{"class":42},[36,89599,59354],{"class":79},[36,89601,4369],{"class":42},[36,89603,89604],{"class":38,"line":35194},[36,89605,4580],{"class":42},[36,89607,89608,89610,89612],{"class":38,"line":35203},[36,89609,54765],{"class":42},[36,89611,54161],{"class":53649},[36,89613,53656],{"class":42},[36,89615,89616,89618,89620],{"class":38,"line":35209},[36,89617,54133],{"class":42},[36,89619,54148],{"class":53649},[36,89621,53656],{"class":42},[36,89623,89624],{"class":38,"line":35218},[36,89625,70],{"emptyLinePlaceholder":69},[36,89627,89628,89630,89632],{"class":38,"line":35224},[36,89629,54133],{"class":42},[36,89631,52984],{"class":53649},[36,89633,53656],{"class":42},[19,89635,89636],{},[3879,89637],{"alt":31,"src":89638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89640,89642],{"id":89641},"_414-深浅拷贝","4.14 深浅拷贝",[1752,89644,89646],{"id":89645},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89648,89649],{},[3879,89650],{"alt":31,"src":89651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89653,89654],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89656,89657],{},[3879,89658],{"alt":31,"src":89659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89661,89662],{},[3879,89663],{"alt":31,"src":89664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89666,89667],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89669,89670],{},[3879,89671],{"alt":31,"src":89672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89674,13710],{},[19,89676,89677],{},[3879,89678],{"alt":31,"src":89679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1752,89681,89683],{"id":89682},"_4142-深拷贝","4.14.2 深拷贝",[19,89685,89686],{},"深拷贝：拷贝的是对象，不是地址",[19,89688,89689],{},"常用的三种方法：",[650,89691,89692,89695,89698],{},[653,89693,89694],{},"通过递归实现深拷贝",[653,89696,89697],{},"lodash\u002FcloneDeep",[653,89699,89700],{},"通过JSON.stringify()实现",[24368,89702,89704],{"id":89703},"_41421-递归函数","4.14.2.1 递归函数",[19,89706,89707],{},[3879,89708],{"alt":31,"src":89709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[650,89711,89712],{},[653,89713,89714],{},"死递归占溢出：",[26,89716,89718],{"className":55415,"code":89717,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,89719,89720,89728,89736,89740,89745,89749,89754,89762],{"__ignoreMap":31},[36,89721,89722,89724,89726],{"class":38,"line":39},[36,89723,3463],{"class":42},[36,89725,54148],{"class":53649},[36,89727,53656],{"class":42},[36,89729,89730,89732,89734],{"class":38,"line":54},[36,89731,54492],{"class":42},[36,89733,54161],{"class":53649},[36,89735,53656],{"class":42},[36,89737,89738],{"class":38,"line":66},[36,89739,79488],{"class":42},[36,89741,89742],{"class":38,"line":73},[36,89743,89744],{"class":42},"      fn()\n",[36,89746,89747],{"class":38,"line":86},[36,89748,4580],{"class":42},[36,89750,89751],{"class":38,"line":126},[36,89752,89753],{"class":42},"    fn()\n",[36,89755,89756,89758,89760],{"class":38,"line":131},[36,89757,54765],{"class":42},[36,89759,54161],{"class":53649},[36,89761,53656],{"class":42},[36,89763,89764,89766,89768],{"class":38,"line":225},[36,89765,54133],{"class":42},[36,89767,54148],{"class":53649},[36,89769,53656],{"class":42},[650,89771,89772],{"start":54},[653,89773,89774],{},"递归函数要加判断条件：",[19,89776,89777],{},[3879,89778],{"alt":31,"src":89779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[650,89781,89782],{"start":66},[653,89783,89784],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,89786,89788],{"className":52982,"code":89787,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,89789,89790,89800,89814,89818,89826,89840,89860,89872,89880,89884,89892,89904,89912,89920,89945,89957,89961,89968,89976,89984,89988],{"__ignoreMap":31},[36,89791,89792,89794,89796,89798],{"class":38,"line":39},[36,89793,53646],{"class":42},[36,89795,53650],{"class":53649},[36,89797,53653],{"class":79},[36,89799,53656],{"class":42},[36,89801,89802,89804,89806,89808,89810,89812],{"class":38,"line":54},[36,89803,3463],{"class":42},[36,89805,52984],{"class":53649},[36,89807,53665],{"class":79},[36,89809,47],{"class":42},[36,89811,53670],{"class":50},[36,89813,53656],{"class":42},[36,89815,89816],{"class":38,"line":66},[36,89817,70],{"emptyLinePlaceholder":69},[36,89819,89820,89822,89824],{"class":38,"line":73},[36,89821,3463],{"class":42},[36,89823,53683],{"class":53649},[36,89825,53656],{"class":42},[36,89827,89828,89830,89832,89834,89836,89838],{"class":38,"line":86},[36,89829,54492],{"class":42},[36,89831,53693],{"class":53649},[36,89833,53696],{"class":79},[36,89835,47],{"class":42},[36,89837,53701],{"class":50},[36,89839,53656],{"class":42},[36,89841,89842,89844,89846,89848,89850,89852,89854,89856,89858],{"class":38,"line":126},[36,89843,54492],{"class":42},[36,89845,53693],{"class":53649},[36,89847,17295],{"class":79},[36,89849,47],{"class":42},[36,89851,53740],{"class":50},[36,89853,53720],{"class":79},[36,89855,47],{"class":42},[36,89857,53747],{"class":50},[36,89859,53656],{"class":42},[36,89861,89862,89864,89866,89868,89870],{"class":38,"line":131},[36,89863,54492],{"class":42},[36,89865,53756],{"class":53649},[36,89867,53759],{"class":42},[36,89869,53756],{"class":53649},[36,89871,53656],{"class":42},[36,89873,89874,89876,89878],{"class":38,"line":225},[36,89875,54133],{"class":42},[36,89877,53683],{"class":53649},[36,89879,53656],{"class":42},[36,89881,89882],{"class":38,"line":235},[36,89883,70],{"emptyLinePlaceholder":69},[36,89885,89886,89888,89890],{"class":38,"line":377},[36,89887,3463],{"class":42},[36,89889,54148],{"class":53649},[36,89891,53656],{"class":42},[36,89893,89894,89896,89898,89900,89902],{"class":38,"line":617},[36,89895,54492],{"class":42},[36,89897,53959],{"class":53649},[36,89899,57662],{"class":42},[36,89901,53959],{"class":53649},[36,89903,53656],{"class":42},[36,89905,89906,89908,89910],{"class":38,"line":643},[36,89907,54492],{"class":42},[36,89909,54161],{"class":53649},[36,89911,53656],{"class":42},[36,89913,89914,89916,89918],{"class":38,"line":921},[36,89915,72430],{"class":46},[36,89917,76118],{"class":79},[36,89919,13232],{"class":42},[36,89921,89922,89924,89926,89928,89930,89932,89934,89936,89938,89940,89943],{"class":38,"line":934},[36,89923,58119],{"class":42},[36,89925,56747],{"class":79},[36,89927,92],{"class":42},[36,89929,84273],{"class":50},[36,89931,76594],{"class":42},[36,89933,47],{"class":46},[36,89935,13956],{"class":46},[36,89937,76134],{"class":79},[36,89939,1435],{"class":42},[36,89941,89942],{"class":79},"toLocaleString",[36,89944,4369],{"class":42},[36,89946,89947,89950,89953,89955],{"class":38,"line":939},[36,89948,89949],{"class":79},"      setTimeout",[36,89951,89952],{"class":42},"(getTime, ",[36,89954,1048],{"class":62},[36,89956,123],{"class":42},[36,89958,89959],{"class":38,"line":949},[36,89960,4580],{"class":42},[36,89962,89963,89966],{"class":38,"line":962},[36,89964,89965],{"class":79},"    getTime",[36,89967,4369],{"class":42},[36,89969,89970,89972,89974],{"class":38,"line":974},[36,89971,54765],{"class":42},[36,89973,54161],{"class":53649},[36,89975,53656],{"class":42},[36,89977,89978,89980,89982],{"class":38,"line":979},[36,89979,54133],{"class":42},[36,89981,54148],{"class":53649},[36,89983,53656],{"class":42},[36,89985,89986],{"class":38,"line":994},[36,89987,70],{"emptyLinePlaceholder":69},[36,89989,89990,89992,89994],{"class":38,"line":1006},[36,89991,54133],{"class":42},[36,89993,52984],{"class":53649},[36,89995,53656],{"class":42},[19,89997,89998],{},[3879,89999],{"alt":31,"src":90000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[650,90002,90003],{"start":73},[653,90004,89694],{},[19,90006,90007],{},[3879,90008],{"alt":31,"src":90009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90011,90012],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90014,41538],{},[19,90016,90017],{},"这个是简易版的递归函数深拷贝",[19,90019,90020],{},"一定要注意先数组再对象，因为万物皆可对象",[26,90022,90024],{"className":52982,"code":90023,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,90025,90026,90036,90050,90054,90062,90076,90096,90108,90116,90120,90128,90136,90146,90155,90163,90178,90182,90190,90194,90198,90210,90215,90234,90250,90255,90260,90265,90280,90285,90290,90299,90307,90324,90332,90338,90346,90351,90356,90365,90369,90373,90377,90388,90397,90407,90421,90431,90439,90447,90455,90459],{"__ignoreMap":31},[36,90027,90028,90030,90032,90034],{"class":38,"line":39},[36,90029,53646],{"class":42},[36,90031,53650],{"class":53649},[36,90033,53653],{"class":79},[36,90035,53656],{"class":42},[36,90037,90038,90040,90042,90044,90046,90048],{"class":38,"line":54},[36,90039,3463],{"class":42},[36,90041,52984],{"class":53649},[36,90043,53665],{"class":79},[36,90045,47],{"class":42},[36,90047,53670],{"class":50},[36,90049,53656],{"class":42},[36,90051,90052],{"class":38,"line":66},[36,90053,70],{"emptyLinePlaceholder":69},[36,90055,90056,90058,90060],{"class":38,"line":73},[36,90057,3463],{"class":42},[36,90059,53683],{"class":53649},[36,90061,53656],{"class":42},[36,90063,90064,90066,90068,90070,90072,90074],{"class":38,"line":86},[36,90065,54492],{"class":42},[36,90067,53693],{"class":53649},[36,90069,53696],{"class":79},[36,90071,47],{"class":42},[36,90073,53701],{"class":50},[36,90075,53656],{"class":42},[36,90077,90078,90080,90082,90084,90086,90088,90090,90092,90094],{"class":38,"line":126},[36,90079,54492],{"class":42},[36,90081,53693],{"class":53649},[36,90083,17295],{"class":79},[36,90085,47],{"class":42},[36,90087,53740],{"class":50},[36,90089,53720],{"class":79},[36,90091,47],{"class":42},[36,90093,53747],{"class":50},[36,90095,53656],{"class":42},[36,90097,90098,90100,90102,90104,90106],{"class":38,"line":131},[36,90099,54492],{"class":42},[36,90101,53756],{"class":53649},[36,90103,53759],{"class":42},[36,90105,53756],{"class":53649},[36,90107,53656],{"class":42},[36,90109,90110,90112,90114],{"class":38,"line":225},[36,90111,54133],{"class":42},[36,90113,53683],{"class":53649},[36,90115,53656],{"class":42},[36,90117,90118],{"class":38,"line":235},[36,90119,70],{"emptyLinePlaceholder":69},[36,90121,90122,90124,90126],{"class":38,"line":377},[36,90123,3463],{"class":42},[36,90125,54148],{"class":53649},[36,90127,53656],{"class":42},[36,90129,90130,90132,90134],{"class":38,"line":617},[36,90131,54492],{"class":42},[36,90133,54161],{"class":53649},[36,90135,53656],{"class":42},[36,90137,90138,90140,90142,90144],{"class":38,"line":643},[36,90139,13599],{"class":46},[36,90141,72317],{"class":62},[36,90143,15941],{"class":46},[36,90145,2150],{"class":42},[36,90147,90148,90150,90153],{"class":38,"line":921},[36,90149,73961],{"class":42},[36,90151,90152],{"class":50},"'pink'",[36,90154,33820],{"class":42},[36,90156,90157,90159,90161],{"class":38,"line":934},[36,90158,73971],{"class":42},[36,90160,633],{"class":62},[36,90162,33820],{"class":42},[36,90164,90165,90168,90171,90173,90176],{"class":38,"line":939},[36,90166,90167],{"class":42},"      hobby: [",[36,90169,90170],{"class":50},"'乒乓球'",[36,90172,630],{"class":42},[36,90174,90175],{"class":50},"'足球'",[36,90177,2244],{"class":42},[36,90179,90180],{"class":38,"line":949},[36,90181,80217],{"class":42},[36,90183,90184,90187],{"class":38,"line":962},[36,90185,90186],{"class":42},"        baby: ",[36,90188,90189],{"class":50},"'小pink'\n",[36,90191,90192],{"class":38,"line":974},[36,90193,54746],{"class":42},[36,90195,90196],{"class":38,"line":979},[36,90197,4580],{"class":42},[36,90199,90200,90202,90205,90207],{"class":38,"line":994},[36,90201,13599],{"class":46},[36,90203,90204],{"class":62}," o",[36,90206,15941],{"class":46},[36,90208,90209],{"class":42}," {}\n",[36,90211,90212],{"class":38,"line":1006},[36,90213,90214],{"class":2621},"    \u002F\u002F 拷贝函数\n",[36,90216,90217,90219,90222,90224,90227,90229,90232],{"class":38,"line":1011},[36,90218,72430],{"class":46},[36,90220,90221],{"class":79}," deepCopy",[36,90223,92],{"class":42},[36,90225,90226],{"class":7598},"newObj",[36,90228,630],{"class":42},[36,90230,90231],{"class":7598},"oldObj",[36,90233,14819],{"class":42},[36,90235,90236,90238,90240,90242,90245,90247],{"class":38,"line":1023},[36,90237,54632],{"class":46},[36,90239,4066],{"class":42},[36,90241,54195],{"class":46},[36,90243,90244],{"class":42}," k ",[36,90246,28413],{"class":46},[36,90248,90249],{"class":42}," oldObj) {\n",[36,90251,90252],{"class":38,"line":1028},[36,90253,90254],{"class":2621},"        \u002F\u002F 处理数组的问题\n",[36,90256,90257],{"class":38,"line":1033},[36,90258,90259],{"class":2621},"        \u002F\u002F 判断是否属于数组\n",[36,90261,90262],{"class":38,"line":1053},[36,90263,90264],{"class":2621},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,90266,90267,90269,90272,90275,90278],{"class":38,"line":1064},[36,90268,890],{"class":46},[36,90270,90271],{"class":42}," (oldObj[k] ",[36,90273,90274],{"class":46},"instanceof",[36,90276,90277],{"class":79}," Array",[36,90279,14819],{"class":42},[36,90281,90282],{"class":38,"line":1075},[36,90283,90284],{"class":2621},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,90286,90287],{"class":38,"line":2291},[36,90288,90289],{"class":2621},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,90291,90292,90295,90297],{"class":38,"line":2329},[36,90293,90294],{"class":42},"          newObj[k] ",[36,90296,47],{"class":46},[36,90298,54186],{"class":42},[36,90300,90301,90304],{"class":38,"line":2334},[36,90302,90303],{"class":79},"          deepCopy",[36,90305,90306],{"class":42},"(newObj[k], oldObj[k])\n",[36,90308,90309,90311,90313,90315,90317,90319,90322],{"class":38,"line":2339},[36,90310,82424],{"class":42},[36,90312,4105],{"class":46},[36,90314,4108],{"class":46},[36,90316,90271],{"class":42},[36,90318,90274],{"class":46},[36,90320,90321],{"class":79}," Object",[36,90323,14819],{"class":42},[36,90325,90326,90328,90330],{"class":38,"line":2365},[36,90327,90294],{"class":42},[36,90329,47],{"class":46},[36,90331,90209],{"class":42},[36,90333,90334,90336],{"class":38,"line":2373},[36,90335,90303],{"class":79},[36,90337,90306],{"class":42},[36,90339,90340,90342,90344],{"class":38,"line":5001},[36,90341,82424],{"class":42},[36,90343,4105],{"class":46},[36,90345,2150],{"class":42},[36,90347,90348],{"class":38,"line":5006},[36,90349,90350],{"class":2621},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,90352,90353],{"class":38,"line":10328},[36,90354,90355],{"class":2621},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,90357,90358,90360,90362],{"class":38,"line":10352},[36,90359,90294],{"class":42},[36,90361,47],{"class":46},[36,90363,90364],{"class":42}," oldObj[k]\n",[36,90366,90367],{"class":38,"line":10357},[36,90368,2204],{"class":42},[36,90370,90371],{"class":38,"line":10363},[36,90372,54746],{"class":42},[36,90374,90375],{"class":38,"line":10390},[36,90376,4580],{"class":42},[36,90378,90379,90382,90385],{"class":38,"line":10395},[36,90380,90381],{"class":79},"    deepCopy",[36,90383,90384],{"class":42},"(o, obj) ",[36,90386,90387],{"class":2621},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,90389,90390,90392,90394],{"class":38,"line":10401},[36,90391,76098],{"class":42},[36,90393,60595],{"class":79},[36,90395,90396],{"class":42},"(o)\n",[36,90398,90399,90402,90404],{"class":38,"line":10413},[36,90400,90401],{"class":42},"    o.age ",[36,90403,47],{"class":46},[36,90405,90406],{"class":62}," 20\n",[36,90408,90409,90412,90414,90416,90418],{"class":38,"line":10425},[36,90410,90411],{"class":42},"    o.hobby[",[36,90413,2751],{"class":62},[36,90415,6826],{"class":42},[36,90417,47],{"class":46},[36,90419,90420],{"class":50}," '篮球'\n",[36,90422,90423,90426,90428],{"class":38,"line":10437},[36,90424,90425],{"class":42},"    o.family ",[36,90427,47],{"class":46},[36,90429,90430],{"class":50}," '老pink'\n",[36,90432,90433,90435,90437],{"class":38,"line":12095},[36,90434,76098],{"class":42},[36,90436,60595],{"class":79},[36,90438,72382],{"class":42},[36,90440,90441,90443,90445],{"class":38,"line":12120},[36,90442,54765],{"class":42},[36,90444,54161],{"class":53649},[36,90446,53656],{"class":42},[36,90448,90449,90451,90453],{"class":38,"line":12143},[36,90450,54133],{"class":42},[36,90452,54148],{"class":53649},[36,90454,53656],{"class":42},[36,90456,90457],{"class":38,"line":12167},[36,90458,70],{"emptyLinePlaceholder":69},[36,90460,90461,90463,90465],{"class":38,"line":12172},[36,90462,54133],{"class":42},[36,90464,52984],{"class":53649},[36,90466,53656],{"class":42},[19,90468,90469],{},[3879,90470],{"alt":31,"src":90471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24368,90473,90475,90476],{"id":90474},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[667,90477,90478],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90480,90481],{},[2796,90482,90483],{"href":90483,"rel":90484},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26235],[19,90486,90487],{},"lodash里边的方法都要加上一个下划线_",[19,90489,90490],{},"_.cloneDeep()",[26,90492,90494],{"className":52982,"code":90493,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,90495,90496,90506,90520,90524,90532,90546,90566,90578,90586,90590,90598,90603,90622,90630,90640,90648,90656,90668,90672,90678,90682,90686,90702,90710,90719,90727,90735,90743,90747],{"__ignoreMap":31},[36,90497,90498,90500,90502,90504],{"class":38,"line":39},[36,90499,53646],{"class":42},[36,90501,53650],{"class":53649},[36,90503,53653],{"class":79},[36,90505,53656],{"class":42},[36,90507,90508,90510,90512,90514,90516,90518],{"class":38,"line":54},[36,90509,3463],{"class":42},[36,90511,52984],{"class":53649},[36,90513,53665],{"class":79},[36,90515,47],{"class":42},[36,90517,53670],{"class":50},[36,90519,53656],{"class":42},[36,90521,90522],{"class":38,"line":66},[36,90523,70],{"emptyLinePlaceholder":69},[36,90525,90526,90528,90530],{"class":38,"line":73},[36,90527,3463],{"class":42},[36,90529,53683],{"class":53649},[36,90531,53656],{"class":42},[36,90533,90534,90536,90538,90540,90542,90544],{"class":38,"line":86},[36,90535,54492],{"class":42},[36,90537,53693],{"class":53649},[36,90539,53696],{"class":79},[36,90541,47],{"class":42},[36,90543,53701],{"class":50},[36,90545,53656],{"class":42},[36,90547,90548,90550,90552,90554,90556,90558,90560,90562,90564],{"class":38,"line":126},[36,90549,54492],{"class":42},[36,90551,53693],{"class":53649},[36,90553,17295],{"class":79},[36,90555,47],{"class":42},[36,90557,53740],{"class":50},[36,90559,53720],{"class":79},[36,90561,47],{"class":42},[36,90563,53747],{"class":50},[36,90565,53656],{"class":42},[36,90567,90568,90570,90572,90574,90576],{"class":38,"line":131},[36,90569,54492],{"class":42},[36,90571,53756],{"class":53649},[36,90573,53759],{"class":42},[36,90575,53756],{"class":53649},[36,90577,53656],{"class":42},[36,90579,90580,90582,90584],{"class":38,"line":225},[36,90581,54133],{"class":42},[36,90583,53683],{"class":53649},[36,90585,53656],{"class":42},[36,90587,90588],{"class":38,"line":235},[36,90589,70],{"emptyLinePlaceholder":69},[36,90591,90592,90594,90596],{"class":38,"line":377},[36,90593,3463],{"class":42},[36,90595,54148],{"class":53649},[36,90597,53656],{"class":42},[36,90599,90600],{"class":38,"line":617},[36,90601,90602],{"class":2621},"  \u003C!-- 先引用这个库 -->\n",[36,90604,90605,90607,90609,90611,90613,90616,90618,90620],{"class":38,"line":643},[36,90606,54492],{"class":42},[36,90608,54161],{"class":53649},[36,90610,57587],{"class":79},[36,90612,47],{"class":42},[36,90614,90615],{"class":50},"\"lodash.min.js\"",[36,90617,57662],{"class":42},[36,90619,54161],{"class":53649},[36,90621,53656],{"class":42},[36,90623,90624,90626,90628],{"class":38,"line":921},[36,90625,54492],{"class":42},[36,90627,54161],{"class":53649},[36,90629,53656],{"class":42},[36,90631,90632,90634,90636,90638],{"class":38,"line":934},[36,90633,13599],{"class":46},[36,90635,72317],{"class":62},[36,90637,15941],{"class":46},[36,90639,2150],{"class":42},[36,90641,90642,90644,90646],{"class":38,"line":939},[36,90643,73961],{"class":42},[36,90645,90152],{"class":50},[36,90647,33820],{"class":42},[36,90649,90650,90652,90654],{"class":38,"line":949},[36,90651,73971],{"class":42},[36,90653,633],{"class":62},[36,90655,33820],{"class":42},[36,90657,90658,90660,90662,90664,90666],{"class":38,"line":962},[36,90659,90167],{"class":42},[36,90661,90170],{"class":50},[36,90663,630],{"class":42},[36,90665,90175],{"class":50},[36,90667,2244],{"class":42},[36,90669,90670],{"class":38,"line":974},[36,90671,80217],{"class":42},[36,90673,90674,90676],{"class":38,"line":979},[36,90675,90186],{"class":42},[36,90677,90189],{"class":50},[36,90679,90680],{"class":38,"line":994},[36,90681,54746],{"class":42},[36,90683,90684],{"class":38,"line":1006},[36,90685,4580],{"class":42},[36,90687,90688,90690,90692,90694,90697,90700],{"class":38,"line":1011},[36,90689,13599],{"class":46},[36,90691,90204],{"class":62},[36,90693,15941],{"class":46},[36,90695,90696],{"class":42}," _.",[36,90698,90699],{"class":79},"cloneDeep",[36,90701,72382],{"class":42},[36,90703,90704,90706,90708],{"class":38,"line":1023},[36,90705,76098],{"class":42},[36,90707,60595],{"class":79},[36,90709,90396],{"class":42},[36,90711,90712,90715,90717],{"class":38,"line":1028},[36,90713,90714],{"class":42},"    o.family.baby ",[36,90716,47],{"class":46},[36,90718,90430],{"class":50},[36,90720,90721,90723,90725],{"class":38,"line":1033},[36,90722,76098],{"class":42},[36,90724,60595],{"class":79},[36,90726,72382],{"class":42},[36,90728,90729,90731,90733],{"class":38,"line":1053},[36,90730,54765],{"class":42},[36,90732,54161],{"class":53649},[36,90734,53656],{"class":42},[36,90736,90737,90739,90741],{"class":38,"line":1064},[36,90738,54133],{"class":42},[36,90740,54148],{"class":53649},[36,90742,53656],{"class":42},[36,90744,90745],{"class":38,"line":1075},[36,90746,70],{"emptyLinePlaceholder":69},[36,90748,90749,90751,90753],{"class":38,"line":2291},[36,90750,54133],{"class":42},[36,90752,52984],{"class":53649},[36,90754,53656],{"class":42},[19,90756,90757],{},[3879,90758],{"alt":31,"src":90759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24368,90761,90763],{"id":90762},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,90765,90767],{"className":52982,"code":90766,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,90768,90769,90779,90793,90797,90805,90819,90839,90851,90859,90863,90871,90879,90889,90897,90905,90917,90921,90927,90931,90935,90940,90945,90950,90976,90984,90993,91001,91009,91017,91021],{"__ignoreMap":31},[36,90770,90771,90773,90775,90777],{"class":38,"line":39},[36,90772,53646],{"class":42},[36,90774,53650],{"class":53649},[36,90776,53653],{"class":79},[36,90778,53656],{"class":42},[36,90780,90781,90783,90785,90787,90789,90791],{"class":38,"line":54},[36,90782,3463],{"class":42},[36,90784,52984],{"class":53649},[36,90786,53665],{"class":79},[36,90788,47],{"class":42},[36,90790,53670],{"class":50},[36,90792,53656],{"class":42},[36,90794,90795],{"class":38,"line":66},[36,90796,70],{"emptyLinePlaceholder":69},[36,90798,90799,90801,90803],{"class":38,"line":73},[36,90800,3463],{"class":42},[36,90802,53683],{"class":53649},[36,90804,53656],{"class":42},[36,90806,90807,90809,90811,90813,90815,90817],{"class":38,"line":86},[36,90808,54492],{"class":42},[36,90810,53693],{"class":53649},[36,90812,53696],{"class":79},[36,90814,47],{"class":42},[36,90816,53701],{"class":50},[36,90818,53656],{"class":42},[36,90820,90821,90823,90825,90827,90829,90831,90833,90835,90837],{"class":38,"line":126},[36,90822,54492],{"class":42},[36,90824,53693],{"class":53649},[36,90826,17295],{"class":79},[36,90828,47],{"class":42},[36,90830,53740],{"class":50},[36,90832,53720],{"class":79},[36,90834,47],{"class":42},[36,90836,53747],{"class":50},[36,90838,53656],{"class":42},[36,90840,90841,90843,90845,90847,90849],{"class":38,"line":131},[36,90842,54492],{"class":42},[36,90844,53756],{"class":53649},[36,90846,53759],{"class":42},[36,90848,53756],{"class":53649},[36,90850,53656],{"class":42},[36,90852,90853,90855,90857],{"class":38,"line":225},[36,90854,54133],{"class":42},[36,90856,53683],{"class":53649},[36,90858,53656],{"class":42},[36,90860,90861],{"class":38,"line":235},[36,90862,70],{"emptyLinePlaceholder":69},[36,90864,90865,90867,90869],{"class":38,"line":377},[36,90866,3463],{"class":42},[36,90868,54148],{"class":53649},[36,90870,53656],{"class":42},[36,90872,90873,90875,90877],{"class":38,"line":617},[36,90874,54492],{"class":42},[36,90876,54161],{"class":53649},[36,90878,53656],{"class":42},[36,90880,90881,90883,90885,90887],{"class":38,"line":643},[36,90882,13599],{"class":46},[36,90884,72317],{"class":62},[36,90886,15941],{"class":46},[36,90888,2150],{"class":42},[36,90890,90891,90893,90895],{"class":38,"line":921},[36,90892,73961],{"class":42},[36,90894,90152],{"class":50},[36,90896,33820],{"class":42},[36,90898,90899,90901,90903],{"class":38,"line":934},[36,90900,73971],{"class":42},[36,90902,633],{"class":62},[36,90904,33820],{"class":42},[36,90906,90907,90909,90911,90913,90915],{"class":38,"line":939},[36,90908,90167],{"class":42},[36,90910,90170],{"class":50},[36,90912,630],{"class":42},[36,90914,90175],{"class":50},[36,90916,2244],{"class":42},[36,90918,90919],{"class":38,"line":949},[36,90920,80217],{"class":42},[36,90922,90923,90925],{"class":38,"line":962},[36,90924,90186],{"class":42},[36,90926,90189],{"class":50},[36,90928,90929],{"class":38,"line":974},[36,90930,54746],{"class":42},[36,90932,90933],{"class":38,"line":979},[36,90934,4580],{"class":42},[36,90936,90937],{"class":38,"line":994},[36,90938,90939],{"class":2621},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,90941,90942],{"class":38,"line":1006},[36,90943,90944],{"class":2621},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,90946,90947],{"class":38,"line":1011},[36,90948,90949],{"class":2621},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,90951,90952,90954,90956,90958,90961,90963,90966,90968,90970,90972,90974],{"class":38,"line":1023},[36,90953,13599],{"class":46},[36,90955,90204],{"class":62},[36,90957,15941],{"class":46},[36,90959,90960],{"class":62}," JSON",[36,90962,3113],{"class":42},[36,90964,90965],{"class":79},"parse",[36,90967,92],{"class":42},[36,90969,74009],{"class":62},[36,90971,3113],{"class":42},[36,90973,74014],{"class":79},[36,90975,74017],{"class":42},[36,90977,90978,90980,90982],{"class":38,"line":1028},[36,90979,76098],{"class":42},[36,90981,60595],{"class":79},[36,90983,90396],{"class":42},[36,90985,90986,90988,90990],{"class":38,"line":1033},[36,90987,90714],{"class":42},[36,90989,47],{"class":46},[36,90991,90992],{"class":50}," '123'\n",[36,90994,90995,90997,90999],{"class":38,"line":1053},[36,90996,76098],{"class":42},[36,90998,60595],{"class":79},[36,91000,72382],{"class":42},[36,91002,91003,91005,91007],{"class":38,"line":1064},[36,91004,54765],{"class":42},[36,91006,54161],{"class":53649},[36,91008,53656],{"class":42},[36,91010,91011,91013,91015],{"class":38,"line":1075},[36,91012,54133],{"class":42},[36,91014,54148],{"class":53649},[36,91016,53656],{"class":42},[36,91018,91019],{"class":38,"line":2291},[36,91020,70],{"emptyLinePlaceholder":69},[36,91022,91023,91025,91027],{"class":38,"line":2329},[36,91024,54133],{"class":42},[36,91026,52984],{"class":53649},[36,91028,53656],{"class":42},[19,91030,91031],{},[3879,91032],{"alt":31,"src":91033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91035,91037],{"id":91036},"_415-异常处理","4.15 异常处理",[650,91039,91040],{},[653,91041,91042],{},"throw抛异常",[19,91044,91045],{},[3879,91046],{"alt":31,"src":91047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[650,91049,91050],{"start":54},[653,91051,91052],{},"try\u002Fcatch 捕获错误信息",[19,91054,91055],{},[3879,91056],{"alt":31,"src":91057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,91059,91061],{"className":52982,"code":91060,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,91062,91063,91073,91087,91091,91099,91113,91133,91145,91153,91157,91165,91177,91185,91194,91201,91206,91225,91234,91245,91250,91260,91265,91270,91275,91292,91296,91301,91308,91320,91324,91336,91340,91344,91349,91354,91361,91369,91377,91381],{"__ignoreMap":31},[36,91064,91065,91067,91069,91071],{"class":38,"line":39},[36,91066,53646],{"class":42},[36,91068,53650],{"class":53649},[36,91070,53653],{"class":79},[36,91072,53656],{"class":42},[36,91074,91075,91077,91079,91081,91083,91085],{"class":38,"line":54},[36,91076,3463],{"class":42},[36,91078,52984],{"class":53649},[36,91080,53665],{"class":79},[36,91082,47],{"class":42},[36,91084,53670],{"class":50},[36,91086,53656],{"class":42},[36,91088,91089],{"class":38,"line":66},[36,91090,70],{"emptyLinePlaceholder":69},[36,91092,91093,91095,91097],{"class":38,"line":73},[36,91094,3463],{"class":42},[36,91096,53683],{"class":53649},[36,91098,53656],{"class":42},[36,91100,91101,91103,91105,91107,91109,91111],{"class":38,"line":86},[36,91102,54492],{"class":42},[36,91104,53693],{"class":53649},[36,91106,53696],{"class":79},[36,91108,47],{"class":42},[36,91110,53701],{"class":50},[36,91112,53656],{"class":42},[36,91114,91115,91117,91119,91121,91123,91125,91127,91129,91131],{"class":38,"line":126},[36,91116,54492],{"class":42},[36,91118,53693],{"class":53649},[36,91120,17295],{"class":79},[36,91122,47],{"class":42},[36,91124,53740],{"class":50},[36,91126,53720],{"class":79},[36,91128,47],{"class":42},[36,91130,53747],{"class":50},[36,91132,53656],{"class":42},[36,91134,91135,91137,91139,91141,91143],{"class":38,"line":131},[36,91136,54492],{"class":42},[36,91138,53756],{"class":53649},[36,91140,53759],{"class":42},[36,91142,53756],{"class":53649},[36,91144,53656],{"class":42},[36,91146,91147,91149,91151],{"class":38,"line":225},[36,91148,54133],{"class":42},[36,91150,53683],{"class":53649},[36,91152,53656],{"class":42},[36,91154,91155],{"class":38,"line":235},[36,91156,70],{"emptyLinePlaceholder":69},[36,91158,91159,91161,91163],{"class":38,"line":377},[36,91160,3463],{"class":42},[36,91162,54148],{"class":53649},[36,91164,53656],{"class":42},[36,91166,91167,91169,91171,91173,91175],{"class":38,"line":617},[36,91168,54492],{"class":42},[36,91170,19],{"class":53649},[36,91172,55842],{"class":42},[36,91174,19],{"class":53649},[36,91176,53656],{"class":42},[36,91178,91179,91181,91183],{"class":38,"line":643},[36,91180,54492],{"class":42},[36,91182,54161],{"class":53649},[36,91184,53656],{"class":42},[36,91186,91187,91189,91192],{"class":38,"line":921},[36,91188,72430],{"class":46},[36,91190,91191],{"class":79}," fn",[36,91193,13232],{"class":42},[36,91195,91196,91199],{"class":38,"line":934},[36,91197,91198],{"class":46},"      try",[36,91200,2150],{"class":42},[36,91202,91203],{"class":38,"line":939},[36,91204,91205],{"class":2621},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,91207,91208,91210,91212,91214,91216,91218,91220,91223],{"class":38,"line":949},[36,91209,63618],{"class":46},[36,91211,9206],{"class":62},[36,91213,15941],{"class":46},[36,91215,56744],{"class":42},[36,91217,56747],{"class":79},[36,91219,92],{"class":42},[36,91221,91222],{"class":50},"'.p'",[36,91224,123],{"class":42},[36,91226,91227,91230,91232],{"class":38,"line":962},[36,91228,91229],{"class":42},"        p.style.color ",[36,91231,47],{"class":46},[36,91233,69398],{"class":50},[36,91235,91236,91239,91242],{"class":38,"line":974},[36,91237,91238],{"class":42},"      } ",[36,91240,91241],{"class":46},"catch",[36,91243,91244],{"class":42}," (err) {\n",[36,91246,91247],{"class":38,"line":979},[36,91248,91249],{"class":2621},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,91251,91252,91255,91257],{"class":38,"line":994},[36,91253,91254],{"class":42},"        console.",[36,91256,60595],{"class":79},[36,91258,91259],{"class":42},"(err.message)\n",[36,91261,91262],{"class":38,"line":1006},[36,91263,91264],{"class":2621},"        \u002F\u002F 想要中断程序，需要加return\n",[36,91266,91267],{"class":38,"line":1011},[36,91268,91269],{"class":2621},"        \u002F\u002F return\n",[36,91271,91272],{"class":38,"line":1023},[36,91273,91274],{"class":2621},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,91276,91277,91280,91282,91285,91287,91290],{"class":38,"line":1028},[36,91278,91279],{"class":46},"        throw",[36,91281,13956],{"class":46},[36,91283,91284],{"class":79}," Error",[36,91286,92],{"class":42},[36,91288,91289],{"class":50},"'你看看，选择器错误了吧'",[36,91291,123],{"class":42},[36,91293,91294],{"class":38,"line":1033},[36,91295,54746],{"class":42},[36,91297,91298],{"class":38,"line":1053},[36,91299,91300],{"class":2621},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,91302,91303,91306],{"class":38,"line":1064},[36,91304,91305],{"class":46},"      finally",[36,91307,2150],{"class":42},[36,91309,91310,91313,91315,91318],{"class":38,"line":1075},[36,91311,91312],{"class":79},"        alert",[36,91314,92],{"class":42},[36,91316,91317],{"class":50},"'弹出对话框'",[36,91319,123],{"class":42},[36,91321,91322],{"class":38,"line":2291},[36,91323,54746],{"class":42},[36,91325,91326,91328,91330,91332,91334],{"class":38,"line":2329},[36,91327,60592],{"class":42},[36,91329,60595],{"class":79},[36,91331,92],{"class":42},[36,91333,3028],{"class":62},[36,91335,123],{"class":42},[36,91337,91338],{"class":38,"line":2334},[36,91339,70],{"emptyLinePlaceholder":69},[36,91341,91342],{"class":38,"line":2339},[36,91343,4580],{"class":42},[36,91345,91346],{"class":38,"line":2365},[36,91347,91348],{"class":2621},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,91350,91351],{"class":38,"line":2373},[36,91352,91353],{"class":2621},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,91355,91356,91359],{"class":38,"line":5001},[36,91357,91358],{"class":79},"    fn",[36,91360,4369],{"class":42},[36,91362,91363,91365,91367],{"class":38,"line":5006},[36,91364,54765],{"class":42},[36,91366,54161],{"class":53649},[36,91368,53656],{"class":42},[36,91370,91371,91373,91375],{"class":38,"line":10328},[36,91372,54133],{"class":42},[36,91374,54148],{"class":53649},[36,91376,53656],{"class":42},[36,91378,91379],{"class":38,"line":10352},[36,91380,70],{"emptyLinePlaceholder":69},[36,91382,91383,91385,91387],{"class":38,"line":10357},[36,91384,54133],{"class":42},[36,91386,52984],{"class":53649},[36,91388,53656],{"class":42},[19,91390,91391],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[650,91393,91394],{"start":66},[653,91395,91396],{},"debugger",[19,91398,91399],{},[3879,91400],{"alt":31,"src":91401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91403,91404],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91406,91408],{"id":91407},"_416-处理this","4.16 处理this",[1752,91410,91412],{"id":91411},"_4161-this的指向","4.16.1 this的指向",[650,91414,91415],{},[653,91416,91417],{},"普通函数的this",[19,91419,91420],{},[3879,91421],{"alt":31,"src":91422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[650,91424,91425],{"start":54},[653,91426,91427],{},"箭头函数的this",[19,91429,91430],{},[3879,91431],{"alt":31,"src":91432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91434,91435],{},[3879,91436],{"alt":31,"src":91437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91439,91440],{},[3879,91441],{"alt":31,"src":91442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1752,91444,91446],{"id":91445},"_4162-this的改变","4.16.2 this的改变",[19,91448,91449],{},"call() apply() bind()",[650,91451,91452],{},[653,91453,91454],{},"call()",[19,91456,91457],{},[3879,91458],{"alt":31,"src":91459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91461,91462],{},"两个作用：①调用函数；②改变this指向",[26,91464,91466],{"className":55415,"code":91465,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,91467,91468,91476,91484,91488,91493,91497,91502,91507,91512,91516,91521,91529],{"__ignoreMap":31},[36,91469,91470,91472,91474],{"class":38,"line":39},[36,91471,3463],{"class":42},[36,91473,54148],{"class":53649},[36,91475,53656],{"class":42},[36,91477,91478,91480,91482],{"class":38,"line":54},[36,91479,54492],{"class":42},[36,91481,54161],{"class":53649},[36,91483,53656],{"class":42},[36,91485,91486],{"class":38,"line":66},[36,91487,73868],{"class":42},[36,91489,91490],{"class":38,"line":73},[36,91491,91492],{"class":42},"      uname: 'pink'\n",[36,91494,91495],{"class":38,"line":86},[36,91496,4580],{"class":42},[36,91498,91499],{"class":38,"line":126},[36,91500,91501],{"class":42},"    function fn(x, y) {\n",[36,91503,91504],{"class":38,"line":131},[36,91505,91506],{"class":42},"      console.log(this)  \u002F\u002Fwindow\n",[36,91508,91509],{"class":38,"line":225},[36,91510,91511],{"class":42},"      console.log(x + y)\n",[36,91513,91514],{"class":38,"line":235},[36,91515,4580],{"class":42},[36,91517,91518],{"class":38,"line":377},[36,91519,91520],{"class":42},"    fn.call(obj, 1, 2)\n",[36,91522,91523,91525,91527],{"class":38,"line":617},[36,91524,54765],{"class":42},[36,91526,54161],{"class":53649},[36,91528,53656],{"class":42},[36,91530,91531,91533,91535],{"class":38,"line":643},[36,91532,54133],{"class":42},[36,91534,54148],{"class":53649},[36,91536,53656],{"class":42},[19,91538,91539],{},[3879,91540],{"alt":31,"src":91541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[650,91543,91544],{"start":54},[653,91545,91546],{},"apply()",[19,91548,91549],{},[3879,91550],{"alt":31,"src":91551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91553,91462],{},[19,91555,91556],{},"call传递的是普通参数，而apply必须传递的是数组",[26,91558,91560],{"className":52982,"code":91559,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,91561,91562,91572,91586,91590,91598,91612,91632,91644,91652,91656,91664,91672,91682,91689,91693,91698,91714,91726,91740,91744,91749,91768,91773,91777,91782,91787,91795,91800,91822,91827,91843,91859,91871,91875,91880,91899,91907,91915,91919],{"__ignoreMap":31},[36,91563,91564,91566,91568,91570],{"class":38,"line":39},[36,91565,53646],{"class":42},[36,91567,53650],{"class":53649},[36,91569,53653],{"class":79},[36,91571,53656],{"class":42},[36,91573,91574,91576,91578,91580,91582,91584],{"class":38,"line":54},[36,91575,3463],{"class":42},[36,91577,52984],{"class":53649},[36,91579,53665],{"class":79},[36,91581,47],{"class":42},[36,91583,53670],{"class":50},[36,91585,53656],{"class":42},[36,91587,91588],{"class":38,"line":66},[36,91589,70],{"emptyLinePlaceholder":69},[36,91591,91592,91594,91596],{"class":38,"line":73},[36,91593,3463],{"class":42},[36,91595,53683],{"class":53649},[36,91597,53656],{"class":42},[36,91599,91600,91602,91604,91606,91608,91610],{"class":38,"line":86},[36,91601,54492],{"class":42},[36,91603,53693],{"class":53649},[36,91605,53696],{"class":79},[36,91607,47],{"class":42},[36,91609,53701],{"class":50},[36,91611,53656],{"class":42},[36,91613,91614,91616,91618,91620,91622,91624,91626,91628,91630],{"class":38,"line":126},[36,91615,54492],{"class":42},[36,91617,53693],{"class":53649},[36,91619,17295],{"class":79},[36,91621,47],{"class":42},[36,91623,53740],{"class":50},[36,91625,53720],{"class":79},[36,91627,47],{"class":42},[36,91629,53747],{"class":50},[36,91631,53656],{"class":42},[36,91633,91634,91636,91638,91640,91642],{"class":38,"line":131},[36,91635,54492],{"class":42},[36,91637,53756],{"class":53649},[36,91639,53759],{"class":42},[36,91641,53756],{"class":53649},[36,91643,53656],{"class":42},[36,91645,91646,91648,91650],{"class":38,"line":225},[36,91647,54133],{"class":42},[36,91649,53683],{"class":53649},[36,91651,53656],{"class":42},[36,91653,91654],{"class":38,"line":235},[36,91655,70],{"emptyLinePlaceholder":69},[36,91657,91658,91660,91662],{"class":38,"line":377},[36,91659,3463],{"class":42},[36,91661,54148],{"class":53649},[36,91663,53656],{"class":42},[36,91665,91666,91668,91670],{"class":38,"line":617},[36,91667,54492],{"class":42},[36,91669,54161],{"class":53649},[36,91671,53656],{"class":42},[36,91673,91674,91676,91678,91680],{"class":38,"line":643},[36,91675,13599],{"class":46},[36,91677,72317],{"class":62},[36,91679,15941],{"class":46},[36,91681,2150],{"class":42},[36,91683,91684,91686],{"class":38,"line":921},[36,91685,73971],{"class":42},[36,91687,91688],{"class":62},"18\n",[36,91690,91691],{"class":38,"line":934},[36,91692,4580],{"class":42},[36,91694,91695],{"class":38,"line":939},[36,91696,91697],{"class":2621},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,91699,91700,91702,91704,91706,91708,91710,91712],{"class":38,"line":949},[36,91701,72430],{"class":46},[36,91703,91191],{"class":79},[36,91705,92],{"class":42},[36,91707,3374],{"class":7598},[36,91709,630],{"class":42},[36,91711,3399],{"class":7598},[36,91713,14819],{"class":42},[36,91715,91716,91718,91720,91722,91724],{"class":38,"line":962},[36,91717,60592],{"class":42},[36,91719,60595],{"class":79},[36,91721,92],{"class":42},[36,91723,89335],{"class":62},[36,91725,123],{"class":42},[36,91727,91728,91730,91732,91735,91737],{"class":38,"line":974},[36,91729,60592],{"class":42},[36,91731,60595],{"class":79},[36,91733,91734],{"class":42},"(x ",[36,91736,1885],{"class":46},[36,91738,91739],{"class":42}," y)\n",[36,91741,91742],{"class":38,"line":979},[36,91743,4580],{"class":42},[36,91745,91746],{"class":38,"line":994},[36,91747,91748],{"class":2621},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,91750,91751,91754,91757,91760,91762,91764,91766],{"class":38,"line":1006},[36,91752,91753],{"class":42},"    fn.",[36,91755,91756],{"class":79},"apply",[36,91758,91759],{"class":42},"(obj, [",[36,91761,1906],{"class":62},[36,91763,630],{"class":42},[36,91765,1911],{"class":62},[36,91767,7040],{"class":42},[36,91769,91770],{"class":38,"line":1011},[36,91771,91772],{"class":2621},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,91774,91775],{"class":38,"line":1023},[36,91776,70],{"emptyLinePlaceholder":69},[36,91778,91779],{"class":38,"line":1028},[36,91780,91781],{"class":2621},"    \u002F\u002F 使用场景：求数组最大值\n",[36,91783,91784],{"class":38,"line":1033},[36,91785,91786],{"class":2621},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,91788,91789,91792],{"class":38,"line":1053},[36,91790,91791],{"class":2621},"    \u002F\u002F console.log(max)",[36,91793,91794],{"class":2621},"   \u002F\u002F3\n",[36,91796,91797],{"class":38,"line":1064},[36,91798,91799],{"class":2621},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,91801,91802,91804,91806,91808,91810,91812,91814,91816,91818,91820],{"class":38,"line":1075},[36,91803,13599],{"class":46},[36,91805,60043],{"class":62},[36,91807,15941],{"class":46},[36,91809,54574],{"class":42},[36,91811,1070],{"class":62},[36,91813,630],{"class":42},[36,91815,3059],{"class":62},[36,91817,630],{"class":42},[36,91819,3090],{"class":62},[36,91821,35598],{"class":42},[36,91823,91824],{"class":38,"line":2291},[36,91825,91826],{"class":2621},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,91828,91829,91831,91833,91835,91838,91840],{"class":38,"line":2329},[36,91830,13599],{"class":46},[36,91832,8333],{"class":62},[36,91834,15941],{"class":46},[36,91836,91837],{"class":42}," Math.max.",[36,91839,91756],{"class":79},[36,91841,91842],{"class":42},"(Math, arr)\n",[36,91844,91845,91847,91850,91852,91855,91857],{"class":38,"line":2334},[36,91846,13599],{"class":46},[36,91848,91849],{"class":62}," min",[36,91851,15941],{"class":46},[36,91853,91854],{"class":42}," Math.min.",[36,91856,91756],{"class":79},[36,91858,91842],{"class":42},[36,91860,91861,91863,91865,91868],{"class":38,"line":2339},[36,91862,76098],{"class":42},[36,91864,60595],{"class":79},[36,91866,91867],{"class":42},"(max, min)     ",[36,91869,91870],{"class":2621},"\u002F\u002F100,4\n",[36,91872,91873],{"class":38,"line":2365},[36,91874,70],{"emptyLinePlaceholder":69},[36,91876,91877],{"class":38,"line":2373},[36,91878,91879],{"class":2621},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,91881,91882,91884,91886,91889,91891,91893,91896],{"class":38,"line":5001},[36,91883,76098],{"class":42},[36,91885,60595],{"class":79},[36,91887,91888],{"class":42},"(Max.",[36,91890,8397],{"class":79},[36,91892,92],{"class":42},[36,91894,91895],{"class":46},"...",[36,91897,91898],{"class":42},"arr))\n",[36,91900,91901,91903,91905],{"class":38,"line":5006},[36,91902,54765],{"class":42},[36,91904,54161],{"class":53649},[36,91906,53656],{"class":42},[36,91908,91909,91911,91913],{"class":38,"line":10328},[36,91910,54133],{"class":42},[36,91912,54148],{"class":53649},[36,91914,53656],{"class":42},[36,91916,91917],{"class":38,"line":10352},[36,91918,70],{"emptyLinePlaceholder":69},[36,91920,91921,91923,91925],{"class":38,"line":10357},[36,91922,54133],{"class":42},[36,91924,52984],{"class":53649},[36,91926,53656],{"class":42},[19,91928,91929],{},[3879,91930],{"alt":31,"src":91931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[650,91933,91934],{"start":66},[653,91935,91936],{},"bind()",[19,91938,91939],{},[3879,91940],{"alt":31,"src":91941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91943,91944],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91946,91947],{},"bind的语法跟call很相似",[26,91949,91951],{"className":55415,"code":91950,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,91952,91953,91961,91969,91973,91978,91982,91986,91991,91995,92000,92005,92010,92015,92020,92025,92030,92034,92042],{"__ignoreMap":31},[36,91954,91955,91957,91959],{"class":38,"line":39},[36,91956,3463],{"class":42},[36,91958,54148],{"class":53649},[36,91960,53656],{"class":42},[36,91962,91963,91965,91967],{"class":38,"line":54},[36,91964,54492],{"class":42},[36,91966,54161],{"class":53649},[36,91968,53656],{"class":42},[36,91970,91971],{"class":38,"line":66},[36,91972,73868],{"class":42},[36,91974,91975],{"class":38,"line":73},[36,91976,91977],{"class":42},"      age: 18\n",[36,91979,91980],{"class":38,"line":86},[36,91981,4580],{"class":42},[36,91983,91984],{"class":38,"line":126},[36,91985,79488],{"class":42},[36,91987,91988],{"class":38,"line":131},[36,91989,91990],{"class":42},"      console.log(this)\n",[36,91992,91993],{"class":38,"line":225},[36,91994,4580],{"class":42},[36,91996,91997],{"class":38,"line":235},[36,91998,91999],{"class":42},"    \u002F\u002F 1.bind 不会调用函数\n",[36,92001,92002],{"class":38,"line":377},[36,92003,92004],{"class":42},"    \u002F\u002F 2.bind能改变this的指向\n",[36,92006,92007],{"class":38,"line":617},[36,92008,92009],{"class":42},"    fn.bind()\n",[36,92011,92012],{"class":38,"line":643},[36,92013,92014],{"class":42},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,92016,92017],{"class":38,"line":921},[36,92018,92019],{"class":42},"    const fun = fn.bind(obj)\n",[36,92021,92022],{"class":38,"line":934},[36,92023,92024],{"class":42},"    \u002F\u002F console.log(fun)\n",[36,92026,92027],{"class":38,"line":939},[36,92028,92029],{"class":42},"    \u002F\u002F 调用,查看this的指向\n",[36,92031,92032],{"class":38,"line":949},[36,92033,54999],{"class":42},[36,92035,92036,92038,92040],{"class":38,"line":962},[36,92037,54765],{"class":42},[36,92039,54161],{"class":53649},[36,92041,53656],{"class":42},[36,92043,92044,92046,92048],{"class":38,"line":974},[36,92045,54133],{"class":42},[36,92047,54148],{"class":53649},[36,92049,53656],{"class":42},[19,92051,92052],{},[3879,92053],{"alt":31,"src":92054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[650,92056,92057],{"start":73},[653,92058,92059],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,92061,92063],{"className":55415,"code":92062,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,92064,92065,92073,92086,92094,92099,92103,92108,92113,92118,92123,92128,92133,92138,92143,92147,92155],{"__ignoreMap":31},[36,92066,92067,92069,92071],{"class":38,"line":39},[36,92068,3463],{"class":42},[36,92070,54148],{"class":53649},[36,92072,53656],{"class":42},[36,92074,92075,92077,92079,92082,92084],{"class":38,"line":54},[36,92076,54492],{"class":42},[36,92078,56235],{"class":53649},[36,92080,92081],{"class":42},">禁用\u003C\u002F",[36,92083,56235],{"class":53649},[36,92085,53656],{"class":42},[36,92087,92088,92090,92092],{"class":38,"line":66},[36,92089,54492],{"class":42},[36,92091,54161],{"class":53649},[36,92093,53656],{"class":42},[36,92095,92096],{"class":38,"line":73},[36,92097,92098],{"class":42},"    const btn = document.querySelector('button')\n",[36,92100,92101],{"class":38,"line":86},[36,92102,61364],{"class":42},[36,92104,92105],{"class":38,"line":126},[36,92106,92107],{"class":42},"      this.disabled = true\n",[36,92109,92110],{"class":38,"line":131},[36,92111,92112],{"class":42},"      \u002F\u002F 定时器是window进行调用的\n",[36,92114,92115],{"class":38,"line":225},[36,92116,92117],{"class":42},"      setTimeout(function () {\n",[36,92119,92120],{"class":38,"line":235},[36,92121,92122],{"class":42},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,92124,92125],{"class":38,"line":377},[36,92126,92127],{"class":42},"        this.disabled = false\n",[36,92129,92130],{"class":38,"line":617},[36,92131,92132],{"class":42},"      }.bind(this), 2000)\n",[36,92134,92135],{"class":38,"line":643},[36,92136,92137],{"class":42},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,92139,92140],{"class":38,"line":921},[36,92141,92142],{"class":42},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,92144,92145],{"class":38,"line":934},[36,92146,35813],{"class":42},[36,92148,92149,92151,92153],{"class":38,"line":939},[36,92150,54765],{"class":42},[36,92152,54161],{"class":53649},[36,92154,53656],{"class":42},[36,92156,92157,92159,92161],{"class":38,"line":949},[36,92158,54133],{"class":42},[36,92160,54148],{"class":53649},[36,92162,53656],{"class":42},[650,92164,92165],{"start":86},[653,92166,24323],{},[19,92168,92169],{},[3879,92170],{"alt":31,"src":92171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92173,92175],{"id":92174},"_417-性能优化","4.17 性能优化",[1752,92177,92179],{"id":92178},"_4171-防抖","4.17.1 防抖",[19,92181,92182],{},[3879,92183],{"alt":31,"src":92184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92186,92187],{},[667,92188,92189],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92191,92192],{},"防抖实现方式：",[3557,92194,92195],{},[653,92196,92197],{},"lodash 提供了防抖处理",[19,92199,92200],{},"_.debounce(func,[wait=0],[options={}])",[19,92202,92203],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,92205,92207],{"className":52982,"code":92206,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,92208,92209,92219,92233,92237,92245,92259,92279,92291,92299,92305,92315,92327,92339,92350,92362,92372,92382,92395,92399,92407,92415,92419,92427,92445,92463,92471,92490,92500,92509,92520,92525,92529,92534,92539,92544,92569,92577,92585,92589],{"__ignoreMap":31},[36,92210,92211,92213,92215,92217],{"class":38,"line":39},[36,92212,53646],{"class":42},[36,92214,53650],{"class":53649},[36,92216,53653],{"class":79},[36,92218,53656],{"class":42},[36,92220,92221,92223,92225,92227,92229,92231],{"class":38,"line":54},[36,92222,3463],{"class":42},[36,92224,52984],{"class":53649},[36,92226,53665],{"class":79},[36,92228,47],{"class":42},[36,92230,53670],{"class":50},[36,92232,53656],{"class":42},[36,92234,92235],{"class":38,"line":66},[36,92236,70],{"emptyLinePlaceholder":69},[36,92238,92239,92241,92243],{"class":38,"line":73},[36,92240,3463],{"class":42},[36,92242,53683],{"class":53649},[36,92244,53656],{"class":42},[36,92246,92247,92249,92251,92253,92255,92257],{"class":38,"line":86},[36,92248,54492],{"class":42},[36,92250,53693],{"class":53649},[36,92252,53696],{"class":79},[36,92254,47],{"class":42},[36,92256,53701],{"class":50},[36,92258,53656],{"class":42},[36,92260,92261,92263,92265,92267,92269,92271,92273,92275,92277],{"class":38,"line":126},[36,92262,54492],{"class":42},[36,92264,53693],{"class":53649},[36,92266,17295],{"class":79},[36,92268,47],{"class":42},[36,92270,53740],{"class":50},[36,92272,53720],{"class":79},[36,92274,47],{"class":42},[36,92276,53747],{"class":50},[36,92278,53656],{"class":42},[36,92280,92281,92283,92285,92287,92289],{"class":38,"line":131},[36,92282,54492],{"class":42},[36,92284,53756],{"class":53649},[36,92286,53759],{"class":42},[36,92288,53756],{"class":53649},[36,92290,53656],{"class":42},[36,92292,92293,92295,92297],{"class":38,"line":225},[36,92294,54492],{"class":42},[36,92296,2467],{"class":53649},[36,92298,53656],{"class":42},[36,92300,92301,92303],{"class":38,"line":235},[36,92302,57100],{"class":79},[36,92304,2150],{"class":42},[36,92306,92307,92309,92311,92313],{"class":38,"line":377},[36,92308,74941],{"class":62},[36,92310,2158],{"class":42},[36,92312,62853],{"class":62},[36,92314,3711],{"class":42},[36,92316,92317,92319,92321,92323,92325],{"class":38,"line":617},[36,92318,57119],{"class":62},[36,92320,2158],{"class":42},[36,92322,1059],{"class":62},[36,92324,53840],{"class":46},[36,92326,3711],{"class":42},[36,92328,92329,92331,92333,92335,92337],{"class":38,"line":643},[36,92330,57133],{"class":62},[36,92332,2158],{"class":42},[36,92334,1059],{"class":62},[36,92336,53840],{"class":46},[36,92338,3711],{"class":42},[36,92340,92341,92343,92345,92348],{"class":38,"line":921},[36,92342,57232],{"class":62},[36,92344,2158],{"class":42},[36,92346,92347],{"class":62},"gray",[36,92349,3711],{"class":42},[36,92351,92352,92354,92356,92358,92360],{"class":38,"line":934},[36,92353,57270],{"class":62},[36,92355,2158],{"class":42},[36,92357,3379],{"class":62},[36,92359,53840],{"class":46},[36,92361,3711],{"class":42},[36,92363,92364,92366,92368,92370],{"class":38,"line":939},[36,92365,59764],{"class":62},[36,92367,2158],{"class":42},[36,92369,63190],{"class":62},[36,92371,3711],{"class":42},[36,92373,92374,92376,92378,92380],{"class":38,"line":949},[36,92375,59634],{"class":62},[36,92377,2158],{"class":42},[36,92379,53940],{"class":62},[36,92381,3711],{"class":42},[36,92383,92384,92387,92389,92391,92393],{"class":38,"line":962},[36,92385,92386],{"class":62},"      padding-top",[36,92388,2158],{"class":42},[36,92390,2875],{"class":62},[36,92392,53840],{"class":46},[36,92394,3711],{"class":42},[36,92396,92397],{"class":38,"line":974},[36,92398,4580],{"class":42},[36,92400,92401,92403,92405],{"class":38,"line":979},[36,92402,54765],{"class":42},[36,92404,2467],{"class":53649},[36,92406,53656],{"class":42},[36,92408,92409,92411,92413],{"class":38,"line":994},[36,92410,54133],{"class":42},[36,92412,53683],{"class":53649},[36,92414,53656],{"class":42},[36,92416,92417],{"class":38,"line":1006},[36,92418,70],{"emptyLinePlaceholder":69},[36,92420,92421,92423,92425],{"class":38,"line":1011},[36,92422,3463],{"class":42},[36,92424,54148],{"class":53649},[36,92426,53656],{"class":42},[36,92428,92429,92431,92433,92435,92437,92439,92441,92443],{"class":38,"line":1023},[36,92430,54492],{"class":42},[36,92432,53959],{"class":53649},[36,92434,55834],{"class":79},[36,92436,47],{"class":42},[36,92438,55839],{"class":50},[36,92440,57662],{"class":42},[36,92442,53959],{"class":53649},[36,92444,53656],{"class":42},[36,92446,92447,92449,92451,92453,92455,92457,92459,92461],{"class":38,"line":1028},[36,92448,54492],{"class":42},[36,92450,54161],{"class":53649},[36,92452,57587],{"class":79},[36,92454,47],{"class":42},[36,92456,90615],{"class":50},[36,92458,57662],{"class":42},[36,92460,54161],{"class":53649},[36,92462,53656],{"class":42},[36,92464,92465,92467,92469],{"class":38,"line":1033},[36,92466,54492],{"class":42},[36,92468,54161],{"class":53649},[36,92470,53656],{"class":42},[36,92472,92473,92475,92477,92479,92481,92483,92485,92488],{"class":38,"line":1053},[36,92474,13599],{"class":46},[36,92476,89275],{"class":62},[36,92478,15941],{"class":46},[36,92480,56744],{"class":42},[36,92482,56747],{"class":79},[36,92484,92],{"class":42},[36,92486,92487],{"class":50},"'.box'",[36,92489,123],{"class":42},[36,92491,92492,92494,92496,92498],{"class":38,"line":1064},[36,92493,54567],{"class":46},[36,92495,11818],{"class":42},[36,92497,47],{"class":46},[36,92499,49682],{"class":62},[36,92501,92502,92504,92507],{"class":38,"line":1075},[36,92503,72430],{"class":46},[36,92505,92506],{"class":79}," mouseMove",[36,92508,13232],{"class":42},[36,92510,92511,92514,92516,92518],{"class":38,"line":2291},[36,92512,92513],{"class":42},"      box.innerHTML ",[36,92515,47],{"class":46},[36,92517,5417],{"class":42},[36,92519,5087],{"class":46},[36,92521,92522],{"class":38,"line":2329},[36,92523,92524],{"class":2621},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,92526,92527],{"class":38,"line":2334},[36,92528,4580],{"class":42},[36,92530,92531],{"class":38,"line":2339},[36,92532,92533],{"class":2621},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,92535,92536],{"class":38,"line":2365},[36,92537,92538],{"class":2621},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,92540,92541],{"class":38,"line":2373},[36,92542,92543],{"class":2621},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,92545,92546,92549,92551,92553,92556,92559,92562,92565,92567],{"class":38,"line":5001},[36,92547,92548],{"class":42},"    box.",[36,92550,60161],{"class":79},[36,92552,92],{"class":42},[36,92554,92555],{"class":50},"'mousemove'",[36,92557,92558],{"class":42},", _.",[36,92560,92561],{"class":79},"debounce",[36,92563,92564],{"class":42},"(mouseMove, ",[36,92566,67421],{"class":62},[36,92568,1914],{"class":42},[36,92570,92571,92573,92575],{"class":38,"line":5006},[36,92572,54765],{"class":42},[36,92574,54161],{"class":53649},[36,92576,53656],{"class":42},[36,92578,92579,92581,92583],{"class":38,"line":10328},[36,92580,54133],{"class":42},[36,92582,54148],{"class":53649},[36,92584,53656],{"class":42},[36,92586,92587],{"class":38,"line":10352},[36,92588,70],{"emptyLinePlaceholder":69},[36,92590,92591,92593,92595],{"class":38,"line":10357},[36,92592,54133],{"class":42},[36,92594,52984],{"class":53649},[36,92596,53656],{"class":42},[3557,92598,92599],{},[653,92600,92601],{},"手写一个防抖函数来处理",[19,92603,92604],{},"防抖的核心就是利用定时器来实现的：",[19,92606,92607],{},"①声明一个定时器变量",[19,92609,92610],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92612,92613],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,92615,92617],{"className":52982,"code":92616,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,92618,92619,92629,92643,92647,92655,92669,92689,92701,92709,92715,92725,92737,92749,92759,92771,92781,92791,92803,92807,92815,92823,92827,92835,92853,92871,92879,92897,92907,92915,92925,92929,92933,92937,92942,92947,92952,92957,92962,92967,92985,92992,92997,93005,93010,93023,93039,93049,93054,93058,93062,93082,93086,93091,93096,93101,93106,93114,93122,93126],{"__ignoreMap":31},[36,92620,92621,92623,92625,92627],{"class":38,"line":39},[36,92622,53646],{"class":42},[36,92624,53650],{"class":53649},[36,92626,53653],{"class":79},[36,92628,53656],{"class":42},[36,92630,92631,92633,92635,92637,92639,92641],{"class":38,"line":54},[36,92632,3463],{"class":42},[36,92634,52984],{"class":53649},[36,92636,53665],{"class":79},[36,92638,47],{"class":42},[36,92640,53670],{"class":50},[36,92642,53656],{"class":42},[36,92644,92645],{"class":38,"line":66},[36,92646,70],{"emptyLinePlaceholder":69},[36,92648,92649,92651,92653],{"class":38,"line":73},[36,92650,3463],{"class":42},[36,92652,53683],{"class":53649},[36,92654,53656],{"class":42},[36,92656,92657,92659,92661,92663,92665,92667],{"class":38,"line":86},[36,92658,54492],{"class":42},[36,92660,53693],{"class":53649},[36,92662,53696],{"class":79},[36,92664,47],{"class":42},[36,92666,53701],{"class":50},[36,92668,53656],{"class":42},[36,92670,92671,92673,92675,92677,92679,92681,92683,92685,92687],{"class":38,"line":126},[36,92672,54492],{"class":42},[36,92674,53693],{"class":53649},[36,92676,17295],{"class":79},[36,92678,47],{"class":42},[36,92680,53740],{"class":50},[36,92682,53720],{"class":79},[36,92684,47],{"class":42},[36,92686,53747],{"class":50},[36,92688,53656],{"class":42},[36,92690,92691,92693,92695,92697,92699],{"class":38,"line":131},[36,92692,54492],{"class":42},[36,92694,53756],{"class":53649},[36,92696,53759],{"class":42},[36,92698,53756],{"class":53649},[36,92700,53656],{"class":42},[36,92702,92703,92705,92707],{"class":38,"line":225},[36,92704,54492],{"class":42},[36,92706,2467],{"class":53649},[36,92708,53656],{"class":42},[36,92710,92711,92713],{"class":38,"line":235},[36,92712,57100],{"class":79},[36,92714,2150],{"class":42},[36,92716,92717,92719,92721,92723],{"class":38,"line":377},[36,92718,74941],{"class":62},[36,92720,2158],{"class":42},[36,92722,62853],{"class":62},[36,92724,3711],{"class":42},[36,92726,92727,92729,92731,92733,92735],{"class":38,"line":617},[36,92728,57119],{"class":62},[36,92730,2158],{"class":42},[36,92732,1059],{"class":62},[36,92734,53840],{"class":46},[36,92736,3711],{"class":42},[36,92738,92739,92741,92743,92745,92747],{"class":38,"line":643},[36,92740,57133],{"class":62},[36,92742,2158],{"class":42},[36,92744,1059],{"class":62},[36,92746,53840],{"class":46},[36,92748,3711],{"class":42},[36,92750,92751,92753,92755,92757],{"class":38,"line":921},[36,92752,57232],{"class":62},[36,92754,2158],{"class":42},[36,92756,92347],{"class":62},[36,92758,3711],{"class":42},[36,92760,92761,92763,92765,92767,92769],{"class":38,"line":934},[36,92762,57270],{"class":62},[36,92764,2158],{"class":42},[36,92766,3379],{"class":62},[36,92768,53840],{"class":46},[36,92770,3711],{"class":42},[36,92772,92773,92775,92777,92779],{"class":38,"line":939},[36,92774,59764],{"class":62},[36,92776,2158],{"class":42},[36,92778,63190],{"class":62},[36,92780,3711],{"class":42},[36,92782,92783,92785,92787,92789],{"class":38,"line":949},[36,92784,59634],{"class":62},[36,92786,2158],{"class":42},[36,92788,53940],{"class":62},[36,92790,3711],{"class":42},[36,92792,92793,92795,92797,92799,92801],{"class":38,"line":962},[36,92794,92386],{"class":62},[36,92796,2158],{"class":42},[36,92798,2875],{"class":62},[36,92800,53840],{"class":46},[36,92802,3711],{"class":42},[36,92804,92805],{"class":38,"line":974},[36,92806,4580],{"class":42},[36,92808,92809,92811,92813],{"class":38,"line":979},[36,92810,54765],{"class":42},[36,92812,2467],{"class":53649},[36,92814,53656],{"class":42},[36,92816,92817,92819,92821],{"class":38,"line":994},[36,92818,54133],{"class":42},[36,92820,53683],{"class":53649},[36,92822,53656],{"class":42},[36,92824,92825],{"class":38,"line":1006},[36,92826,70],{"emptyLinePlaceholder":69},[36,92828,92829,92831,92833],{"class":38,"line":1011},[36,92830,3463],{"class":42},[36,92832,54148],{"class":53649},[36,92834,53656],{"class":42},[36,92836,92837,92839,92841,92843,92845,92847,92849,92851],{"class":38,"line":1023},[36,92838,54492],{"class":42},[36,92840,53959],{"class":53649},[36,92842,55834],{"class":79},[36,92844,47],{"class":42},[36,92846,55839],{"class":50},[36,92848,57662],{"class":42},[36,92850,53959],{"class":53649},[36,92852,53656],{"class":42},[36,92854,92855,92857,92859,92861,92863,92865,92867,92869],{"class":38,"line":1028},[36,92856,54492],{"class":42},[36,92858,54161],{"class":53649},[36,92860,57587],{"class":79},[36,92862,47],{"class":42},[36,92864,90615],{"class":50},[36,92866,57662],{"class":42},[36,92868,54161],{"class":53649},[36,92870,53656],{"class":42},[36,92872,92873,92875,92877],{"class":38,"line":1033},[36,92874,54492],{"class":42},[36,92876,54161],{"class":53649},[36,92878,53656],{"class":42},[36,92880,92881,92883,92885,92887,92889,92891,92893,92895],{"class":38,"line":1053},[36,92882,13599],{"class":46},[36,92884,89275],{"class":62},[36,92886,15941],{"class":46},[36,92888,56744],{"class":42},[36,92890,56747],{"class":79},[36,92892,92],{"class":42},[36,92894,92487],{"class":50},[36,92896,123],{"class":42},[36,92898,92899,92901,92903,92905],{"class":38,"line":1064},[36,92900,54567],{"class":46},[36,92902,11818],{"class":42},[36,92904,47],{"class":46},[36,92906,49682],{"class":62},[36,92908,92909,92911,92913],{"class":38,"line":1075},[36,92910,72430],{"class":46},[36,92912,92506],{"class":79},[36,92914,13232],{"class":42},[36,92916,92917,92919,92921,92923],{"class":38,"line":2291},[36,92918,92513],{"class":42},[36,92920,47],{"class":46},[36,92922,5417],{"class":42},[36,92924,5087],{"class":46},[36,92926,92927],{"class":38,"line":2329},[36,92928,92524],{"class":2621},[36,92930,92931],{"class":38,"line":2334},[36,92932,4580],{"class":42},[36,92934,92935],{"class":38,"line":2339},[36,92936,92533],{"class":2621},[36,92938,92939],{"class":38,"line":2365},[36,92940,92941],{"class":2621},"    \u002F\u002F 手写防抖函数\n",[36,92943,92944],{"class":38,"line":2373},[36,92945,92946],{"class":2621},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,92948,92949],{"class":38,"line":5001},[36,92950,92951],{"class":2621},"    \u002F\u002F 1.声明定时器变量\n",[36,92953,92954],{"class":38,"line":5006},[36,92955,92956],{"class":2621},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,92958,92959],{"class":38,"line":10328},[36,92960,92961],{"class":2621},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,92963,92964],{"class":38,"line":10352},[36,92965,92966],{"class":2621},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,92968,92969,92971,92974,92976,92979,92981,92983],{"class":38,"line":10357},[36,92970,72430],{"class":46},[36,92972,92973],{"class":79}," debounce",[36,92975,92],{"class":42},[36,92977,92978],{"class":7598},"fn",[36,92980,630],{"class":42},[36,92982,3274],{"class":7598},[36,92984,14819],{"class":42},[36,92986,92987,92989],{"class":38,"line":10363},[36,92988,82117],{"class":46},[36,92990,92991],{"class":42}," timer\n",[36,92993,92994],{"class":38,"line":10390},[36,92995,92996],{"class":2621},"      \u002F\u002F return 返回一个匿名函数\n",[36,92998,92999,93001,93003],{"class":38,"line":10395},[36,93000,76327],{"class":46},[36,93002,61266],{"class":46},[36,93004,56800],{"class":42},[36,93006,93007],{"class":38,"line":10401},[36,93008,93009],{"class":2621},"        \u002F\u002F 这里边写第二三四步\n",[36,93011,93012,93014,93017,93020],{"class":38,"line":10413},[36,93013,890],{"class":46},[36,93015,93016],{"class":42}," (timer) ",[36,93018,93019],{"class":79},"clearTimeout",[36,93021,93022],{"class":42},"(timer)\n",[36,93024,93025,93028,93030,93033,93035,93037],{"class":38,"line":10425},[36,93026,93027],{"class":42},"        timer ",[36,93029,47],{"class":46},[36,93031,93032],{"class":79}," setTimeout",[36,93034,92],{"class":42},[36,93036,56797],{"class":46},[36,93038,56800],{"class":42},[36,93040,93041,93044,93046],{"class":38,"line":10437},[36,93042,93043],{"class":79},"          fn",[36,93045,15427],{"class":42},[36,93047,93048],{"class":2621},"\u002F\u002F加小括号调用fn }, t)\n",[36,93050,93051],{"class":38,"line":12095},[36,93052,93053],{"class":42},"        }, t)\n",[36,93055,93056],{"class":38,"line":12120},[36,93057,54746],{"class":42},[36,93059,93060],{"class":38,"line":12143},[36,93061,4580],{"class":42},[36,93063,93064,93066,93068,93070,93072,93074,93076,93078,93080],{"class":38,"line":12167},[36,93065,92548],{"class":42},[36,93067,60161],{"class":79},[36,93069,92],{"class":42},[36,93071,92555],{"class":50},[36,93073,630],{"class":42},[36,93075,92561],{"class":79},[36,93077,92564],{"class":42},[36,93079,67421],{"class":62},[36,93081,1914],{"class":42},[36,93083,93084],{"class":38,"line":12172},[36,93085,70],{"emptyLinePlaceholder":69},[36,93087,93088],{"class":38,"line":12177},[36,93089,93090],{"class":2621},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,93092,93093],{"class":38,"line":12182},[36,93094,93095],{"class":2621},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,93097,93098],{"class":38,"line":12191},[36,93099,93100],{"class":2621},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,93102,93103],{"class":38,"line":12196},[36,93104,93105],{"class":2621},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,93107,93108,93110,93112],{"class":38,"line":12202},[36,93109,54765],{"class":42},[36,93111,54161],{"class":53649},[36,93113,53656],{"class":42},[36,93115,93116,93118,93120],{"class":38,"line":12223},[36,93117,54133],{"class":42},[36,93119,54148],{"class":53649},[36,93121,53656],{"class":42},[36,93123,93124],{"class":38,"line":12229},[36,93125,70],{"emptyLinePlaceholder":69},[36,93127,93128,93130,93132],{"class":38,"line":12243},[36,93129,54133],{"class":42},[36,93131,52984],{"class":53649},[36,93133,53656],{"class":42},[1752,93135,93137],{"id":93136},"_4172-节流","4.17.2 节流",[19,93139,93140],{},[3879,93141],{"alt":31,"src":93142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93144,93145],{},[3879,93146],{"alt":31,"src":93147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93149,93150],{},[667,93151,93152],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93154,93155],{},"实现方式：",[3557,93157,93158],{},[653,93159,93160],{},"lodash 提供的节流函数来处理",[19,93162,93163],{},"_.throttle(func,[wait=0],[options=])",[19,93165,93166],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,93168,93170],{"className":52982,"code":93169,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,93171,93172,93182,93196,93200,93208,93222,93242,93254,93262,93268,93278,93290,93302,93312,93324,93334,93344,93356,93360,93368,93376,93380,93388,93406,93424,93432,93450,93460,93468,93478,93482,93486,93490,93495,93500,93521,93529,93537,93541],{"__ignoreMap":31},[36,93173,93174,93176,93178,93180],{"class":38,"line":39},[36,93175,53646],{"class":42},[36,93177,53650],{"class":53649},[36,93179,53653],{"class":79},[36,93181,53656],{"class":42},[36,93183,93184,93186,93188,93190,93192,93194],{"class":38,"line":54},[36,93185,3463],{"class":42},[36,93187,52984],{"class":53649},[36,93189,53665],{"class":79},[36,93191,47],{"class":42},[36,93193,53670],{"class":50},[36,93195,53656],{"class":42},[36,93197,93198],{"class":38,"line":66},[36,93199,70],{"emptyLinePlaceholder":69},[36,93201,93202,93204,93206],{"class":38,"line":73},[36,93203,3463],{"class":42},[36,93205,53683],{"class":53649},[36,93207,53656],{"class":42},[36,93209,93210,93212,93214,93216,93218,93220],{"class":38,"line":86},[36,93211,54492],{"class":42},[36,93213,53693],{"class":53649},[36,93215,53696],{"class":79},[36,93217,47],{"class":42},[36,93219,53701],{"class":50},[36,93221,53656],{"class":42},[36,93223,93224,93226,93228,93230,93232,93234,93236,93238,93240],{"class":38,"line":126},[36,93225,54492],{"class":42},[36,93227,53693],{"class":53649},[36,93229,17295],{"class":79},[36,93231,47],{"class":42},[36,93233,53740],{"class":50},[36,93235,53720],{"class":79},[36,93237,47],{"class":42},[36,93239,53747],{"class":50},[36,93241,53656],{"class":42},[36,93243,93244,93246,93248,93250,93252],{"class":38,"line":131},[36,93245,54492],{"class":42},[36,93247,53756],{"class":53649},[36,93249,53759],{"class":42},[36,93251,53756],{"class":53649},[36,93253,53656],{"class":42},[36,93255,93256,93258,93260],{"class":38,"line":225},[36,93257,54492],{"class":42},[36,93259,2467],{"class":53649},[36,93261,53656],{"class":42},[36,93263,93264,93266],{"class":38,"line":235},[36,93265,57100],{"class":79},[36,93267,2150],{"class":42},[36,93269,93270,93272,93274,93276],{"class":38,"line":377},[36,93271,74941],{"class":62},[36,93273,2158],{"class":42},[36,93275,62853],{"class":62},[36,93277,3711],{"class":42},[36,93279,93280,93282,93284,93286,93288],{"class":38,"line":617},[36,93281,57119],{"class":62},[36,93283,2158],{"class":42},[36,93285,1059],{"class":62},[36,93287,53840],{"class":46},[36,93289,3711],{"class":42},[36,93291,93292,93294,93296,93298,93300],{"class":38,"line":643},[36,93293,57133],{"class":62},[36,93295,2158],{"class":42},[36,93297,1059],{"class":62},[36,93299,53840],{"class":46},[36,93301,3711],{"class":42},[36,93303,93304,93306,93308,93310],{"class":38,"line":921},[36,93305,57232],{"class":62},[36,93307,2158],{"class":42},[36,93309,92347],{"class":62},[36,93311,3711],{"class":42},[36,93313,93314,93316,93318,93320,93322],{"class":38,"line":934},[36,93315,57270],{"class":62},[36,93317,2158],{"class":42},[36,93319,3379],{"class":62},[36,93321,53840],{"class":46},[36,93323,3711],{"class":42},[36,93325,93326,93328,93330,93332],{"class":38,"line":939},[36,93327,59764],{"class":62},[36,93329,2158],{"class":42},[36,93331,63190],{"class":62},[36,93333,3711],{"class":42},[36,93335,93336,93338,93340,93342],{"class":38,"line":949},[36,93337,59634],{"class":62},[36,93339,2158],{"class":42},[36,93341,53940],{"class":62},[36,93343,3711],{"class":42},[36,93345,93346,93348,93350,93352,93354],{"class":38,"line":962},[36,93347,92386],{"class":62},[36,93349,2158],{"class":42},[36,93351,2875],{"class":62},[36,93353,53840],{"class":46},[36,93355,3711],{"class":42},[36,93357,93358],{"class":38,"line":974},[36,93359,4580],{"class":42},[36,93361,93362,93364,93366],{"class":38,"line":979},[36,93363,54765],{"class":42},[36,93365,2467],{"class":53649},[36,93367,53656],{"class":42},[36,93369,93370,93372,93374],{"class":38,"line":994},[36,93371,54133],{"class":42},[36,93373,53683],{"class":53649},[36,93375,53656],{"class":42},[36,93377,93378],{"class":38,"line":1006},[36,93379,70],{"emptyLinePlaceholder":69},[36,93381,93382,93384,93386],{"class":38,"line":1011},[36,93383,3463],{"class":42},[36,93385,54148],{"class":53649},[36,93387,53656],{"class":42},[36,93389,93390,93392,93394,93396,93398,93400,93402,93404],{"class":38,"line":1023},[36,93391,54492],{"class":42},[36,93393,53959],{"class":53649},[36,93395,55834],{"class":79},[36,93397,47],{"class":42},[36,93399,55839],{"class":50},[36,93401,57662],{"class":42},[36,93403,53959],{"class":53649},[36,93405,53656],{"class":42},[36,93407,93408,93410,93412,93414,93416,93418,93420,93422],{"class":38,"line":1028},[36,93409,54492],{"class":42},[36,93411,54161],{"class":53649},[36,93413,57587],{"class":79},[36,93415,47],{"class":42},[36,93417,90615],{"class":50},[36,93419,57662],{"class":42},[36,93421,54161],{"class":53649},[36,93423,53656],{"class":42},[36,93425,93426,93428,93430],{"class":38,"line":1033},[36,93427,54492],{"class":42},[36,93429,54161],{"class":53649},[36,93431,53656],{"class":42},[36,93433,93434,93436,93438,93440,93442,93444,93446,93448],{"class":38,"line":1053},[36,93435,13599],{"class":46},[36,93437,89275],{"class":62},[36,93439,15941],{"class":46},[36,93441,56744],{"class":42},[36,93443,56747],{"class":79},[36,93445,92],{"class":42},[36,93447,92487],{"class":50},[36,93449,123],{"class":42},[36,93451,93452,93454,93456,93458],{"class":38,"line":1064},[36,93453,54567],{"class":46},[36,93455,11818],{"class":42},[36,93457,47],{"class":46},[36,93459,49682],{"class":62},[36,93461,93462,93464,93466],{"class":38,"line":1075},[36,93463,72430],{"class":46},[36,93465,92506],{"class":79},[36,93467,13232],{"class":42},[36,93469,93470,93472,93474,93476],{"class":38,"line":2291},[36,93471,92513],{"class":42},[36,93473,47],{"class":46},[36,93475,5417],{"class":42},[36,93477,5087],{"class":46},[36,93479,93480],{"class":38,"line":2329},[36,93481,92524],{"class":2621},[36,93483,93484],{"class":38,"line":2334},[36,93485,4580],{"class":42},[36,93487,93488],{"class":38,"line":2339},[36,93489,92533],{"class":2621},[36,93491,93492],{"class":38,"line":2365},[36,93493,93494],{"class":2621},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,93496,93497],{"class":38,"line":2373},[36,93498,93499],{"class":2621},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,93501,93502,93504,93506,93508,93510,93512,93515,93517,93519],{"class":38,"line":5001},[36,93503,92548],{"class":42},[36,93505,60161],{"class":79},[36,93507,92],{"class":42},[36,93509,92555],{"class":50},[36,93511,92558],{"class":42},[36,93513,93514],{"class":79},"throttle",[36,93516,92564],{"class":42},[36,93518,67421],{"class":62},[36,93520,1914],{"class":42},[36,93522,93523,93525,93527],{"class":38,"line":5006},[36,93524,54765],{"class":42},[36,93526,54161],{"class":53649},[36,93528,53656],{"class":42},[36,93530,93531,93533,93535],{"class":38,"line":10328},[36,93532,54133],{"class":42},[36,93534,54148],{"class":53649},[36,93536,53656],{"class":42},[36,93538,93539],{"class":38,"line":10352},[36,93540,70],{"emptyLinePlaceholder":69},[36,93542,93543,93545,93547],{"class":38,"line":10357},[36,93544,54133],{"class":42},[36,93546,52984],{"class":53649},[36,93548,53656],{"class":42},[3557,93550,93551],{},[653,93552,93553],{},"手写一个节流函数来处理",[19,93555,73297],{},[19,93557,92607],{},[19,93559,93560],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93562,93563],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,93565,93567],{"className":52982,"code":93566,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,93568,93569,93579,93593,93597,93605,93619,93639,93651,93659,93665,93675,93687,93699,93709,93721,93731,93741,93753,93757,93765,93773,93777,93785,93803,93821,93829,93847,93857,93865,93875,93879,93883,93887,93892,93897,93902,93907,93912,93917,93934,93940,93948,93959,93974,93981,93986,93991,94001,94006,94011,94016,94020,94024,94028,94048,94056,94064,94068],{"__ignoreMap":31},[36,93570,93571,93573,93575,93577],{"class":38,"line":39},[36,93572,53646],{"class":42},[36,93574,53650],{"class":53649},[36,93576,53653],{"class":79},[36,93578,53656],{"class":42},[36,93580,93581,93583,93585,93587,93589,93591],{"class":38,"line":54},[36,93582,3463],{"class":42},[36,93584,52984],{"class":53649},[36,93586,53665],{"class":79},[36,93588,47],{"class":42},[36,93590,53670],{"class":50},[36,93592,53656],{"class":42},[36,93594,93595],{"class":38,"line":66},[36,93596,70],{"emptyLinePlaceholder":69},[36,93598,93599,93601,93603],{"class":38,"line":73},[36,93600,3463],{"class":42},[36,93602,53683],{"class":53649},[36,93604,53656],{"class":42},[36,93606,93607,93609,93611,93613,93615,93617],{"class":38,"line":86},[36,93608,54492],{"class":42},[36,93610,53693],{"class":53649},[36,93612,53696],{"class":79},[36,93614,47],{"class":42},[36,93616,53701],{"class":50},[36,93618,53656],{"class":42},[36,93620,93621,93623,93625,93627,93629,93631,93633,93635,93637],{"class":38,"line":126},[36,93622,54492],{"class":42},[36,93624,53693],{"class":53649},[36,93626,17295],{"class":79},[36,93628,47],{"class":42},[36,93630,53740],{"class":50},[36,93632,53720],{"class":79},[36,93634,47],{"class":42},[36,93636,53747],{"class":50},[36,93638,53656],{"class":42},[36,93640,93641,93643,93645,93647,93649],{"class":38,"line":131},[36,93642,54492],{"class":42},[36,93644,53756],{"class":53649},[36,93646,53759],{"class":42},[36,93648,53756],{"class":53649},[36,93650,53656],{"class":42},[36,93652,93653,93655,93657],{"class":38,"line":225},[36,93654,54492],{"class":42},[36,93656,2467],{"class":53649},[36,93658,53656],{"class":42},[36,93660,93661,93663],{"class":38,"line":235},[36,93662,57100],{"class":79},[36,93664,2150],{"class":42},[36,93666,93667,93669,93671,93673],{"class":38,"line":377},[36,93668,74941],{"class":62},[36,93670,2158],{"class":42},[36,93672,62853],{"class":62},[36,93674,3711],{"class":42},[36,93676,93677,93679,93681,93683,93685],{"class":38,"line":617},[36,93678,57119],{"class":62},[36,93680,2158],{"class":42},[36,93682,1059],{"class":62},[36,93684,53840],{"class":46},[36,93686,3711],{"class":42},[36,93688,93689,93691,93693,93695,93697],{"class":38,"line":643},[36,93690,57133],{"class":62},[36,93692,2158],{"class":42},[36,93694,1059],{"class":62},[36,93696,53840],{"class":46},[36,93698,3711],{"class":42},[36,93700,93701,93703,93705,93707],{"class":38,"line":921},[36,93702,57232],{"class":62},[36,93704,2158],{"class":42},[36,93706,92347],{"class":62},[36,93708,3711],{"class":42},[36,93710,93711,93713,93715,93717,93719],{"class":38,"line":934},[36,93712,57270],{"class":62},[36,93714,2158],{"class":42},[36,93716,3379],{"class":62},[36,93718,53840],{"class":46},[36,93720,3711],{"class":42},[36,93722,93723,93725,93727,93729],{"class":38,"line":939},[36,93724,59764],{"class":62},[36,93726,2158],{"class":42},[36,93728,63190],{"class":62},[36,93730,3711],{"class":42},[36,93732,93733,93735,93737,93739],{"class":38,"line":949},[36,93734,59634],{"class":62},[36,93736,2158],{"class":42},[36,93738,53940],{"class":62},[36,93740,3711],{"class":42},[36,93742,93743,93745,93747,93749,93751],{"class":38,"line":962},[36,93744,92386],{"class":62},[36,93746,2158],{"class":42},[36,93748,2875],{"class":62},[36,93750,53840],{"class":46},[36,93752,3711],{"class":42},[36,93754,93755],{"class":38,"line":974},[36,93756,4580],{"class":42},[36,93758,93759,93761,93763],{"class":38,"line":979},[36,93760,54765],{"class":42},[36,93762,2467],{"class":53649},[36,93764,53656],{"class":42},[36,93766,93767,93769,93771],{"class":38,"line":994},[36,93768,54133],{"class":42},[36,93770,53683],{"class":53649},[36,93772,53656],{"class":42},[36,93774,93775],{"class":38,"line":1006},[36,93776,70],{"emptyLinePlaceholder":69},[36,93778,93779,93781,93783],{"class":38,"line":1011},[36,93780,3463],{"class":42},[36,93782,54148],{"class":53649},[36,93784,53656],{"class":42},[36,93786,93787,93789,93791,93793,93795,93797,93799,93801],{"class":38,"line":1023},[36,93788,54492],{"class":42},[36,93790,53959],{"class":53649},[36,93792,55834],{"class":79},[36,93794,47],{"class":42},[36,93796,55839],{"class":50},[36,93798,57662],{"class":42},[36,93800,53959],{"class":53649},[36,93802,53656],{"class":42},[36,93804,93805,93807,93809,93811,93813,93815,93817,93819],{"class":38,"line":1028},[36,93806,54492],{"class":42},[36,93808,54161],{"class":53649},[36,93810,57587],{"class":79},[36,93812,47],{"class":42},[36,93814,90615],{"class":50},[36,93816,57662],{"class":42},[36,93818,54161],{"class":53649},[36,93820,53656],{"class":42},[36,93822,93823,93825,93827],{"class":38,"line":1033},[36,93824,54492],{"class":42},[36,93826,54161],{"class":53649},[36,93828,53656],{"class":42},[36,93830,93831,93833,93835,93837,93839,93841,93843,93845],{"class":38,"line":1053},[36,93832,13599],{"class":46},[36,93834,89275],{"class":62},[36,93836,15941],{"class":46},[36,93838,56744],{"class":42},[36,93840,56747],{"class":79},[36,93842,92],{"class":42},[36,93844,92487],{"class":50},[36,93846,123],{"class":42},[36,93848,93849,93851,93853,93855],{"class":38,"line":1064},[36,93850,54567],{"class":46},[36,93852,11818],{"class":42},[36,93854,47],{"class":46},[36,93856,49682],{"class":62},[36,93858,93859,93861,93863],{"class":38,"line":1075},[36,93860,72430],{"class":46},[36,93862,92506],{"class":79},[36,93864,13232],{"class":42},[36,93866,93867,93869,93871,93873],{"class":38,"line":2291},[36,93868,92513],{"class":42},[36,93870,47],{"class":46},[36,93872,5417],{"class":42},[36,93874,5087],{"class":46},[36,93876,93877],{"class":38,"line":2329},[36,93878,92524],{"class":2621},[36,93880,93881],{"class":38,"line":2334},[36,93882,4580],{"class":42},[36,93884,93885],{"class":38,"line":2339},[36,93886,92533],{"class":2621},[36,93888,93889],{"class":38,"line":2365},[36,93890,93891],{"class":2621},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,93893,93894],{"class":38,"line":2373},[36,93895,93896],{"class":2621},"    \u002F\u002F 1.声明一个定时器变量\n",[36,93898,93899],{"class":38,"line":5001},[36,93900,93901],{"class":2621},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,93903,93904],{"class":38,"line":5006},[36,93905,93906],{"class":2621},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,93908,93909],{"class":38,"line":10328},[36,93910,93911],{"class":2621},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,93913,93914],{"class":38,"line":10352},[36,93915,93916],{"class":2621},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,93918,93919,93921,93924,93926,93928,93930,93932],{"class":38,"line":10357},[36,93920,72430],{"class":46},[36,93922,93923],{"class":79}," throttle",[36,93925,92],{"class":42},[36,93927,92978],{"class":7598},[36,93929,630],{"class":42},[36,93931,3274],{"class":7598},[36,93933,14819],{"class":42},[36,93935,93936,93938],{"class":38,"line":10363},[36,93937,82117],{"class":46},[36,93939,92991],{"class":42},[36,93941,93942,93944,93946],{"class":38,"line":10390},[36,93943,76327],{"class":46},[36,93945,61266],{"class":46},[36,93947,56800],{"class":42},[36,93949,93950,93952,93954,93956],{"class":38,"line":10395},[36,93951,890],{"class":46},[36,93953,4066],{"class":42},[36,93955,2784],{"class":46},[36,93957,93958],{"class":42},"timer) {\n",[36,93960,93961,93964,93966,93968,93970,93972],{"class":38,"line":10401},[36,93962,93963],{"class":42},"          timer ",[36,93965,47],{"class":46},[36,93967,93032],{"class":79},[36,93969,92],{"class":42},[36,93971,56797],{"class":46},[36,93973,56800],{"class":42},[36,93975,93976,93979],{"class":38,"line":10413},[36,93977,93978],{"class":79},"            fn",[36,93980,4369],{"class":42},[36,93982,93983],{"class":38,"line":10425},[36,93984,93985],{"class":2621},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,93987,93988],{"class":38,"line":10437},[36,93989,93990],{"class":2621},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,93992,93993,93996,93998],{"class":38,"line":12095},[36,93994,93995],{"class":42},"            timer ",[36,93997,47],{"class":46},[36,93999,94000],{"class":62}," null\n",[36,94002,94003],{"class":38,"line":12120},[36,94004,94005],{"class":2621},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,94007,94008],{"class":38,"line":12143},[36,94009,94010],{"class":2621},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,94012,94013],{"class":38,"line":12167},[36,94014,94015],{"class":42},"          }, t)\n",[36,94017,94018],{"class":38,"line":12172},[36,94019,2204],{"class":42},[36,94021,94022],{"class":38,"line":12177},[36,94023,54746],{"class":42},[36,94025,94026],{"class":38,"line":12182},[36,94027,4580],{"class":42},[36,94029,94030,94032,94034,94036,94038,94040,94042,94044,94046],{"class":38,"line":12191},[36,94031,92548],{"class":42},[36,94033,60161],{"class":79},[36,94035,92],{"class":42},[36,94037,92555],{"class":50},[36,94039,630],{"class":42},[36,94041,93514],{"class":79},[36,94043,92564],{"class":42},[36,94045,67421],{"class":62},[36,94047,1914],{"class":42},[36,94049,94050,94052,94054],{"class":38,"line":12196},[36,94051,54765],{"class":42},[36,94053,54161],{"class":53649},[36,94055,53656],{"class":42},[36,94057,94058,94060,94062],{"class":38,"line":12202},[36,94059,54133],{"class":42},[36,94061,54148],{"class":53649},[36,94063,53656],{"class":42},[36,94065,94066],{"class":38,"line":12223},[36,94067,70],{"emptyLinePlaceholder":69},[36,94069,94070,94072,94074],{"class":38,"line":12229},[36,94071,54133],{"class":42},[36,94073,52984],{"class":53649},[36,94075,53656],{"class":42},[1752,94077,94079],{"id":94078},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,94081,94083],{"className":55415,"code":94082,"language":55417,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,94084,94085,94093,94101,94106,94111,94116,94121,94125,94133],{"__ignoreMap":31},[36,94086,94087,94089,94091],{"class":38,"line":39},[36,94088,3463],{"class":42},[36,94090,54148],{"class":53649},[36,94092,53656],{"class":42},[36,94094,94095,94097,94099],{"class":38,"line":54},[36,94096,54492],{"class":42},[36,94098,54161],{"class":53649},[36,94100,53656],{"class":42},[36,94102,94103],{"class":38,"line":66},[36,94104,94105],{"class":42},"    let timer = null\n",[36,94107,94108],{"class":38,"line":73},[36,94109,94110],{"class":42},"    timer = setTimeout(() => {\n",[36,94112,94113],{"class":38,"line":86},[36,94114,94115],{"class":42},"      clearTimeout(timer)\n",[36,94117,94118],{"class":38,"line":126},[36,94119,94120],{"class":42},"      console.log(timer)\n",[36,94122,94123],{"class":38,"line":131},[36,94124,62573],{"class":42},[36,94126,94127,94129,94131],{"class":38,"line":225},[36,94128,54765],{"class":42},[36,94130,54161],{"class":53649},[36,94132,53656],{"class":42},[36,94134,94135,94137,94139],{"class":38,"line":235},[36,94136,54133],{"class":42},[36,94138,54148],{"class":53649},[36,94140,53656],{"class":42},[19,94142,94143],{},"输出为1",[19,94145,94146],{},"在开启的定时器里边写清除定时器",[19,94148,94149],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1752,94151,94153],{"id":94152},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94155,94156],{},"页面打开，可以记录上一次的视频播放位置",[19,94158,94159],{},[3879,94160],{"alt":31,"src":94161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94163,94164],{},[3879,94165],{"alt":31,"src":94166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,94168,94170],{"className":52982,"code":94169,"language":52984,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,94171,94172,94182,94196,94200,94208,94222,94242,94262,94284,94297,94305,94311,94321,94331,94341,94345,94349,94356,94369,94381,94385,94389,94399,94411,94425,94429,94433,94440,94450,94463,94475,94485,94495,94511,94523,94527,94531,94539,94549,94561,94571,94581,94591,94595,94599,94609,94620,94624,94632,94640,94644,94652,94667,94682,94697,94718,94726,94734,94749,94771,94779,94794,94820,94846,94872,94880,94888,94907,94915,94920,94939,94944,94962,94967,94972,94980,94985,94999,95007,95012,95029,95033,95038,95060,95064,95072,95080,95084],{"__ignoreMap":31},[36,94173,94174,94176,94178,94180],{"class":38,"line":39},[36,94175,53646],{"class":42},[36,94177,53650],{"class":53649},[36,94179,53653],{"class":79},[36,94181,53656],{"class":42},[36,94183,94184,94186,94188,94190,94192,94194],{"class":38,"line":54},[36,94185,3463],{"class":42},[36,94187,52984],{"class":53649},[36,94189,53665],{"class":79},[36,94191,47],{"class":42},[36,94193,53670],{"class":50},[36,94195,53656],{"class":42},[36,94197,94198],{"class":38,"line":66},[36,94199,70],{"emptyLinePlaceholder":69},[36,94201,94202,94204,94206],{"class":38,"line":73},[36,94203,3463],{"class":42},[36,94205,53683],{"class":53649},[36,94207,53656],{"class":42},[36,94209,94210,94212,94214,94216,94218,94220],{"class":38,"line":86},[36,94211,54492],{"class":42},[36,94213,53693],{"class":53649},[36,94215,53696],{"class":79},[36,94217,47],{"class":42},[36,94219,53701],{"class":50},[36,94221,61475],{"class":42},[36,94223,94224,94226,94228,94230,94232,94234,94236,94238,94240],{"class":38,"line":126},[36,94225,54492],{"class":42},[36,94227,53693],{"class":53649},[36,94229,53712],{"class":79},[36,94231,47],{"class":42},[36,94233,53717],{"class":50},[36,94235,53720],{"class":79},[36,94237,47],{"class":42},[36,94239,53725],{"class":50},[36,94241,61475],{"class":42},[36,94243,94244,94246,94248,94250,94252,94254,94256,94258,94260],{"class":38,"line":131},[36,94245,54492],{"class":42},[36,94247,53693],{"class":53649},[36,94249,17295],{"class":79},[36,94251,47],{"class":42},[36,94253,53740],{"class":50},[36,94255,53720],{"class":79},[36,94257,47],{"class":42},[36,94259,53747],{"class":50},[36,94261,61475],{"class":42},[36,94263,94264,94266,94268,94270,94272,94275,94277,94279,94282],{"class":38,"line":225},[36,94265,54492],{"class":42},[36,94267,53693],{"class":53649},[36,94269,17295],{"class":79},[36,94271,47],{"class":42},[36,94273,94274],{"class":50},"\"referrer\"",[36,94276,53720],{"class":79},[36,94278,47],{"class":42},[36,94280,94281],{"class":50},"\"never\"",[36,94283,61475],{"class":42},[36,94285,94286,94288,94290,94293,94295],{"class":38,"line":235},[36,94287,54492],{"class":42},[36,94289,53756],{"class":53649},[36,94291,94292],{"class":42},">综合案例\u003C\u002F",[36,94294,53756],{"class":53649},[36,94296,53656],{"class":42},[36,94298,94299,94301,94303],{"class":38,"line":377},[36,94300,54492],{"class":42},[36,94302,2467],{"class":53649},[36,94304,53656],{"class":42},[36,94306,94307,94309],{"class":38,"line":617},[36,94308,8785],{"class":53649},[36,94310,2150],{"class":42},[36,94312,94313,94315,94317,94319],{"class":38,"line":643},[36,94314,57043],{"class":62},[36,94316,2158],{"class":42},[36,94318,2751],{"class":62},[36,94320,3711],{"class":42},[36,94322,94323,94325,94327,94329],{"class":38,"line":921},[36,94324,57054],{"class":62},[36,94326,2158],{"class":42},[36,94328,2751],{"class":62},[36,94330,3711],{"class":42},[36,94332,94333,94335,94337,94339],{"class":38,"line":934},[36,94334,74941],{"class":62},[36,94336,2158],{"class":42},[36,94338,62853],{"class":62},[36,94340,3711],{"class":42},[36,94342,94343],{"class":38,"line":939},[36,94344,4580],{"class":42},[36,94346,94347],{"class":38,"line":949},[36,94348,70],{"emptyLinePlaceholder":69},[36,94350,94351,94354],{"class":38,"line":962},[36,94352,94353],{"class":79},"    .container",[36,94355,2150],{"class":42},[36,94357,94358,94360,94362,94365,94367],{"class":38,"line":974},[36,94359,57119],{"class":62},[36,94361,2158],{"class":42},[36,94363,94364],{"class":62},"1200",[36,94366,53840],{"class":46},[36,94368,3711],{"class":42},[36,94370,94371,94373,94375,94377,94379],{"class":38,"line":979},[36,94372,57054],{"class":62},[36,94374,2158],{"class":42},[36,94376,2751],{"class":62},[36,94378,53904],{"class":62},[36,94380,3711],{"class":42},[36,94382,94383],{"class":38,"line":994},[36,94384,4580],{"class":42},[36,94386,94387],{"class":38,"line":1006},[36,94388,70],{"emptyLinePlaceholder":69},[36,94390,94391,94394,94397],{"class":38,"line":1011},[36,94392,94393],{"class":79},"    .video",[36,94395,94396],{"class":53649}," video",[36,94398,2150],{"class":42},[36,94400,94401,94403,94405,94407,94409],{"class":38,"line":1023},[36,94402,57119],{"class":62},[36,94404,2158],{"class":42},[36,94406,1070],{"class":62},[36,94408,2884],{"class":46},[36,94410,3711],{"class":42},[36,94412,94413,94415,94417,94419,94421,94423],{"class":38,"line":1028},[36,94414,57043],{"class":62},[36,94416,2158],{"class":42},[36,94418,3254],{"class":62},[36,94420,53840],{"class":46},[36,94422,899],{"class":62},[36,94424,3711],{"class":42},[36,94426,94427],{"class":38,"line":1033},[36,94428,4580],{"class":42},[36,94430,94431],{"class":38,"line":1053},[36,94432,70],{"emptyLinePlaceholder":69},[36,94434,94435,94438],{"class":38,"line":1064},[36,94436,94437],{"class":79},"    .elevator",[36,94439,2150],{"class":42},[36,94441,94442,94444,94446,94448],{"class":38,"line":1075},[36,94443,57107],{"class":62},[36,94445,2158],{"class":42},[36,94447,88575],{"class":62},[36,94449,3711],{"class":42},[36,94451,94452,94454,94456,94459,94461],{"class":38,"line":2291},[36,94453,57295],{"class":62},[36,94455,2158],{"class":42},[36,94457,94458],{"class":62},"280",[36,94460,53840],{"class":46},[36,94462,3711],{"class":42},[36,94464,94465,94467,94469,94471,94473],{"class":38,"line":2329},[36,94466,88769],{"class":62},[36,94468,2158],{"class":42},[36,94470,3254],{"class":62},[36,94472,53840],{"class":46},[36,94474,3711],{"class":42},[36,94476,94477,94479,94481,94483],{"class":38,"line":2334},[36,94478,88582],{"class":62},[36,94480,2158],{"class":42},[36,94482,88587],{"class":62},[36,94484,3711],{"class":42},[36,94486,94487,94489,94491,94493],{"class":38,"line":2339},[36,94488,64069],{"class":62},[36,94490,2158],{"class":42},[36,94492,63190],{"class":62},[36,94494,3711],{"class":42},[36,94496,94497,94499,94501,94503,94505,94507,94509],{"class":38,"line":2365},[36,94498,64325],{"class":62},[36,94500,2158],{"class":42},[36,94502,1906],{"class":62},[36,94504,53840],{"class":46},[36,94506,53869],{"class":62},[36,94508,64592],{"class":62},[36,94510,3711],{"class":42},[36,94512,94513,94515,94517,94519,94521],{"class":38,"line":2373},[36,94514,57119],{"class":62},[36,94516,2158],{"class":42},[36,94518,3460],{"class":62},[36,94520,53840],{"class":46},[36,94522,3711],{"class":42},[36,94524,94525],{"class":38,"line":5001},[36,94526,4580],{"class":42},[36,94528,94529],{"class":38,"line":5006},[36,94530,70],{"emptyLinePlaceholder":69},[36,94532,94533,94535,94537],{"class":38,"line":10328},[36,94534,94437],{"class":79},[36,94536,3815],{"class":53649},[36,94538,2150],{"class":42},[36,94540,94541,94543,94545,94547],{"class":38,"line":10352},[36,94542,57357],{"class":62},[36,94544,2158],{"class":42},[36,94546,63217],{"class":62},[36,94548,3711],{"class":42},[36,94550,94551,94553,94555,94557,94559],{"class":38,"line":10357},[36,94552,57043],{"class":62},[36,94554,2158],{"class":42},[36,94556,3002],{"class":62},[36,94558,53840],{"class":46},[36,94560,3711],{"class":42},[36,94562,94563,94565,94567,94569],{"class":38,"line":10363},[36,94564,66317],{"class":62},[36,94566,2158],{"class":42},[36,94568,57085],{"class":62},[36,94570,3711],{"class":42},[36,94572,94573,94575,94577,94579],{"class":38,"line":10390},[36,94574,59634],{"class":62},[36,94576,2158],{"class":42},[36,94578,53940],{"class":62},[36,94580,3711],{"class":42},[36,94582,94583,94585,94587,94589],{"class":38,"line":10395},[36,94584,59764],{"class":62},[36,94586,2158],{"class":42},[36,94588,64418],{"class":62},[36,94590,3711],{"class":42},[36,94592,94593],{"class":38,"line":10401},[36,94594,4580],{"class":42},[36,94596,94597],{"class":38,"line":10413},[36,94598,70],{"emptyLinePlaceholder":69},[36,94600,94601,94603,94605,94607],{"class":38,"line":10425},[36,94602,94437],{"class":79},[36,94604,3815],{"class":53649},[36,94606,66371],{"class":79},[36,94608,2150],{"class":42},[36,94610,94611,94613,94615,94618],{"class":38,"line":10437},[36,94612,59764],{"class":62},[36,94614,2158],{"class":42},[36,94616,94617],{"class":62},"#1286ff",[36,94619,3711],{"class":42},[36,94621,94622],{"class":38,"line":12095},[36,94623,4580],{"class":42},[36,94625,94626,94628,94630],{"class":38,"line":12120},[36,94627,54765],{"class":42},[36,94629,2467],{"class":53649},[36,94631,53656],{"class":42},[36,94633,94634,94636,94638],{"class":38,"line":12143},[36,94635,54133],{"class":42},[36,94637,53683],{"class":53649},[36,94639,53656],{"class":42},[36,94641,94642],{"class":38,"line":12167},[36,94643,70],{"emptyLinePlaceholder":69},[36,94645,94646,94648,94650],{"class":38,"line":12172},[36,94647,3463],{"class":42},[36,94649,54148],{"class":53649},[36,94651,53656],{"class":42},[36,94653,94654,94656,94658,94660,94662,94665],{"class":38,"line":12177},[36,94655,54492],{"class":42},[36,94657,53959],{"class":53649},[36,94659,55834],{"class":79},[36,94661,47],{"class":42},[36,94663,94664],{"class":50},"\"container\"",[36,94666,53656],{"class":42},[36,94668,94669,94671,94673,94675,94677,94680],{"class":38,"line":12182},[36,94670,53690],{"class":42},[36,94672,53959],{"class":53649},[36,94674,55834],{"class":79},[36,94676,47],{"class":42},[36,94678,94679],{"class":50},"\"header\"",[36,94681,53656],{"class":42},[36,94683,94684,94686,94688,94690,94692,94695],{"class":38,"line":12191},[36,94685,57582],{"class":42},[36,94687,2796],{"class":53649},[36,94689,63405],{"class":79},[36,94691,47],{"class":42},[36,94693,94694],{"class":50},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,94696,53656],{"class":42},[36,94698,94699,94701,94703,94705,94707,94710,94712,94714,94716],{"class":38,"line":12196},[36,94700,57650],{"class":42},[36,94702,3879],{"class":53649},[36,94704,57587],{"class":79},[36,94706,47],{"class":42},[36,94708,94709],{"class":50},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,94711,57595],{"class":79},[36,94713,47],{"class":42},[36,94715,10033],{"class":50},[36,94717,61475],{"class":42},[36,94719,94720,94722,94724],{"class":38,"line":12202},[36,94721,57755],{"class":42},[36,94723,2796],{"class":53649},[36,94725,53656],{"class":42},[36,94727,94728,94730,94732],{"class":38,"line":12223},[36,94729,54124],{"class":42},[36,94731,53959],{"class":53649},[36,94733,53656],{"class":42},[36,94735,94736,94738,94740,94742,94744,94747],{"class":38,"line":12229},[36,94737,53690],{"class":42},[36,94739,53959],{"class":53649},[36,94741,55834],{"class":79},[36,94743,47],{"class":42},[36,94745,94746],{"class":50},"\"video\"",[36,94748,53656],{"class":42},[36,94750,94751,94753,94755,94757,94759,94762,94765,94767,94769],{"class":38,"line":12243},[36,94752,57582],{"class":42},[36,94754,30553],{"class":53649},[36,94756,57587],{"class":79},[36,94758,47],{"class":42},[36,94760,94761],{"class":50},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,94763,94764],{"class":79}," controls",[36,94766,57662],{"class":42},[36,94768,30553],{"class":53649},[36,94770,53656],{"class":42},[36,94772,94773,94775,94777],{"class":38,"line":12249},[36,94774,54124],{"class":42},[36,94776,53959],{"class":53649},[36,94778,53656],{"class":42},[36,94780,94781,94783,94785,94787,94789,94792],{"class":38,"line":12276},[36,94782,53690],{"class":42},[36,94784,53959],{"class":53649},[36,94786,55834],{"class":79},[36,94788,47],{"class":42},[36,94790,94791],{"class":50},"\"elevator\"",[36,94793,53656],{"class":42},[36,94795,94796,94798,94800,94802,94804,94806,94809,94811,94813,94816,94818],{"class":38,"line":12285},[36,94797,57582],{"class":42},[36,94799,2796],{"class":53649},[36,94801,63405],{"class":79},[36,94803,47],{"class":42},[36,94805,66583],{"class":50},[36,94807,94808],{"class":79}," data-ref",[36,94810,47],{"class":42},[36,94812,94746],{"class":50},[36,94814,94815],{"class":42},">视频介绍\u003C\u002F",[36,94817,2796],{"class":53649},[36,94819,53656],{"class":42},[36,94821,94822,94824,94826,94828,94830,94832,94834,94836,94839,94842,94844],{"class":38,"line":12291},[36,94823,57582],{"class":42},[36,94825,2796],{"class":53649},[36,94827,63405],{"class":79},[36,94829,47],{"class":42},[36,94831,66583],{"class":50},[36,94833,94808],{"class":79},[36,94835,47],{"class":42},[36,94837,94838],{"class":50},"\"intro\"",[36,94840,94841],{"class":42},">课程简介\u003C\u002F",[36,94843,2796],{"class":53649},[36,94845,53656],{"class":42},[36,94847,94848,94850,94852,94854,94856,94858,94860,94862,94865,94868,94870],{"class":38,"line":12299},[36,94849,57582],{"class":42},[36,94851,2796],{"class":53649},[36,94853,63405],{"class":79},[36,94855,47],{"class":42},[36,94857,66583],{"class":50},[36,94859,94808],{"class":79},[36,94861,47],{"class":42},[36,94863,94864],{"class":50},"\"outline\"",[36,94866,94867],{"class":42},">评论列表\u003C\u002F",[36,94869,2796],{"class":53649},[36,94871,53656],{"class":42},[36,94873,94874,94876,94878],{"class":38,"line":12304},[36,94875,54124],{"class":42},[36,94877,53959],{"class":53649},[36,94879,53656],{"class":42},[36,94881,94882,94884,94886],{"class":38,"line":18977},[36,94883,54765],{"class":42},[36,94885,53959],{"class":53649},[36,94887,53656],{"class":42},[36,94889,94890,94892,94894,94896,94898,94901,94903,94905],{"class":38,"line":18983},[36,94891,54492],{"class":42},[36,94893,54161],{"class":53649},[36,94895,57587],{"class":79},[36,94897,47],{"class":42},[36,94899,94900],{"class":50},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,94902,57662],{"class":42},[36,94904,54161],{"class":53649},[36,94906,53656],{"class":42},[36,94908,94909,94911,94913],{"class":38,"line":19006},[36,94910,54492],{"class":42},[36,94912,54161],{"class":53649},[36,94914,53656],{"class":42},[36,94916,94917],{"class":38,"line":19012},[36,94918,94919],{"class":2621},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,94921,94922,94924,94926,94928,94930,94932,94934,94937],{"class":38,"line":19035},[36,94923,13599],{"class":46},[36,94925,94396],{"class":62},[36,94927,15941],{"class":46},[36,94929,56744],{"class":42},[36,94931,56747],{"class":79},[36,94933,92],{"class":42},[36,94935,94936],{"class":50},"'video'",[36,94938,123],{"class":42},[36,94940,94941],{"class":38,"line":19049},[36,94942,94943],{"class":2621},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,94945,94946,94949,94951,94953,94955,94958,94960],{"class":38,"line":19069},[36,94947,94948],{"class":42},"    video.ontimeupdate ",[36,94950,47],{"class":46},[36,94952,90696],{"class":42},[36,94954,93514],{"class":79},[36,94956,94957],{"class":42},"(() ",[36,94959,87064],{"class":46},[36,94961,2150],{"class":42},[36,94963,94964],{"class":38,"line":19075},[36,94965,94966],{"class":2621},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,94968,94969],{"class":38,"line":19086},[36,94970,94971],{"class":2621},"      \u002F\u002F 控制台输出当前的时间\n",[36,94973,94974,94977],{"class":38,"line":19109},[36,94975,94976],{"class":2621},"      \u002F\u002F console.log(video.currentTime)",[36,94978,94979],{"class":2621},"  \u002F\u002F获得当前的视频时间\n",[36,94981,94982],{"class":38,"line":19131},[36,94983,94984],{"class":2621},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,94986,94987,94989,94991,94993,94996],{"class":38,"line":19136},[36,94988,77028],{"class":42},[36,94990,73999],{"class":79},[36,94992,92],{"class":42},[36,94994,94995],{"class":50},"'currentTime'",[36,94997,94998],{"class":42},", video.currentTime)\n",[36,95000,95001,95003,95005],{"class":38,"line":19142},[36,95002,56883],{"class":42},[36,95004,1048],{"class":62},[36,95006,123],{"class":42},[36,95008,95009],{"class":38,"line":19156},[36,95010,95011],{"class":2621},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,95013,95014,95017,95020,95022,95025,95027],{"class":38,"line":19169},[36,95015,95016],{"class":42},"    video.",[36,95018,95019],{"class":79},"onloadeddata",[36,95021,15941],{"class":46},[36,95023,95024],{"class":42}," () ",[36,95026,87064],{"class":46},[36,95028,2150],{"class":42},[36,95030,95031],{"class":38,"line":19174},[36,95032,62360],{"class":2621},[36,95034,95035],{"class":38,"line":19188},[36,95036,95037],{"class":2621},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,95039,95040,95043,95045,95048,95050,95052,95054,95056,95058],{"class":38,"line":19193},[36,95041,95042],{"class":42},"      video.currentTime ",[36,95044,47],{"class":46},[36,95046,95047],{"class":42}," localStorage.",[36,95049,74030],{"class":79},[36,95051,92],{"class":42},[36,95053,94995],{"class":50},[36,95055,16091],{"class":42},[36,95057,73702],{"class":46},[36,95059,49682],{"class":62},[36,95061,95062],{"class":38,"line":19199},[36,95063,4580],{"class":42},[36,95065,95066,95068,95070],{"class":38,"line":19204},[36,95067,54765],{"class":42},[36,95069,54161],{"class":53649},[36,95071,53656],{"class":42},[36,95073,95074,95076,95078],{"class":38,"line":19218},[36,95075,54133],{"class":42},[36,95077,54148],{"class":53649},[36,95079,53656],{"class":42},[36,95081,95082],{"class":38,"line":19223},[36,95083,70],{"emptyLinePlaceholder":69},[36,95085,95086,95088,95090],{"class":38,"line":19228},[36,95087,54133],{"class":42},[36,95089,52984],{"class":53649},[36,95091,53656],{"class":42},[2467,95093,95094],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":95096},[95097,95102,95106,95107,95108,95113,95118,95119,95120,95121,95128,95133,95134,95144,95148,95149,95153],{"id":79036,"depth":54,"text":79037,"children":95098},[95099,95100,95101],{"id":79040,"depth":66,"text":79041},{"id":79065,"depth":66,"text":79066},{"id":79077,"depth":66,"text":79078},{"id":79089,"depth":54,"text":79090,"children":95103},[95104,95105],{"id":79093,"depth":66,"text":79094},{"id":79108,"depth":66,"text":79109},{"id":79160,"depth":54,"text":79161},{"id":79204,"depth":54,"text":79205},{"id":79221,"depth":54,"text":79222,"children":95109},[95110,95111,95112],{"id":79225,"depth":66,"text":79226},{"id":79238,"depth":66,"text":79239},{"id":79343,"depth":66,"text":79344},{"id":79632,"depth":54,"text":79633,"children":95114},[95115,95116,95117],{"id":79636,"depth":66,"text":79637},{"id":80079,"depth":66,"text":80080},{"id":80490,"depth":66,"text":80491},{"id":80553,"depth":54,"text":80554},{"id":80632,"depth":54,"text":80633},{"id":80725,"depth":54,"text":80726},{"id":82569,"depth":54,"text":82570,"children":95122},[95123,95124,95125,95126,95127],{"id":82573,"depth":66,"text":82574},{"id":82585,"depth":66,"text":82586},{"id":82802,"depth":66,"text":82803},{"id":82820,"depth":66,"text":82821},{"id":82880,"depth":66,"text":82881},{"id":87148,"depth":54,"text":87149,"children":95129},[95130,95131,95132],{"id":87152,"depth":66,"text":87153},{"id":87170,"depth":66,"text":87171},{"id":87196,"depth":66,"text":87197},{"id":87205,"depth":54,"text":87206},{"id":87227,"depth":54,"text":87228,"children":95135},[95136,95137,95138,95139,95140,95141,95142,95143],{"id":87231,"depth":66,"text":87232},{"id":87492,"depth":66,"text":87493},{"id":87678,"depth":66,"text":87679},{"id":88045,"depth":66,"text":88046},{"id":88161,"depth":66,"text":88162},{"id":88197,"depth":66,"text":88198},{"id":88244,"depth":66,"text":88245},{"id":88278,"depth":66,"text":88279},{"id":89641,"depth":54,"text":89642,"children":95145},[95146,95147],{"id":89645,"depth":66,"text":89646},{"id":89682,"depth":66,"text":89683},{"id":91036,"depth":54,"text":91037},{"id":91407,"depth":54,"text":91408,"children":95150},[95151,95152],{"id":91411,"depth":66,"text":91412},{"id":91445,"depth":66,"text":91446},{"id":92174,"depth":54,"text":92175,"children":95154},[95155,95156,95157,95158],{"id":92178,"depth":66,"text":92179},{"id":93136,"depth":66,"text":93137},{"id":94078,"depth":66,"text":94079},{"id":94152,"depth":66,"text":94153},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79025,"description":2493},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95165,"title":95166,"body":95167,"description":95178,"extension":2494,"meta":95179,"navigation":69,"path":95181,"seo":95182,"stem":95183,"__hash__":95184},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95168,"toc":95176},[95169],[19,95170,95171,95172],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2796,95173,95174],{"href":95174,"rel":95175},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26235],{"title":31,"searchDepth":54,"depth":54,"links":95177},[],"三件套第三套学习",{"category":95180},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95166,"description":95178},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95186,"title":95187,"body":95188,"description":2493,"extension":2494,"meta":95293,"navigation":69,"path":95294,"seo":95295,"stem":95296,"__hash__":95297},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95189,"toc":95288},[95190,95197,95200,95203,95206,95210,95219,95222,95225,95229,95238,95241,95245,95248,95268,95271,95285],[19,95191,95192],{},[2796,95193,95196],{"href":95194,"rel":95195},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26235],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95198,95187],{"id":95199},"_1安装",[19,95201,95202],{},"numpy是科学计算基础库,底层是C语言",[19,95204,95205],{},"三种方式：",[14,95207,95209],{"id":95208},"_11-通过pip安装","1.1 通过pip安装",[26,95211,95213],{"className":28,"code":95212,"language":30,"meta":31,"style":31},"pip install numpy\n",[33,95214,95215],{"__ignoreMap":31},[36,95216,95217],{"class":38,"line":39},[36,95218,95212],{"class":42},[19,95220,95221],{},"首选方式，自动处理依赖项",[19,95223,95224],{},"在提示系统命令符中使用cmd",[14,95226,95228],{"id":95227},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,95230,95232],{"className":28,"code":95231,"language":30,"meta":31,"style":31},"conda install numpy\n",[33,95233,95234],{"__ignoreMap":31},[36,95235,95236],{"class":38,"line":39},[36,95237,95231],{"class":42},[19,95239,95240],{},"自动解决环境依赖",[14,95242,95244],{"id":95243},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95246,95247],{},"对于Debian\u002FUbuntu",[26,95249,95251],{"className":28,"code":95250,"language":30,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,95252,95253],{"__ignoreMap":31},[36,95254,95255,95258,95260,95263,95265],{"class":38,"line":39},[36,95256,95257],{"class":42},"sudo apt",[36,95259,3087],{"class":46},[36,95261,95262],{"class":42},"get install python3",[36,95264,3087],{"class":46},[36,95266,95267],{"class":42},"numpy\n",[19,95269,95270],{},"对于Fedora:",[26,95272,95274],{"className":28,"code":95273,"language":30,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,95275,95276],{"__ignoreMap":31},[36,95277,95278,95281,95283],{"class":38,"line":39},[36,95279,95280],{"class":42},"sudo dnf install python3",[36,95282,3087],{"class":46},[36,95284,95267],{"class":42},[2467,95286,95287],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":95289},[95290,95291,95292],{"id":95208,"depth":54,"text":95209},{"id":95227,"depth":54,"text":95228},{"id":95243,"depth":54,"text":95244},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95187,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95299,"title":95300,"body":95301,"description":2493,"extension":2494,"meta":95414,"navigation":69,"path":95415,"seo":95416,"stem":95417,"__hash__":95418},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95302,"toc":95412},[95303,95306,95309,95312,95315,95318,95321,95324,95327,95330,95406,95409],[10,95304,95300],{"id":95305},"_10算数函数",[19,95307,95308],{},"加减乘除运算跟python基础语法没区别",[19,95310,95311],{},"除了python那种方法外还可以使用函数",[19,95313,95314],{},"加：np.add(a,b)",[19,95316,95317],{},"减：np.subtract(a,b)",[19,95319,95320],{},"乘：np.multiply(a,b)",[19,95322,95323],{},"除：np.divide(a,b) == a\u002Fb",[19,95325,95326],{},"取余：np.mod(a,b) == a%b",[19,95328,95329],{},"必须会的用法：",[26,95331,95333],{"className":28,"code":95332,"language":30,"meta":31,"style":31},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[33,95334,95335,95357,95378,95388,95401],{"__ignoreMap":31},[36,95336,95337,95339,95341,95344,95346,95349,95351,95353,95355],{"class":38,"line":39},[36,95338,2796],{"class":42},[36,95340,47],{"class":46},[36,95342,95343],{"class":42},"np.arange(",[36,95345,2976],{"class":62},[36,95347,95348],{"class":42},").reshape(",[36,95350,2634],{"class":62},[36,95352,2934],{"class":42},[36,95354,2634],{"class":62},[36,95356,123],{"class":42},[36,95358,95359,95361,95363,95366,95368,95370,95372,95374,95376],{"class":38,"line":54},[36,95360,2820],{"class":42},[36,95362,47],{"class":46},[36,95364,95365],{"class":42},"np.array([",[36,95367,3002],{"class":62},[36,95369,2934],{"class":42},[36,95371,3002],{"class":62},[36,95373,2934],{"class":42},[36,95375,3002],{"class":62},[36,95377,7040],{"class":42},[36,95379,95380,95383,95385],{"class":38,"line":66},[36,95381,95382],{"class":42},"result",[36,95384,47],{"class":46},[36,95386,95387],{"class":42},"np.empty_like(a)\n",[36,95389,95390,95393,95396,95398],{"class":38,"line":73},[36,95391,95392],{"class":42},"np.add(a,b,",[36,95394,95395],{"class":7598},"out",[36,95397,47],{"class":46},[36,95399,95400],{"class":42},"result)\n",[36,95402,95403],{"class":38,"line":86},[36,95404,95405],{"class":42},"result\n",[19,95407,95408],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2467,95410,95411],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":95413},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95300,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95420,"title":95421,"body":95422,"description":2493,"extension":2494,"meta":96184,"navigation":69,"path":96185,"seo":96186,"stem":96187,"__hash__":96188},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95423,"toc":96171},[95424,95427,95430,95433,95437,95476,95480,95524,95584,95588,95591,95630,95633,95678,95682,95718,95722,95791,95795,95859,95863,95866,95869,95872,95875,95911,95915,95955,95959,96031,96034,96038,96101,96105,96168],[10,95425,95421],{"id":95426},"_11统计函数",[19,95428,95429],{},"sum max min mean",[19,95431,95432],{},"这些有axis参数，可以指定方向",[14,95434,95436],{"id":95435},"_111-sum求和函数","11.1 sum()求和函数",[26,95438,95440],{"className":28,"code":95439,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,95441,95442,95447,95468],{"__ignoreMap":31},[36,95443,95444],{"class":38,"line":39},[36,95445,95446],{"class":2621},"#创建一维数组\n",[36,95448,95449,95451,95453,95456,95458,95460,95462,95464,95466],{"class":38,"line":54},[36,95450,2796],{"class":42},[36,95452,47],{"class":46},[36,95454,95455],{"class":42},"np.random.randint(",[36,95457,1906],{"class":62},[36,95459,2934],{"class":42},[36,95461,1070],{"class":62},[36,95463,2934],{"class":42},[36,95465,3254],{"class":62},[36,95467,123],{"class":42},[36,95469,95470,95473],{"class":38,"line":66},[36,95471,95472],{"class":42},"np.sum(a)",[36,95474,95475],{"class":2621},"#求和\n",[14,95477,95479],{"id":95478},"_112-max求最大值函数","11.2 max()求最大值函数",[26,95481,95483],{"className":28,"code":95482,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,95484,95485,95489,95509,95514,95519],{"__ignoreMap":31},[36,95486,95487],{"class":38,"line":39},[36,95488,95446],{"class":2621},[36,95490,95491,95493,95495,95497,95499,95501,95503,95505,95507],{"class":38,"line":54},[36,95492,2796],{"class":42},[36,95494,47],{"class":46},[36,95496,95455],{"class":42},[36,95498,1906],{"class":62},[36,95500,2934],{"class":42},[36,95502,1070],{"class":62},[36,95504,2934],{"class":42},[36,95506,3254],{"class":62},[36,95508,123],{"class":42},[36,95510,95511],{"class":38,"line":66},[36,95512,95513],{"class":42},"np.max(a)\n",[36,95515,95516],{"class":38,"line":73},[36,95517,95518],{"class":2621},"#最大索引(求最大元素的索引)arg\n",[36,95520,95521],{"class":38,"line":86},[36,95522,95523],{"class":42},"np.argmax(a)\n",[26,95525,95527],{"className":28,"code":95526,"language":30,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,95528,95529,95550,95570,95574],{"__ignoreMap":31},[36,95530,95531,95533,95535,95538,95540,95542,95544,95546,95548],{"class":38,"line":39},[36,95532,13297],{"class":42},[36,95534,47],{"class":46},[36,95536,95537],{"class":42}," np.array([",[36,95539,1906],{"class":62},[36,95541,630],{"class":42},[36,95543,2875],{"class":62},[36,95545,630],{"class":42},[36,95547,2634],{"class":62},[36,95549,7040],{"class":42},[36,95551,95552,95554,95556,95558,95560,95562,95564,95566,95568],{"class":38,"line":54},[36,95553,13323],{"class":42},[36,95555,47],{"class":46},[36,95557,95537],{"class":42},[36,95559,2634],{"class":62},[36,95561,630],{"class":42},[36,95563,1911],{"class":62},[36,95565,630],{"class":42},[36,95567,2850],{"class":62},[36,95569,7040],{"class":42},[36,95571,95572],{"class":38,"line":66},[36,95573,70],{"emptyLinePlaceholder":69},[36,95575,95576,95578,95581],{"class":38,"line":73},[36,95577,371],{"class":62},[36,95579,95580],{"class":42},"(np.maximum(a, b))   ",[36,95582,95583],{"class":2621},"# [3 5 4]，每个位置上取较大值\n",[14,95585,95587],{"id":95586},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95589,95590],{},"①一维数组：",[26,95592,95594],{"className":28,"code":95593,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,95595,95596,95600,95620,95625],{"__ignoreMap":31},[36,95597,95598],{"class":38,"line":39},[36,95599,95446],{"class":2621},[36,95601,95602,95604,95606,95608,95610,95612,95614,95616,95618],{"class":38,"line":54},[36,95603,2796],{"class":42},[36,95605,47],{"class":46},[36,95607,95455],{"class":42},[36,95609,1906],{"class":62},[36,95611,2934],{"class":42},[36,95613,1070],{"class":62},[36,95615,2934],{"class":42},[36,95617,3254],{"class":62},[36,95619,123],{"class":42},[36,95621,95622],{"class":38,"line":66},[36,95623,95624],{"class":2621},"#求平均值\n",[36,95626,95627],{"class":38,"line":73},[36,95628,95629],{"class":42},"np.mean(a)\n",[19,95631,95632],{},"②二维数组",[26,95634,95636],{"className":28,"code":95635,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,95637,95638,95643,95668,95673],{"__ignoreMap":31},[36,95639,95640],{"class":38,"line":39},[36,95641,95642],{"class":2621},"#二维数组\n",[36,95644,95645,95648,95650,95652,95654,95656,95658,95660,95662,95664,95666],{"class":38,"line":54},[36,95646,95647],{"class":42},"aa",[36,95649,47],{"class":46},[36,95651,95343],{"class":42},[36,95653,1906],{"class":62},[36,95655,2934],{"class":42},[36,95657,3078],{"class":62},[36,95659,95348],{"class":42},[36,95661,2634],{"class":62},[36,95663,2934],{"class":42},[36,95665,2850],{"class":62},[36,95667,123],{"class":42},[36,95669,95670],{"class":38,"line":66},[36,95671,95672],{"class":2621},"#对数组中的所有数求平均\n",[36,95674,95675],{"class":38,"line":73},[36,95676,95677],{"class":42},"np.mean(aa)\n",[14,95679,95681],{"id":95680},"_114-median求中位数函数","11.4 median()求中位数函数",[26,95683,95685],{"className":28,"code":95684,"language":30,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,95686,95687,95692,95708,95713],{"__ignoreMap":31},[36,95688,95689],{"class":38,"line":39},[36,95690,95691],{"class":2621},"#求中位数\n",[36,95693,95694,95696,95698,95700,95702,95704,95706],{"class":38,"line":54},[36,95695,2820],{"class":42},[36,95697,47],{"class":46},[36,95699,95343],{"class":42},[36,95701,1906],{"class":62},[36,95703,2934],{"class":42},[36,95705,3002],{"class":62},[36,95707,123],{"class":42},[36,95709,95710],{"class":38,"line":66},[36,95711,95712],{"class":42},"np.median(b)\n",[36,95714,95715],{"class":38,"line":73},[36,95716,95717],{"class":2621},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95719,95721],{"id":95720},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,95723,95725],{"className":28,"code":95724,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,95726,95727,95743,95748,95753,95762,95767,95776],{"__ignoreMap":31},[36,95728,95729,95731,95733,95735,95737,95739,95741],{"class":38,"line":39},[36,95730,2820],{"class":42},[36,95732,47],{"class":46},[36,95734,95343],{"class":42},[36,95736,1906],{"class":62},[36,95738,2934],{"class":42},[36,95740,3002],{"class":62},[36,95742,123],{"class":42},[36,95744,95745],{"class":38,"line":54},[36,95746,95747],{"class":2621},"#幂运算\n",[36,95749,95750],{"class":38,"line":66},[36,95751,95752],{"class":2621},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,95754,95755,95758,95760],{"class":38,"line":73},[36,95756,95757],{"class":42},"np.power(b,",[36,95759,1911],{"class":62},[36,95761,123],{"class":42},[36,95763,95764],{"class":38,"line":86},[36,95765,95766],{"class":2621},"#或者以下代码，将数据存储起来\n",[36,95768,95769,95771,95773],{"class":38,"line":126},[36,95770,3399],{"class":42},[36,95772,47],{"class":46},[36,95774,95775],{"class":42},"np.empty_like(b)\n",[36,95777,95778,95780,95782,95784,95786,95788],{"class":38,"line":131},[36,95779,95757],{"class":42},[36,95781,1911],{"class":62},[36,95783,2934],{"class":42},[36,95785,95395],{"class":7598},[36,95787,47],{"class":46},[36,95789,95790],{"class":42},"y)\n",[14,95792,95794],{"id":95793},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,95796,95798],{"className":28,"code":95797,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,95799,95800,95816,95821,95826,95830,95848],{"__ignoreMap":31},[36,95801,95802,95804,95806,95808,95810,95812,95814],{"class":38,"line":39},[36,95803,2820],{"class":42},[36,95805,47],{"class":46},[36,95807,95343],{"class":42},[36,95809,1906],{"class":62},[36,95811,2934],{"class":42},[36,95813,3002],{"class":62},[36,95815,123],{"class":42},[36,95817,95818],{"class":38,"line":54},[36,95819,95820],{"class":2621},"#开方\n",[36,95822,95823],{"class":38,"line":66},[36,95824,95825],{"class":42},"np.sqrt(b)\n",[36,95827,95828],{"class":38,"line":73},[36,95829,95766],{"class":2621},[36,95831,95832,95834,95836,95839,95842,95844,95846],{"class":38,"line":86},[36,95833,3399],{"class":42},[36,95835,47],{"class":46},[36,95837,95838],{"class":42},"np.empty_like(b,",[36,95840,95841],{"class":7598},"dtype",[36,95843,47],{"class":46},[36,95845,2605],{"class":62},[36,95847,123],{"class":42},[36,95849,95850,95853,95855,95857],{"class":38,"line":126},[36,95851,95852],{"class":42},"np.sqrt(b,",[36,95854,95395],{"class":7598},[36,95856,47],{"class":46},[36,95858,95790],{"class":42},[14,95860,95862],{"id":95861},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95864,95865],{},"对数组中的元素累计求和，可指定轴",[19,95867,95868],{},"#累计求和的意思是：",[19,95870,95871],{},"a = np.array([1, 2, 3, 4])",[19,95873,95874],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,95876,95878],{"className":28,"code":95877,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,95879,95880,95896,95901,95906],{"__ignoreMap":31},[36,95881,95882,95884,95886,95888,95890,95892,95894],{"class":38,"line":39},[36,95883,2820],{"class":42},[36,95885,47],{"class":46},[36,95887,95343],{"class":42},[36,95889,1906],{"class":62},[36,95891,2934],{"class":42},[36,95893,3002],{"class":62},[36,95895,123],{"class":42},[36,95897,95898],{"class":38,"line":54},[36,95899,95900],{"class":42},"np.cumsum(b)\n",[36,95902,95903],{"class":38,"line":66},[36,95904,95905],{"class":2621},"#结果：\n",[36,95907,95908],{"class":38,"line":73},[36,95909,95910],{"class":2621},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95912,95914],{"id":95913},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,95916,95918],{"className":28,"code":95917,"language":30,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,95919,95920,95936,95941,95946,95950],{"__ignoreMap":31},[36,95921,95922,95924,95926,95928,95930,95932,95934],{"class":38,"line":39},[36,95923,2820],{"class":42},[36,95925,47],{"class":46},[36,95927,95343],{"class":42},[36,95929,1906],{"class":62},[36,95931,2934],{"class":42},[36,95933,3002],{"class":62},[36,95935,123],{"class":42},[36,95937,95938],{"class":38,"line":54},[36,95939,95940],{"class":2621},"#对数组中的元素累计求积，可指定轴\n",[36,95942,95943],{"class":38,"line":66},[36,95944,95945],{"class":42},"np.cumprod(b)\n",[36,95947,95948],{"class":38,"line":73},[36,95949,95905],{"class":2621},[36,95951,95952],{"class":38,"line":86},[36,95953,95954],{"class":2621},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95956,95958],{"id":95957},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,95960,95962],{"className":28,"code":95961,"language":30,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[33,95963,95964,95969,96017,96022,96026],{"__ignoreMap":31},[36,95965,95966],{"class":38,"line":39},[36,95967,95968],{"class":2621},"#删除数组中的重复数据，并对数据进行排序\n",[36,95970,95971,95973,95975,95977,95979,95981,95983,95985,95987,95989,95991,95993,95995,95997,95999,96001,96003,96005,96007,96009,96011,96013,96015],{"class":38,"line":54},[36,95972,2796],{"class":42},[36,95974,47],{"class":46},[36,95976,95365],{"class":42},[36,95978,1906],{"class":62},[36,95980,2934],{"class":42},[36,95982,1911],{"class":62},[36,95984,2934],{"class":42},[36,95986,2634],{"class":62},[36,95988,2934],{"class":42},[36,95990,3053],{"class":62},[36,95992,2934],{"class":42},[36,95994,2634],{"class":62},[36,95996,2934],{"class":42},[36,95998,3002],{"class":62},[36,96000,2934],{"class":42},[36,96002,2757],{"class":62},[36,96004,2934],{"class":42},[36,96006,2751],{"class":62},[36,96008,2934],{"class":42},[36,96010,3329],{"class":62},[36,96012,2934],{"class":42},[36,96014,2850],{"class":62},[36,96016,7040],{"class":42},[36,96018,96019],{"class":38,"line":66},[36,96020,96021],{"class":42},"np.unique(a)\n",[36,96023,96024],{"class":38,"line":73},[36,96025,95905],{"class":2621},[36,96027,96028],{"class":38,"line":86},[36,96029,96030],{"class":2621},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96032,96033],{},"升序形式排序",[14,96035,96037],{"id":96036},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,96039,96041],{"className":28,"code":96040,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,96042,96043,96091,96096],{"__ignoreMap":31},[36,96044,96045,96047,96049,96051,96053,96055,96057,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077,96079,96081,96083,96085,96087,96089],{"class":38,"line":39},[36,96046,2796],{"class":42},[36,96048,47],{"class":46},[36,96050,95365],{"class":42},[36,96052,1906],{"class":62},[36,96054,2934],{"class":42},[36,96056,1911],{"class":62},[36,96058,2934],{"class":42},[36,96060,2634],{"class":62},[36,96062,2934],{"class":42},[36,96064,3053],{"class":62},[36,96066,2934],{"class":42},[36,96068,2634],{"class":62},[36,96070,2934],{"class":42},[36,96072,3002],{"class":62},[36,96074,2934],{"class":42},[36,96076,2757],{"class":62},[36,96078,2934],{"class":42},[36,96080,2751],{"class":62},[36,96082,2934],{"class":42},[36,96084,3329],{"class":62},[36,96086,2934],{"class":42},[36,96088,2850],{"class":62},[36,96090,7040],{"class":42},[36,96092,96093],{"class":38,"line":54},[36,96094,96095],{"class":2621},"#返回数组中非零元素的索引\n",[36,96097,96098],{"class":38,"line":66},[36,96099,96100],{"class":42},"np.nonzero(a)\n",[14,96102,96104],{"id":96103},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,96106,96108],{"className":28,"code":96107,"language":30,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,96109,96110,96158,96163],{"__ignoreMap":31},[36,96111,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138,96140,96142,96144,96146,96148,96150,96152,96154,96156],{"class":38,"line":39},[36,96113,2796],{"class":42},[36,96115,47],{"class":46},[36,96117,95365],{"class":42},[36,96119,1906],{"class":62},[36,96121,2934],{"class":42},[36,96123,1911],{"class":62},[36,96125,2934],{"class":42},[36,96127,2634],{"class":62},[36,96129,2934],{"class":42},[36,96131,3053],{"class":62},[36,96133,2934],{"class":42},[36,96135,2634],{"class":62},[36,96137,2934],{"class":42},[36,96139,3002],{"class":62},[36,96141,2934],{"class":42},[36,96143,2757],{"class":62},[36,96145,2934],{"class":42},[36,96147,2751],{"class":62},[36,96149,2934],{"class":42},[36,96151,3329],{"class":62},[36,96153,2934],{"class":42},[36,96155,2850],{"class":62},[36,96157,7040],{"class":42},[36,96159,96160],{"class":38,"line":54},[36,96161,96162],{"class":2621},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,96164,96165],{"class":38,"line":66},[36,96166,96167],{"class":42},"np.ptp(a)\n",[2467,96169,96170],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":96172},[96173,96174,96175,96176,96177,96178,96179,96180,96181,96182,96183],{"id":95435,"depth":54,"text":95436},{"id":95478,"depth":54,"text":95479},{"id":95586,"depth":54,"text":95587},{"id":95680,"depth":54,"text":95681},{"id":95720,"depth":54,"text":95721},{"id":95793,"depth":54,"text":95794},{"id":95861,"depth":54,"text":95862},{"id":95913,"depth":54,"text":95914},{"id":95957,"depth":54,"text":95958},{"id":96036,"depth":54,"text":96037},{"id":96103,"depth":54,"text":96104},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95421,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96190,"title":96191,"body":96192,"description":2493,"extension":2494,"meta":96847,"navigation":69,"path":96848,"seo":96849,"stem":96850,"__hash__":96851},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96193,"toc":96835},[96194,96197,96201,96204,96420,96424,96427,96636,96640,96706,96711,96715,96718,96721,96759,96763,96766,96771,96775,96778,96781,96786,96790,96793,96797,96800,96803,96808,96812,96815,96818,96823,96827,96832],[10,96195,96191],{"id":96196},"_12其他常用函数",[14,96198,96200],{"id":96199},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96202,96203],{},"将数组的数据按照行列复制扩展",[26,96205,96207],{"className":28,"code":96206,"language":30,"meta":31,"style":31},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[33,96208,96209,96225,96234,96238,96243,96248,96261,96265,96270,96275,96280,96284,96289,96313,96325,96329,96333,96338,96343,96348,96353,96357,96370,96374,96378,96383,96388,96393,96398,96403,96407,96411,96416],{"__ignoreMap":31},[36,96210,96211,96213,96215,96217,96219,96221,96223],{"class":38,"line":39},[36,96212,2796],{"class":42},[36,96214,47],{"class":46},[36,96216,95343],{"class":42},[36,96218,1906],{"class":62},[36,96220,2934],{"class":42},[36,96222,2875],{"class":62},[36,96224,123],{"class":42},[36,96226,96227,96230,96232],{"class":38,"line":54},[36,96228,96229],{"class":42},"np.tile(a,",[36,96231,1911],{"class":62},[36,96233,123],{"class":42},[36,96235,96236],{"class":38,"line":66},[36,96237,95905],{"class":2621},[36,96239,96240],{"class":38,"line":73},[36,96241,96242],{"class":2621},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,96244,96245],{"class":38,"line":86},[36,96246,96247],{"class":2621},"#行复制两次，列复制三次\n",[36,96249,96250,96253,96255,96257,96259],{"class":38,"line":126},[36,96251,96252],{"class":42},"np.tile(a,(",[36,96254,1911],{"class":62},[36,96256,2934],{"class":42},[36,96258,2634],{"class":62},[36,96260,1914],{"class":42},[36,96262,96263],{"class":38,"line":131},[36,96264,95905],{"class":2621},[36,96266,96267],{"class":38,"line":225},[36,96268,96269],{"class":50},"'''\n",[36,96271,96272],{"class":38,"line":235},[36,96273,96274],{"class":50},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,96276,96277],{"class":38,"line":377},[36,96278,96279],{"class":50},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,96281,96282],{"class":38,"line":617},[36,96283,96269],{"class":50},[36,96285,96286],{"class":38,"line":643},[36,96287,96288],{"class":2621},"#创建二维数组\n",[36,96290,96291,96293,96295,96297,96299,96301,96303,96305,96307,96309,96311],{"class":38,"line":921},[36,96292,95647],{"class":42},[36,96294,47],{"class":46},[36,96296,95343],{"class":42},[36,96298,1906],{"class":62},[36,96300,2934],{"class":42},[36,96302,3078],{"class":62},[36,96304,95348],{"class":42},[36,96306,2850],{"class":62},[36,96308,2934],{"class":42},[36,96310,2634],{"class":62},[36,96312,123],{"class":42},[36,96314,96315,96318,96320,96322],{"class":38,"line":934},[36,96316,96317],{"class":42},"np.tile(aa,",[36,96319,1911],{"class":62},[36,96321,2985],{"class":42},[36,96323,96324],{"class":2621},"#一个数的时候就是行\n",[36,96326,96327],{"class":38,"line":939},[36,96328,95905],{"class":2621},[36,96330,96331],{"class":38,"line":949},[36,96332,96269],{"class":50},[36,96334,96335],{"class":38,"line":962},[36,96336,96337],{"class":50},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,96339,96340],{"class":38,"line":974},[36,96341,96342],{"class":50},"       [ 4,  5,  6,  4,  5,  6],\n",[36,96344,96345],{"class":38,"line":979},[36,96346,96347],{"class":50},"       [ 7,  8,  9,  7,  8,  9],\n",[36,96349,96350],{"class":38,"line":994},[36,96351,96352],{"class":50},"       [10, 11, 12, 10, 11, 12]])\n",[36,96354,96355],{"class":38,"line":1006},[36,96356,96269],{"class":50},[36,96358,96359,96362,96364,96366,96368],{"class":38,"line":1011},[36,96360,96361],{"class":42},"np.tile(aa,(",[36,96363,1911],{"class":62},[36,96365,2934],{"class":42},[36,96367,2634],{"class":62},[36,96369,1914],{"class":42},[36,96371,96372],{"class":38,"line":1023},[36,96373,95905],{"class":2621},[36,96375,96376],{"class":38,"line":1028},[36,96377,96269],{"class":50},[36,96379,96380],{"class":38,"line":1033},[36,96381,96382],{"class":50},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,96384,96385],{"class":38,"line":1053},[36,96386,96387],{"class":50},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,96389,96390],{"class":38,"line":1064},[36,96391,96392],{"class":50},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,96394,96395],{"class":38,"line":1075},[36,96396,96397],{"class":50},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,96399,96400],{"class":38,"line":2291},[36,96401,96402],{"class":50},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,96404,96405],{"class":38,"line":2329},[36,96406,96387],{"class":50},[36,96408,96409],{"class":38,"line":2334},[36,96410,96392],{"class":50},[36,96412,96413],{"class":38,"line":2339},[36,96414,96415],{"class":50},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,96417,96418],{"class":38,"line":2365},[36,96419,96269],{"class":50},[14,96421,96423],{"id":96422},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96425,96426],{},"repeat()将数组中的每个元素重复若干次",[26,96428,96430],{"className":28,"code":96429,"language":30,"meta":31,"style":31},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[33,96431,96432,96448,96457,96461,96466,96490,96495,96504,96508,96513,96517,96522,96538,96542,96546,96551,96556,96561,96565,96570,96574,96579,96584,96588,96604,96608,96612,96617,96622,96627,96632],{"__ignoreMap":31},[36,96433,96434,96436,96438,96440,96442,96444,96446],{"class":38,"line":39},[36,96435,2796],{"class":42},[36,96437,47],{"class":46},[36,96439,95343],{"class":42},[36,96441,1906],{"class":62},[36,96443,2934],{"class":42},[36,96445,2875],{"class":62},[36,96447,123],{"class":42},[36,96449,96450,96453,96455],{"class":38,"line":54},[36,96451,96452],{"class":42},"np.repeat(a,",[36,96454,2634],{"class":62},[36,96456,123],{"class":42},[36,96458,96459],{"class":38,"line":66},[36,96460,95905],{"class":2621},[36,96462,96463],{"class":38,"line":73},[36,96464,96465],{"class":2621},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,96467,96468,96470,96472,96474,96476,96478,96480,96482,96484,96486,96488],{"class":38,"line":86},[36,96469,95647],{"class":42},[36,96471,47],{"class":46},[36,96473,95343],{"class":42},[36,96475,1906],{"class":62},[36,96477,2934],{"class":42},[36,96479,3078],{"class":62},[36,96481,95348],{"class":42},[36,96483,2850],{"class":62},[36,96485,2934],{"class":42},[36,96487,2634],{"class":62},[36,96489,123],{"class":42},[36,96491,96492],{"class":38,"line":126},[36,96493,96494],{"class":2621},"#这个重复之后二维变成一维\n",[36,96496,96497,96500,96502],{"class":38,"line":131},[36,96498,96499],{"class":42},"np.repeat(aa,",[36,96501,1911],{"class":62},[36,96503,123],{"class":42},[36,96505,96506],{"class":38,"line":225},[36,96507,96269],{"class":50},[36,96509,96510],{"class":38,"line":235},[36,96511,96512],{"class":50},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[36,96514,96515],{"class":38,"line":377},[36,96516,96269],{"class":50},[36,96518,96519],{"class":38,"line":617},[36,96520,96521],{"class":2621},"#指定axis\n",[36,96523,96524,96526,96528,96530,96532,96534,96536],{"class":38,"line":643},[36,96525,96499],{"class":42},[36,96527,1911],{"class":62},[36,96529,2934],{"class":42},[36,96531,49863],{"class":7598},[36,96533,47],{"class":46},[36,96535,2751],{"class":62},[36,96537,123],{"class":42},[36,96539,96540],{"class":38,"line":921},[36,96541,95905],{"class":2621},[36,96543,96544],{"class":38,"line":934},[36,96545,96269],{"class":50},[36,96547,96548],{"class":38,"line":939},[36,96549,96550],{"class":50},"array([[ 1,  2,  3],\n",[36,96552,96553],{"class":38,"line":949},[36,96554,96555],{"class":50},"       [ 1,  2,  3],\n",[36,96557,96558],{"class":38,"line":962},[36,96559,96560],{"class":50},"       [ 4,  5,  6],\n",[36,96562,96563],{"class":38,"line":974},[36,96564,96560],{"class":50},[36,96566,96567],{"class":38,"line":979},[36,96568,96569],{"class":50},"       [ 7,  8,  9],\n",[36,96571,96572],{"class":38,"line":994},[36,96573,96569],{"class":50},[36,96575,96576],{"class":38,"line":1006},[36,96577,96578],{"class":50},"       [10, 11, 12],\n",[36,96580,96581],{"class":38,"line":1011},[36,96582,96583],{"class":50},"       [10, 11, 12]])\n",[36,96585,96586],{"class":38,"line":1023},[36,96587,96269],{"class":50},[36,96589,96590,96592,96594,96596,96598,96600,96602],{"class":38,"line":1028},[36,96591,96499],{"class":42},[36,96593,1911],{"class":62},[36,96595,2934],{"class":42},[36,96597,49863],{"class":7598},[36,96599,47],{"class":46},[36,96601,1906],{"class":62},[36,96603,123],{"class":42},[36,96605,96606],{"class":38,"line":1033},[36,96607,95905],{"class":2621},[36,96609,96610],{"class":38,"line":1053},[36,96611,96269],{"class":50},[36,96613,96614],{"class":38,"line":1064},[36,96615,96616],{"class":50},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,96618,96619],{"class":38,"line":1075},[36,96620,96621],{"class":50},"       [ 4,  4,  5,  5,  6,  6],\n",[36,96623,96624],{"class":38,"line":2291},[36,96625,96626],{"class":50},"       [ 7,  7,  8,  8,  9,  9],\n",[36,96628,96629],{"class":38,"line":2329},[36,96630,96631],{"class":50},"       [10, 10, 11, 11, 12, 12]])\n",[36,96633,96634],{"class":38,"line":2334},[36,96635,96269],{"class":50},[14,96637,96639],{"id":96638},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,96641,96643],{"className":28,"code":96642,"language":30,"meta":31,"style":31},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[33,96644,96645,96661,96666,96678,96682,96687,96697,96701],{"__ignoreMap":31},[36,96646,96647,96649,96651,96653,96655,96657,96659],{"class":38,"line":39},[36,96648,2796],{"class":42},[36,96650,47],{"class":46},[36,96652,95343],{"class":42},[36,96654,1906],{"class":62},[36,96656,2934],{"class":42},[36,96658,2875],{"class":62},[36,96660,123],{"class":42},[36,96662,96663],{"class":38,"line":54},[36,96664,96665],{"class":2621},"#array([，2，3，4])\n",[36,96667,96668,96671,96673,96675],{"class":38,"line":66},[36,96669,96670],{"class":42},"np.roll(a,",[36,96672,1911],{"class":62},[36,96674,2985],{"class":42},[36,96676,96677],{"class":2621},"#传正数向后调多少位，传负数向前调多少位\n",[36,96679,96680],{"class":38,"line":73},[36,96681,95905],{"class":2621},[36,96683,96684],{"class":38,"line":86},[36,96685,96686],{"class":2621},"#array([3, 4, 1, 2])\n",[36,96688,96689,96691,96693,96695],{"class":38,"line":126},[36,96690,96670],{"class":42},[36,96692,3087],{"class":46},[36,96694,1906],{"class":62},[36,96696,123],{"class":42},[36,96698,96699],{"class":38,"line":131},[36,96700,95905],{"class":2621},[36,96702,96703],{"class":38,"line":225},[36,96704,96705],{"class":2621},"#array([2, 3, 4, 1])\n",[19,96707,96708],{},[3879,96709],{"alt":31,"src":96710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96712,96714],{"id":96713},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96716,96717],{},"resize()重新调整数组的大小",[19,96719,96720],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,96722,96724],{"className":28,"code":96723,"language":30,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,96725,96726,96731,96744],{"__ignoreMap":31},[36,96727,96728],{"class":38,"line":39},[36,96729,96730],{"class":2621},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,96732,96733,96736,96738,96740,96742],{"class":38,"line":54},[36,96734,96735],{"class":42},"np.resize(aa,(",[36,96737,1911],{"class":62},[36,96739,2934],{"class":42},[36,96741,2900],{"class":62},[36,96743,1914],{"class":42},[36,96745,96746,96748,96750,96752,96754,96756],{"class":38,"line":66},[36,96747,96735],{"class":42},[36,96749,1911],{"class":62},[36,96751,2934],{"class":42},[36,96753,2976],{"class":62},[36,96755,85113],{"class":42},[36,96757,96758],{"class":2621},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96760,96762],{"id":96761},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96764,96765],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96767,96768],{},[3879,96769],{"alt":31,"src":96770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96772,96774],{"id":96773},"_126-保存加载文件","12.6 保存加载文件",[19,96776,96777],{},"savetxt():将数据保存到txt文件中",[19,96779,96780],{},"loadtxt():从文件加载数据",[19,96782,96783],{},[3879,96784],{"alt":31,"src":96785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96787,96789],{"id":96788},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96791,96792],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96794,96796],{"id":96795},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96798,96799],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96801,96802],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96804,96805],{},[3879,96806],{"alt":31,"src":96807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96809,96811],{"id":96810},"_129-where语句","12.9 where语句",[19,96813,96814],{},"np.where(条件,x,y)",[19,96816,96817],{},"如果条件为True,对应值为x,否则对应值为y",[19,96819,96820],{},[3879,96821],{"alt":31,"src":96822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96824,96826],{"id":96825},"_1210-dot矩阵","12.10 dot()矩阵",[19,96828,96829],{},[3879,96830],{"alt":31,"src":96831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2467,96833,96834],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":96836},[96837,96838,96839,96840,96841,96842,96843,96844,96845,96846],{"id":96199,"depth":54,"text":96200},{"id":96422,"depth":54,"text":96423},{"id":96638,"depth":54,"text":96639},{"id":96713,"depth":54,"text":96714},{"id":96761,"depth":54,"text":96762},{"id":96773,"depth":54,"text":96774},{"id":96788,"depth":54,"text":96789},{"id":96795,"depth":54,"text":96796},{"id":96810,"depth":54,"text":96811},{"id":96825,"depth":54,"text":96826},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96191,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96853,"title":96854,"body":96855,"description":2493,"extension":2494,"meta":97208,"navigation":69,"path":97209,"seo":97210,"stem":97211,"__hash__":97212},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96856,"toc":97206},[96857,96860,96863,96866,96869,96872,96937,96939,97203],[10,96858,96854],{"id":96859},"_13数组排序",[19,96861,96862],{},"排序主要用到的方法是np.sort和np.argsort",[19,96864,96865],{},"其中np.sort()对数组直接排序",[19,96867,96868],{},"而np.argsort()是返回排序后的原始索引",[19,96870,96871],{},"①一维数组",[26,96873,96875],{"className":28,"code":96874,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,96876,96877,96881,96921,96929],{"__ignoreMap":31},[36,96878,96879],{"class":38,"line":39},[36,96880,95446],{"class":2621},[36,96882,96883,96885,96887,96889,96891,96893,96895,96897,96899,96901,96903,96905,96907,96909,96911,96913,96915,96917,96919],{"class":38,"line":54},[36,96884,2796],{"class":42},[36,96886,47],{"class":46},[36,96888,95365],{"class":42},[36,96890,2634],{"class":62},[36,96892,2934],{"class":42},[36,96894,3053],{"class":62},[36,96896,2934],{"class":42},[36,96898,2951],{"class":62},[36,96900,2934],{"class":42},[36,96902,3329],{"class":62},[36,96904,2934],{"class":42},[36,96906,2836],{"class":62},[36,96908,2934],{"class":42},[36,96910,3447],{"class":62},[36,96912,2934],{"class":42},[36,96914,2900],{"class":62},[36,96916,2934],{"class":42},[36,96918,3002],{"class":62},[36,96920,7040],{"class":42},[36,96922,96923,96926],{"class":38,"line":66},[36,96924,96925],{"class":42},"np.sort(a)",[36,96927,96928],{"class":2621},"#升序排序\n",[36,96930,96931,96934],{"class":38,"line":73},[36,96932,96933],{"class":42},"np.argsort(a)",[36,96935,96936],{"class":2621},"#按照元素大小来索引排序\n",[19,96938,95632],{},[26,96940,96942],{"className":28,"code":96941,"language":30,"meta":31,"style":31},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[33,96943,96944,96956,96982,96987,96991,96996,97001,97006,97011,97015,97023,97027,97032,97037,97042,97047,97051,97056,97069,97073,97078,97083,97088,97093,97097,97102,97114,97118,97122,97126,97130,97134,97138,97143,97158,97163,97172,97177,97181,97185,97190,97194,97199],{"__ignoreMap":31},[36,96945,96946,96949,96951,96953],{"class":38,"line":39},[36,96947,96948],{"class":42},"np.random.seed(",[36,96950,2751],{"class":62},[36,96952,2985],{"class":42},[36,96954,96955],{"class":2621},"#保证每次值一样\n",[36,96957,96958,96960,96962,96964,96966,96968,96970,96972,96974,96976,96978,96980],{"class":38,"line":54},[36,96959,95647],{"class":42},[36,96961,47],{"class":46},[36,96963,95455],{"class":42},[36,96965,1070],{"class":62},[36,96967,2934],{"class":42},[36,96969,33850],{"class":7598},[36,96971,47],{"class":46},[36,96973,92],{"class":42},[36,96975,2850],{"class":62},[36,96977,2934],{"class":42},[36,96979,2900],{"class":62},[36,96981,1914],{"class":42},[36,96983,96984],{"class":38,"line":66},[36,96985,96986],{"class":2621},"#原数组：\n",[36,96988,96989],{"class":38,"line":73},[36,96990,96269],{"class":50},[36,96992,96993],{"class":38,"line":86},[36,96994,96995],{"class":50},"array([[44, 47, 64, 67, 67,  9],\n",[36,96997,96998],{"class":38,"line":126},[36,96999,97000],{"class":50},"       [83, 21, 36, 87, 70, 88],\n",[36,97002,97003],{"class":38,"line":131},[36,97004,97005],{"class":50},"       [88, 12, 58, 65, 39, 87],\n",[36,97007,97008],{"class":38,"line":225},[36,97009,97010],{"class":50},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,97012,97013],{"class":38,"line":235},[36,97014,96269],{"class":50},[36,97016,97017,97020],{"class":38,"line":377},[36,97018,97019],{"class":42},"np.sort(aa)",[36,97021,97022],{"class":2621},"#每行进行了排序\n",[36,97024,97025],{"class":38,"line":617},[36,97026,96269],{"class":50},[36,97028,97029],{"class":38,"line":643},[36,97030,97031],{"class":50},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,97033,97034],{"class":38,"line":921},[36,97035,97036],{"class":50},"       [21, 36, 70, 83, 87, 88],\n",[36,97038,97039],{"class":38,"line":934},[36,97040,97041],{"class":50},"       [12, 39, 58, 65, 87, 88],\n",[36,97043,97044],{"class":38,"line":939},[36,97045,97046],{"class":50},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,97048,97049],{"class":38,"line":949},[36,97050,96269],{"class":50},[36,97052,97053],{"class":38,"line":962},[36,97054,97055],{"class":2621},"#axis=0时\n",[36,97057,97058,97061,97063,97065,97067],{"class":38,"line":974},[36,97059,97060],{"class":42},"np.sort(aa,",[36,97062,49863],{"class":7598},[36,97064,47],{"class":46},[36,97066,2751],{"class":62},[36,97068,123],{"class":42},[36,97070,97071],{"class":38,"line":979},[36,97072,96269],{"class":50},[36,97074,97075],{"class":38,"line":994},[36,97076,97077],{"class":50},"array([[44, 12, 36, 37, 25,  9],\n",[36,97079,97080],{"class":38,"line":1006},[36,97081,97082],{"class":50},"       [46, 21, 58, 65, 39, 77],\n",[36,97084,97085],{"class":38,"line":1011},[36,97086,97087],{"class":50},"       [83, 47, 64, 67, 67, 87],\n",[36,97089,97090],{"class":38,"line":1023},[36,97091,97092],{"class":50},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,97094,97095],{"class":38,"line":1028},[36,97096,96269],{"class":50},[36,97098,97099],{"class":38,"line":1033},[36,97100,97101],{"class":2621},"#axis=1时,为默认值\n",[36,97103,97104,97106,97108,97110,97112],{"class":38,"line":1053},[36,97105,97060],{"class":42},[36,97107,49863],{"class":7598},[36,97109,47],{"class":46},[36,97111,1906],{"class":62},[36,97113,123],{"class":42},[36,97115,97116],{"class":38,"line":1064},[36,97117,96269],{"class":50},[36,97119,97120],{"class":38,"line":1075},[36,97121,97031],{"class":50},[36,97123,97124],{"class":38,"line":2291},[36,97125,97036],{"class":50},[36,97127,97128],{"class":38,"line":2329},[36,97129,97041],{"class":50},[36,97131,97132],{"class":38,"line":2334},[36,97133,97046],{"class":50},[36,97135,97136],{"class":38,"line":2339},[36,97137,96269],{"class":50},[36,97139,97140],{"class":38,"line":2365},[36,97141,97142],{"class":2621},"#按最后一列排序\n",[36,97144,97145,97147,97149,97152,97154,97156],{"class":38,"line":2373},[36,97146,2820],{"class":42},[36,97148,47],{"class":46},[36,97150,97151],{"class":42},"aa[:,",[36,97153,3087],{"class":46},[36,97155,1906],{"class":62},[36,97157,35598],{"class":42},[36,97159,97160],{"class":38,"line":5001},[36,97161,97162],{"class":2621},"#获取最后一列排好序的索引\n",[36,97164,97165,97167,97169],{"class":38,"line":5006},[36,97166,76403],{"class":42},[36,97168,47],{"class":46},[36,97170,97171],{"class":42},"np.argsort(b)\n",[36,97173,97174],{"class":38,"line":10328},[36,97175,97176],{"class":42},"aa[index]\n",[36,97178,97179],{"class":38,"line":10352},[36,97180,96269],{"class":50},[36,97182,97183],{"class":38,"line":10357},[36,97184,96995],{"class":50},[36,97186,97187],{"class":38,"line":10363},[36,97188,97189],{"class":50},"       [46, 88, 81, 37, 25, 77],\n",[36,97191,97192],{"class":38,"line":10390},[36,97193,97005],{"class":50},[36,97195,97196],{"class":38,"line":10395},[36,97197,97198],{"class":50},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,97200,97201],{"class":38,"line":10401},[36,97202,96269],{"class":50},[2467,97204,97205],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":97207},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96854,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97214,"title":97215,"body":97216,"description":2493,"extension":2494,"meta":97246,"navigation":69,"path":97247,"seo":97248,"stem":97249,"__hash__":97250},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97217,"toc":97244},[97218,97221,97224,97227,97230,97233,97236,97239],[10,97219,97215],{"id":97220},"_14广播机制",[19,97222,97223],{},"广播的规则：",[19,97225,97226],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97228,97229],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97231,97232],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97234,97235],{},"3.如果没有维度形状为1，则会引发异常",[19,97237,97238],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97240,97241],{},[3879,97242],{"alt":31,"src":97243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":54,"depth":54,"links":97245},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97215,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97252,"title":97253,"body":97254,"description":2493,"extension":2494,"meta":97352,"navigation":69,"path":97353,"seo":97354,"stem":97355,"__hash__":97356},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97255,"toc":97350},[97256,97259,97262,97347],[10,97257,97253],{"id":97258},"_15比较掩码",[19,97260,97261],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,97263,97265],{"className":28,"code":97264,"language":30,"meta":31,"style":31},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[33,97266,97267,97313,97324,97338,97342],{"__ignoreMap":31},[36,97268,97269,97271,97273,97276,97278,97280,97282,97284,97286,97288,97290,97292,97294,97296,97298,97300,97302,97304,97306,97308,97310],{"class":38,"line":39},[36,97270,2796],{"class":42},[36,97272,47],{"class":46},[36,97274,97275],{"class":42},"np.array([[",[36,97277,1906],{"class":62},[36,97279,2934],{"class":42},[36,97281,1911],{"class":62},[36,97283,2934],{"class":42},[36,97285,2634],{"class":62},[36,97287,50379],{"class":42},[36,97289,3028],{"class":62},[36,97291,2934],{"class":42},[36,97293,3053],{"class":62},[36,97295,2934],{"class":42},[36,97297,3078],{"class":62},[36,97299,50379],{"class":42},[36,97301,3279],{"class":62},[36,97303,2934],{"class":42},[36,97305,3304],{"class":62},[36,97307,2934],{"class":42},[36,97309,3329],{"class":62},[36,97311,97312],{"class":42},"]])\n",[36,97314,97315,97317,97319,97321],{"class":38,"line":54},[36,97316,2796],{"class":42},[36,97318,3463],{"class":46},[36,97320,3254],{"class":62},[36,97322,97323],{"class":2621},"#结果是一个由True,False组成的数组\n",[36,97325,97326,97329,97331,97333,97335],{"class":38,"line":66},[36,97327,97328],{"class":42},"a[a",[36,97330,3463],{"class":46},[36,97332,3254],{"class":62},[36,97334,3493],{"class":42},[36,97336,97337],{"class":2621},"#小于20的元素会存到这个数组中\n",[36,97339,97340],{"class":38,"line":73},[36,97341,95905],{"class":2621},[36,97343,97344],{"class":38,"line":86},[36,97345,97346],{"class":2621},"#array([ 1,  2,  3, 11, 12, 13])\n",[2467,97348,97349],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":97351},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97253,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97358,"title":97359,"body":97360,"description":2493,"extension":2494,"meta":97452,"navigation":69,"path":97453,"seo":97454,"stem":97455,"__hash__":97456},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97361,"toc":97450},[97362,97365,97368,97371,97374,97377,97442,97447],[10,97363,97359],{"id":97364},"_16魔法命令time",[19,97366,97367],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97369,97370],{},"%:行模式",[19,97372,97373],{},"%%:单元格模式",[19,97375,97376],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,97378,97380],{"className":28,"code":97379,"language":30,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,97381,97382,97387,97394,97399,97408,97421,97425,97433],{"__ignoreMap":31},[36,97383,97384],{"class":38,"line":39},[36,97385,97386],{"class":2621},"#程序执行时间\n",[36,97388,97389,97391],{"class":38,"line":54},[36,97390,1943],{"class":46},[36,97392,97393],{"class":42}," time \n",[36,97395,97396],{"class":38,"line":66},[36,97397,97398],{"class":2621},"#获取时间\n",[36,97400,97401,97404,97406],{"class":38,"line":73},[36,97402,97403],{"class":42},"start",[36,97405,47],{"class":46},[36,97407,34771],{"class":42},[36,97409,97410,97413,97416,97418],{"class":38,"line":86},[36,97411,97412],{"class":42},"time.sleep(",[36,97414,97415],{"class":62},"0.4",[36,97417,2985],{"class":42},[36,97419,97420],{"class":2621},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,97422,97423],{"class":38,"line":126},[36,97424,97398],{"class":2621},[36,97426,97427,97429,97431],{"class":38,"line":131},[36,97428,48150],{"class":42},[36,97430,47],{"class":46},[36,97432,34771],{"class":42},[36,97434,97435,97437,97439],{"class":38,"line":225},[36,97436,48150],{"class":42},[36,97438,3087],{"class":46},[36,97440,97441],{"class":42},"start\n",[19,97443,97444],{},[3879,97445],{"alt":31,"src":97446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2467,97448,97449],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":97451},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97359,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97458,"title":97459,"body":97460,"description":2493,"extension":2494,"meta":97495,"navigation":69,"path":97496,"seo":97497,"stem":97498,"__hash__":97499},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97461,"toc":97493},[97462,97465,97468,97471,97474,97477,97480,97483,97488],[10,97463,97459],{"id":97464},"_17魔法命令timeit",[19,97466,97467],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97469,97470],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97472,97473],{},"单元格模式：",[19,97475,97476],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97478,97479],{},"初始化语句执行次数由轮数来决定",[19,97481,97482],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97484,97485],{},[3879,97486],{"alt":31,"src":97487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97489,97490],{},[3879,97491],{"alt":31,"src":97492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":54,"depth":54,"links":97494},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97459,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97501,"title":97502,"body":97503,"description":2493,"extension":2494,"meta":97521,"navigation":69,"path":97522,"seo":97523,"stem":97524,"__hash__":97525},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97504,"toc":97519},[97505,97508,97511,97514],[10,97506,97502],{"id":97507},"_18魔法命令writefile和run",[19,97509,97510],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97512,97513],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97515,97516],{},[3879,97517],{"alt":31,"src":97518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":54,"depth":54,"links":97520},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97502,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97527,"title":97528,"body":97529,"description":2493,"extension":2494,"meta":97582,"navigation":69,"path":97583,"seo":97584,"stem":97585,"__hash__":97586},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97530,"toc":97580},[97531,97534,97537,97539,97542,97545,97550,97553,97556,97559,97562,97565,97568,97571,97574,97577],[10,97532,97528],{"id":97533},"_19魔法命令memit",[19,97535,97536],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97538,26970],{},[19,97540,97541],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97543,97544],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97546,97547],{},[3879,97548],{"alt":31,"src":97549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97551,97552],{},"补充：",[19,97554,97555],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97557,97558],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97560,97561],{},"解决方法：",[19,97563,97564],{},"1.cmd",[19,97566,97567],{},"2.依次输入以下代码：",[19,97569,97570],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97572,97573],{},"pip install --upgrade ipython",[19,97575,97576],{},"#升级 memory_profiler 和 setuptools",[19,97578,97579],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":54,"depth":54,"links":97581},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97528,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97588,"title":97589,"body":97590,"description":2493,"extension":2494,"meta":99236,"navigation":69,"path":99237,"seo":99238,"stem":99239,"__hash__":99240},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97591,"toc":99206},[97592,97595,97599,97603,97664,97667,97672,97676,97681,97686,97691,97696,97699,97704,97708,97712,97745,97748,97751,97754,97806,97809,97845,97848,97890,97894,97915,97917,97954,97956,97961,97963,97968,97972,97975,98003,98007,98011,98064,98068,98160,98164,98168,98171,98176,98180,98205,98210,98214,98217,98220,98223,98226,98229,98232,98235,98247,98251,98255,98258,98290,98293,98316,98319,98345,98348,98374,98377,98411,98414,98476,98480,98483,98487,98490,98516,98519,98522,98527,98530,98599,98601,98606,98667,98670,98681,98687,98692,98696,98699,98712,98716,98731,98733,98756,98758,98784,98787,98790,98793,98841,98843,98848,98852,98856,98883,98887,98914,98917,98922,98927,99017,99021,99079,99084,99087,99090,99132,99136,99192,99197,99200,99203],[10,97593,97589],{"id":97594},"_2创建数组",[14,97596,97598],{"id":97597},"_21-array函数创建数组","2.1 array()函数创建数组",[1752,97600,97602],{"id":97601},"_221-函数语句","2.2.1 函数语句",[26,97604,97606],{"className":28,"code":97605,"language":30,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,97607,97608],{"__ignoreMap":31},[36,97609,97610,97613,97616,97618,97620,97622,97624,97626,97629,97631,97634,97636,97639,97641,97643,97645,97648,97650,97653,97655,97658,97660,97662],{"class":38,"line":39},[36,97611,97612],{"class":42},"numpy.array(",[36,97614,97615],{"class":62},"object",[36,97617,630],{"class":42},[36,97619,95841],{"class":7598},[36,97621,15941],{"class":46},[36,97623,41282],{"class":62},[36,97625,630],{"class":42},[36,97627,97628],{"class":7598},"copy",[36,97630,15941],{"class":46},[36,97632,97633],{"class":62}," True",[36,97635,630],{"class":42},[36,97637,97638],{"class":7598},"order",[36,97640,15941],{"class":46},[36,97642,41282],{"class":62},[36,97644,630],{"class":42},[36,97646,97647],{"class":7598},"subok",[36,97649,15941],{"class":46},[36,97651,97652],{"class":62}," False",[36,97654,630],{"class":42},[36,97656,97657],{"class":7598},"ndmin",[36,97659,15941],{"class":46},[36,97661,899],{"class":62},[36,97663,123],{"class":42},[19,97665,97666],{},"参数：",[19,97668,97669],{},[3879,97670],{"alt":31,"src":97671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1752,97673,97675],{"id":97674},"_222-实例","2.2.2 实例",[19,97677,97678],{},[3879,97679],{"alt":31,"src":97680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97682,97683],{},[3879,97684],{"alt":31,"src":97685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97687,97688],{},[3879,97689],{"alt":31,"src":97690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97692,97693],{},[3879,97694],{"alt":31,"src":97695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97697,97698],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97700,97701],{},[3879,97702],{"alt":31,"src":97703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97705,97707],{"id":97706},"_22-随机数创建数组","2.2 随机数创建数组",[1752,97709,97711],{"id":97710},"_221-random语句","2.2.1 random语句",[26,97713,97715],{"className":28,"code":97714,"language":30,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,97716,97717,97722,97727,97735,97740],{"__ignoreMap":31},[36,97718,97719],{"class":38,"line":39},[36,97720,97721],{"class":2621},"#random.random()\n",[36,97723,97724],{"class":38,"line":54},[36,97725,97726],{"class":2621},"#确定随机种子,就是每次运行结果是相同的\n",[36,97728,97729,97731,97733],{"class":38,"line":66},[36,97730,96948],{"class":42},[36,97732,2751],{"class":62},[36,97734,123],{"class":42},[36,97736,97737],{"class":38,"line":73},[36,97738,97739],{"class":42},"np.random.random()\n",[36,97741,97742],{"class":38,"line":86},[36,97743,97744],{"class":2621},"#生成一个随机的数目\n",[19,97746,97747],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97749,97750],{},"可以指定数组形状 size",[19,97752,97753],{},"①生成一维数组",[26,97755,97757],{"className":28,"code":97756,"language":30,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,97758,97759,97764,97777,97782,97798],{"__ignoreMap":31},[36,97760,97761],{"class":38,"line":39},[36,97762,97763],{"class":2621},"#random.random(size())\n",[36,97765,97766,97769,97771,97773,97775],{"class":38,"line":54},[36,97767,97768],{"class":42},"np.random.random(",[36,97770,33850],{"class":7598},[36,97772,47],{"class":46},[36,97774,2875],{"class":62},[36,97776,123],{"class":42},[36,97778,97779],{"class":38,"line":66},[36,97780,97781],{"class":2621},"#生成一位的五个元素\n",[36,97783,97784,97786,97788,97790,97792,97794,97796],{"class":38,"line":73},[36,97785,2796],{"class":42},[36,97787,47],{"class":46},[36,97789,97768],{"class":42},[36,97791,33850],{"class":7598},[36,97793,47],{"class":46},[36,97795,2850],{"class":62},[36,97797,123],{"class":42},[36,97799,97800,97803],{"class":38,"line":86},[36,97801,97802],{"class":42},"a.shape ",[36,97804,97805],{"class":2621},"#输出数组形状\n",[19,97807,97808],{},"②生成二维数组",[26,97810,97812],{"className":28,"code":97811,"language":30,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,97813,97814,97818,97840],{"__ignoreMap":31},[36,97815,97816],{"class":38,"line":39},[36,97817,95642],{"class":2621},[36,97819,97820,97822,97824,97826,97828,97830,97832,97834,97836,97838],{"class":38,"line":54},[36,97821,95647],{"class":42},[36,97823,47],{"class":46},[36,97825,97768],{"class":42},[36,97827,33850],{"class":7598},[36,97829,47],{"class":46},[36,97831,92],{"class":42},[36,97833,2850],{"class":62},[36,97835,2934],{"class":42},[36,97837,2875],{"class":62},[36,97839,1914],{"class":42},[36,97841,97842],{"class":38,"line":66},[36,97843,97844],{"class":2621},"#生成四行五列的数组\n",[19,97846,97847],{},"③生成三维数组",[26,97849,97851],{"className":28,"code":97850,"language":30,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,97852,97853,97858,97885],{"__ignoreMap":31},[36,97854,97855],{"class":38,"line":39},[36,97856,97857],{"class":2621},"#三维数组\n",[36,97859,97860,97863,97865,97867,97869,97871,97873,97875,97877,97879,97881,97883],{"class":38,"line":54},[36,97861,97862],{"class":42},"aaa",[36,97864,47],{"class":46},[36,97866,97768],{"class":42},[36,97868,33850],{"class":7598},[36,97870,47],{"class":46},[36,97872,92],{"class":42},[36,97874,1911],{"class":62},[36,97876,2934],{"class":42},[36,97878,2634],{"class":62},[36,97880,2934],{"class":42},[36,97882,2850],{"class":62},[36,97884,1914],{"class":42},[36,97886,97887],{"class":38,"line":66},[36,97888,97889],{"class":42},"aaa.shape\n",[1752,97891,97893],{"id":97892},"_222-randint语句","2.2.2 randint语句",[26,97895,97897],{"className":28,"code":97896,"language":30,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,97898,97899,97904],{"__ignoreMap":31},[36,97900,97901],{"class":38,"line":39},[36,97902,97903],{"class":2621},"#生成随机的整数 random.randint(low,high,size)\n",[36,97905,97906,97908,97910,97912],{"class":38,"line":54},[36,97907,95455],{"class":42},[36,97909,2875],{"class":62},[36,97911,16091],{"class":42},[36,97913,97914],{"class":2621},"#0~5中的随机一个数\n",[19,97916,97753],{},[26,97918,97920],{"className":28,"code":97919,"language":30,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,97921,97922,97927,97949],{"__ignoreMap":31},[36,97923,97924],{"class":38,"line":39},[36,97925,97926],{"class":2621},"#一维\n",[36,97928,97929,97931,97933,97935,97937,97939,97941,97943,97945,97947],{"class":38,"line":54},[36,97930,95455],{"class":42},[36,97932,1906],{"class":62},[36,97934,2934],{"class":42},[36,97936,3028],{"class":62},[36,97938,2934],{"class":42},[36,97940,33850],{"class":7598},[36,97942,47],{"class":46},[36,97944,92],{"class":42},[36,97946,3002],{"class":62},[36,97948,1914],{"class":42},[36,97950,97951],{"class":38,"line":66},[36,97952,97953],{"class":2621},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97955,97808],{},[19,97957,97958],{},[3879,97959],{"alt":31,"src":97960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97962,97847],{},[19,97964,97965],{},[3879,97966],{"alt":31,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1752,97969,97971],{"id":97970},"_222-rand语句","2.2.2 rand语句",[19,97973,97974],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,97976,97978],{"className":28,"code":97977,"language":30,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,97979,97980,97993,97998],{"__ignoreMap":31},[36,97981,97982,97985,97987,97989,97991],{"class":38,"line":39},[36,97983,97984],{"class":42},"np.random.rand(",[36,97986,1070],{"class":62},[36,97988,2934],{"class":42},[36,97990,3002],{"class":62},[36,97992,123],{"class":42},[36,97994,97995],{"class":38,"line":54},[36,97996,97997],{"class":2621},"#第一个参数100：行数，表示有100个样本\n",[36,97999,98000],{"class":38,"line":66},[36,98001,98002],{"class":2621},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98004,98006],{"id":98005},"_23-arange创建数组","2.3 arange()创建数组",[1752,98008,98010],{"id":98009},"_231-函数语句","2.3.1 函数语句",[26,98012,98014],{"className":28,"code":98013,"language":30,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,98015,98016,98030,98035,98040,98045,98050,98055,98060],{"__ignoreMap":31},[36,98017,98018,98021,98023,98025,98028],{"class":38,"line":39},[36,98019,98020],{"class":42},"numpy.arange([start,] stop[, step], ",[36,98022,95841],{"class":7598},[36,98024,47],{"class":46},[36,98026,98027],{"class":62},"None",[36,98029,123],{"class":42},[36,98031,98032],{"class":38,"line":54},[36,98033,98034],{"class":2621},"#参数\n",[36,98036,98037],{"class":38,"line":66},[36,98038,98039],{"class":50},"\"\"\"\n",[36,98041,98042],{"class":38,"line":73},[36,98043,98044],{"class":50},"start:起始值，可选，默认从 0 开始。\n",[36,98046,98047],{"class":38,"line":86},[36,98048,98049],{"class":50},"stop:结束值（不包含该值）。\n",[36,98051,98052],{"class":38,"line":126},[36,98053,98054],{"class":50},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,98056,98057],{"class":38,"line":131},[36,98058,98059],{"class":50},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,98061,98062],{"class":38,"line":225},[36,98063,98039],{"class":50},[1752,98065,98067],{"id":98066},"_232-实例","2.3.2 实例",[26,98069,98071],{"className":28,"code":98070,"language":30,"meta":31,"style":31},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[33,98072,98073,98077,98101,98106,98111,98115,98138,98142,98146,98151,98156],{"__ignoreMap":31},[36,98074,98075],{"class":38,"line":39},[36,98076,95446],{"class":2621},[36,98078,98079,98081,98083,98085,98087,98089,98091,98093,98095,98097,98099],{"class":38,"line":54},[36,98080,95343],{"class":42},[36,98082,1906],{"class":62},[36,98084,2934],{"class":42},[36,98086,3279],{"class":62},[36,98088,2934],{"class":42},[36,98090,1906],{"class":62},[36,98092,2934],{"class":42},[36,98094,95841],{"class":7598},[36,98096,47],{"class":46},[36,98098,2570],{"class":62},[36,98100,123],{"class":42},[36,98102,98103],{"class":38,"line":66},[36,98104,98105],{"class":2621},"#输出结果：\n",[36,98107,98108],{"class":38,"line":73},[36,98109,98110],{"class":2621},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,98112,98113],{"class":38,"line":86},[36,98114,96288],{"class":2621},[36,98116,98117,98120,98122,98124,98126,98129,98131,98133,98135],{"class":38,"line":126},[36,98118,98119],{"class":42},"np.array([np.arange(",[36,98121,1906],{"class":62},[36,98123,2934],{"class":42},[36,98125,2850],{"class":62},[36,98127,98128],{"class":42},"),np.arange(",[36,98130,2850],{"class":62},[36,98132,2934],{"class":42},[36,98134,2925],{"class":62},[36,98136,98137],{"class":42},")])\n",[36,98139,98140],{"class":38,"line":131},[36,98141,95905],{"class":2621},[36,98143,98144],{"class":38,"line":225},[36,98145,98039],{"class":50},[36,98147,98148],{"class":38,"line":235},[36,98149,98150],{"class":50},"array([[1, 2, 3],\n",[36,98152,98153],{"class":38,"line":377},[36,98154,98155],{"class":50},"       [4, 5, 6]])\n",[36,98157,98158],{"class":38,"line":617},[36,98159,98039],{"class":50},[14,98161,98163],{"id":98162},"_24-生态分布","2.4 生态分布",[1752,98165,98167],{"id":98166},"_241-标准正态分布","2.4.1 标准正态分布",[19,98169,98170],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98172,98173],{},[3879,98174],{"alt":31,"src":98175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1752,98177,98179],{"id":98178},"_242-常规正态分布","2.4.2 常规正态分布",[26,98181,98183],{"className":28,"code":98182,"language":30,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,98184,98185,98190,98195,98200],{"__ignoreMap":31},[36,98186,98187],{"class":38,"line":39},[36,98188,98189],{"class":42},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,98191,98192],{"class":38,"line":54},[36,98193,98194],{"class":2621},"#loc:期望\n",[36,98196,98197],{"class":38,"line":66},[36,98198,98199],{"class":2621},"#scale:方差\n",[36,98201,98202],{"class":38,"line":73},[36,98203,98204],{"class":2621},"#size:用于确定是几维的数列\n",[19,98206,98207],{},[3879,98208],{"alt":31,"src":98209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98211,98213],{"id":98212},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98215,98216],{},"ndim:秩，维度个数",[19,98218,98219],{},"size:数组元素的个数",[19,98221,98222],{},"shape:数组的形状",[19,98224,98225],{},"dtype:数组元素的类型",[19,98227,98228],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98230,98231],{},"他们都是属性，通过数组.属性的形式来确定",[19,98233,98234],{},"如果需要输出多个可以通过以下方式：",[26,98236,98238],{"className":28,"code":98237,"language":30,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,98239,98240],{"__ignoreMap":31},[36,98241,98242,98244],{"class":38,"line":39},[36,98243,371],{"class":62},[36,98245,98246],{"class":42},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98248,98250],{"id":98249},"_26-其他方式创建数组","2.6 其他方式创建数组",[1752,98252,98254],{"id":98253},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98256,98257],{},"①创建一维数组",[26,98259,98261],{"className":28,"code":98260,"language":30,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,98262,98263,98272,98276,98281,98286],{"__ignoreMap":31},[36,98264,98265,98268,98270],{"class":38,"line":39},[36,98266,98267],{"class":42},"np.zeros(",[36,98269,3002],{"class":62},[36,98271,123],{"class":42},[36,98273,98274],{"class":38,"line":54},[36,98275,98039],{"class":50},[36,98277,98278],{"class":38,"line":66},[36,98279,98280],{"class":50},"输出结果：\n",[36,98282,98283],{"class":38,"line":73},[36,98284,98285],{"class":50},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,98287,98288],{"class":38,"line":86},[36,98289,98039],{"class":50},[19,98291,98292],{},"上方代码等价于：",[26,98294,98296],{"className":28,"code":98295,"language":30,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,98297,98298],{"__ignoreMap":31},[36,98299,98300,98302,98305,98307,98309,98311,98313],{"class":38,"line":39},[36,98301,98267],{"class":42},[36,98303,98304],{"class":7598},"shape",[36,98306,47],{"class":46},[36,98308,92],{"class":42},[36,98310,3002],{"class":62},[36,98312,85113],{"class":42},[36,98314,98315],{"class":2621},"#创建10个元素的0数组\n",[19,98317,98318],{},"也可以指定类型",[26,98320,98322],{"className":28,"code":98321,"language":30,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,98323,98324,98329],{"__ignoreMap":31},[36,98325,98326],{"class":38,"line":39},[36,98327,98328],{"class":2621},"#指定类型\n",[36,98330,98331,98333,98335,98337,98339,98341,98343],{"class":38,"line":54},[36,98332,98267],{"class":42},[36,98334,2875],{"class":62},[36,98336,2934],{"class":42},[36,98338,95841],{"class":7598},[36,98340,47],{"class":46},[36,98342,2570],{"class":62},[36,98344,123],{"class":42},[19,98346,98347],{},"②创建二维数组",[26,98349,98351],{"className":28,"code":98350,"language":30,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,98352,98353],{"__ignoreMap":31},[36,98354,98355,98358,98360,98362,98364,98366,98368,98370,98372],{"class":38,"line":39},[36,98356,98357],{"class":42},"np.zeros((",[36,98359,2634],{"class":62},[36,98361,2934],{"class":42},[36,98363,2850],{"class":62},[36,98365,44605],{"class":42},[36,98367,95841],{"class":7598},[36,98369,47],{"class":46},[36,98371,2570],{"class":62},[36,98373,123],{"class":42},[19,98375,98376],{},"③创建三维数组",[26,98378,98380],{"className":28,"code":98379,"language":30,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,98381,98382,98387],{"__ignoreMap":31},[36,98383,98384],{"class":38,"line":39},[36,98385,98386],{"class":2621},"#创建三维数组\n",[36,98388,98389,98391,98393,98395,98397,98399,98401,98403,98405,98407,98409],{"class":38,"line":54},[36,98390,98357],{"class":42},[36,98392,2634],{"class":62},[36,98394,2934],{"class":42},[36,98396,2850],{"class":62},[36,98398,2934],{"class":42},[36,98400,2875],{"class":62},[36,98402,44605],{"class":42},[36,98404,95841],{"class":7598},[36,98406,47],{"class":46},[36,98408,2570],{"class":62},[36,98410,123],{"class":42},[19,98412,98413],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,98415,98417],{"className":28,"code":98416,"language":30,"meta":31,"style":31},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[33,98418,98419,98424,98439,98444,98449,98471],{"__ignoreMap":31},[36,98420,98421],{"class":38,"line":39},[36,98422,98423],{"class":2621},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,98425,98426,98428,98430,98432,98434,98436],{"class":38,"line":54},[36,98427,2796],{"class":42},[36,98429,47],{"class":46},[36,98431,95343],{"class":42},[36,98433,2850],{"class":62},[36,98435,2985],{"class":42},[36,98437,98438],{"class":2621},"#这个得到的结果：一维数组0，1，2，3\n",[36,98440,98441],{"class":38,"line":66},[36,98442,98443],{"class":42},"np.zeros_like(a)\n",[36,98445,98446],{"class":38,"line":73},[36,98447,98448],{"class":2621},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,98450,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469],{"class":38,"line":86},[36,98452,95647],{"class":42},[36,98454,47],{"class":46},[36,98456,97768],{"class":42},[36,98458,33850],{"class":7598},[36,98460,47],{"class":46},[36,98462,92],{"class":42},[36,98464,2850],{"class":62},[36,98466,2934],{"class":42},[36,98468,2875],{"class":62},[36,98470,1914],{"class":42},[36,98472,98473],{"class":38,"line":126},[36,98474,98475],{"class":42},"np.zeros_like(aa)\n",[1752,98477,98479],{"id":98478},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98481,98482],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1752,98484,98486],{"id":98485},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98488,98489],{},"①empty()用法",[26,98491,98493],{"className":28,"code":98492,"language":30,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,98494,98495],{"__ignoreMap":31},[36,98496,98497,98500,98502,98504,98506,98508,98510,98512,98514],{"class":38,"line":39},[36,98498,98499],{"class":42},"numpy.empty(shape,",[36,98501,95841],{"class":7598},[36,98503,47],{"class":46},[36,98505,2605],{"class":62},[36,98507,2934],{"class":42},[36,98509,97638],{"class":7598},[36,98511,47],{"class":46},[36,98513,78373],{"class":50},[36,98515,123],{"class":42},[19,98517,98518],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98520,98521],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98523,98524],{},[3879,98525],{"alt":31,"src":98526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98528,98529],{},"②empty()用法",[26,98531,98533],{"className":28,"code":98532,"language":30,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,98534,98535,98556,98568,98589,98594],{"__ignoreMap":31},[36,98536,98537,98539,98541,98544,98546,98548,98550,98552,98554],{"class":38,"line":39},[36,98538,3399],{"class":42},[36,98540,47],{"class":46},[36,98542,98543],{"class":42},"np.empty(",[36,98545,3002],{"class":62},[36,98547,2934],{"class":42},[36,98549,95841],{"class":7598},[36,98551,47],{"class":46},[36,98553,2570],{"class":62},[36,98555,123],{"class":42},[36,98557,98558,98560,98562,98564,98566],{"class":38,"line":54},[36,98559,3374],{"class":42},[36,98561,47],{"class":46},[36,98563,95343],{"class":42},[36,98565,2875],{"class":62},[36,98567,123],{"class":42},[36,98569,98570,98573,98575,98578,98580,98582,98585,98587],{"class":38,"line":66},[36,98571,98572],{"class":42},"np.add(",[36,98574,1911],{"class":62},[36,98576,98577],{"class":42},",x,",[36,98579,95395],{"class":7598},[36,98581,47],{"class":46},[36,98583,98584],{"class":42},"y[:",[36,98586,2875],{"class":62},[36,98588,7040],{"class":42},[36,98590,98591],{"class":38,"line":73},[36,98592,98593],{"class":2621},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,98595,98596],{"class":38,"line":86},[36,98597,98598],{"class":42},"y\n",[19,98600,13892],{},[19,98602,98603],{},[3879,98604],{"alt":31,"src":98605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,98607,98609],{"className":28,"code":98608,"language":30,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,98610,98611,98627,98647,98662],{"__ignoreMap":31},[36,98612,98613,98615,98617,98619,98621,98623,98625],{"class":38,"line":39},[36,98614,3374],{"class":42},[36,98616,47],{"class":46},[36,98618,95343],{"class":42},[36,98620,1906],{"class":62},[36,98622,2934],{"class":42},[36,98624,2900],{"class":62},[36,98626,123],{"class":42},[36,98628,98629,98631,98633,98635,98637,98639,98641,98643,98645],{"class":38,"line":54},[36,98630,3399],{"class":42},[36,98632,47],{"class":46},[36,98634,98543],{"class":42},[36,98636,2875],{"class":62},[36,98638,2934],{"class":42},[36,98640,95841],{"class":7598},[36,98642,47],{"class":46},[36,98644,2570],{"class":62},[36,98646,123],{"class":42},[36,98648,98649,98652,98654,98656,98658,98660],{"class":38,"line":66},[36,98650,98651],{"class":42},"np.add(x,",[36,98653,1911],{"class":62},[36,98655,2934],{"class":42},[36,98657,95395],{"class":7598},[36,98659,47],{"class":46},[36,98661,95790],{"class":42},[36,98663,98664],{"class":38,"line":73},[36,98665,98666],{"class":2621},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98668,98669],{},"③empty_like()",[19,98671,98672],{},[667,98673,98674,98675,98680],{},"创建一个",[667,98676,98677],{},[667,98678,98679],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98682,98683,98686],{},[33,98684,98685],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98688,98689],{},[3879,98690],{"alt":31,"src":98691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1752,98693,98695],{"id":98694},"_264-用法","2.6.4 ？？用法",[19,98697,98698],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,98700,98702],{"className":28,"code":98701,"language":30,"meta":31,"style":31},"np.full??\n",[33,98703,98704],{"__ignoreMap":31},[36,98705,98706,98709],{"class":38,"line":39},[36,98707,98708],{"class":42},"np.full",[36,98710,98711],{"class":79748},"??\n",[1752,98713,98715],{"id":98714},"_265-full创建数组","2.6.5 full()创建数组",[26,98717,98719],{"className":28,"code":98718,"language":30,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,98720,98721,98726],{"__ignoreMap":31},[36,98722,98723],{"class":38,"line":39},[36,98724,98725],{"class":42},"full(shape,fill_value)\n",[36,98727,98728],{"class":38,"line":54},[36,98729,98730],{"class":42},"创建全为某个指定值的数组\n",[19,98732,96871],{},[26,98734,98736],{"className":28,"code":98735,"language":30,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,98737,98738,98743],{"__ignoreMap":31},[36,98739,98740],{"class":38,"line":39},[36,98741,98742],{"class":2621},"#创建一个一维数组,以20进行填充\n",[36,98744,98745,98748,98750,98752,98754],{"class":38,"line":54},[36,98746,98747],{"class":42},"np.full(",[36,98749,3002],{"class":62},[36,98751,2934],{"class":42},[36,98753,3254],{"class":62},[36,98755,123],{"class":42},[19,98757,95632],{},[26,98759,98761],{"className":28,"code":98760,"language":30,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,98762,98763,98767],{"__ignoreMap":31},[36,98764,98765],{"class":38,"line":39},[36,98766,96288],{"class":2621},[36,98768,98769,98772,98774,98776,98778,98780,98782],{"class":38,"line":54},[36,98770,98771],{"class":42},"np.full((",[36,98773,2634],{"class":62},[36,98775,2934],{"class":42},[36,98777,2875],{"class":62},[36,98779,44605],{"class":42},[36,98781,3028],{"class":62},[36,98783,123],{"class":42},[19,98785,98786],{},"③full_like用法",[19,98788,98789],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98791,98792],{},"这里是指定填充而已",[26,98794,98796],{"className":28,"code":98795,"language":30,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,98797,98798,98803,98827,98832],{"__ignoreMap":31},[36,98799,98800],{"class":38,"line":39},[36,98801,98802],{"class":2621},"#创建一个指定形状数组\n",[36,98804,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825],{"class":38,"line":54},[36,98806,2796],{"class":42},[36,98808,47],{"class":46},[36,98810,95343],{"class":42},[36,98812,1906],{"class":62},[36,98814,2934],{"class":42},[36,98816,2881],{"class":62},[36,98818,95348],{"class":42},[36,98820,2850],{"class":62},[36,98822,2934],{"class":42},[36,98824,2976],{"class":62},[36,98826,123],{"class":42},[36,98828,98829],{"class":38,"line":66},[36,98830,98831],{"class":2621},"#进行指定填充\n",[36,98833,98834,98837,98839],{"class":38,"line":73},[36,98835,98836],{"class":42},"np.full_like(a,",[36,98838,3002],{"class":62},[36,98840,123],{"class":42},[19,98842,13892],{},[19,98844,98845],{},[3879,98846],{"alt":31,"src":98847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1752,98849,98851],{"id":98850},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24368,98853,98855],{"id":98854},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,98857,98859],{"className":28,"code":98858,"language":30,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,98860,98861,98878],{"__ignoreMap":31},[36,98862,98863,98866,98868,98870,98872,98874,98876],{"class":38,"line":39},[36,98864,98865],{"class":42},"np.eye(",[36,98867,2850],{"class":62},[36,98869,2934],{"class":42},[36,98871,95841],{"class":7598},[36,98873,47],{"class":46},[36,98875,2570],{"class":62},[36,98877,123],{"class":42},[36,98879,98880],{"class":38,"line":54},[36,98881,98882],{"class":2621},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24368,98884,98886],{"id":98885},"_2662-法2identity","2.6.6.2 法2：identity()",[26,98888,98890],{"className":28,"code":98889,"language":30,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,98891,98892,98897],{"__ignoreMap":31},[36,98893,98894],{"class":38,"line":39},[36,98895,98896],{"class":2621},"#identity()\n",[36,98898,98899,98902,98904,98906,98908,98910,98912],{"class":38,"line":54},[36,98900,98901],{"class":42},"np.identity(",[36,98903,2875],{"class":62},[36,98905,2934],{"class":42},[36,98907,95841],{"class":7598},[36,98909,47],{"class":46},[36,98911,2570],{"class":62},[36,98913,123],{"class":42},[19,98915,98916],{},"两个函数是有区别的",[19,98918,98919],{},[3879,98920],{"alt":31,"src":98921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98923,98924],{},[3879,98925],{"alt":31,"src":98926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,98928,98930],{"className":28,"code":98929,"language":30,"meta":31,"style":31},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[33,98931,98932,98937,98949,98954,98959,98964,98969,98973,98978,98998,99002,99007,99012],{"__ignoreMap":31},[36,98933,98934],{"class":38,"line":39},[36,98935,98936],{"class":2621},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,98938,98939,98941,98943,98945,98947],{"class":38,"line":54},[36,98940,98865],{"class":42},[36,98942,2634],{"class":62},[36,98944,630],{"class":42},[36,98946,2850],{"class":62},[36,98948,123],{"class":42},[36,98950,98951],{"class":38,"line":66},[36,98952,98953],{"class":2621},"# 输出:\n",[36,98955,98956],{"class":38,"line":73},[36,98957,98958],{"class":2621},"# [[1. 0. 0. 0.]\n",[36,98960,98961],{"class":38,"line":86},[36,98962,98963],{"class":2621},"#  [0. 1. 0. 0.]\n",[36,98965,98966],{"class":38,"line":126},[36,98967,98968],{"class":2621},"#  [0. 0. 1. 0.]]\n",[36,98970,98971],{"class":38,"line":131},[36,98972,70],{"emptyLinePlaceholder":69},[36,98974,98975],{"class":38,"line":225},[36,98976,98977],{"class":2621},"# 对角线向上偏移1\n",[36,98979,98980,98982,98984,98986,98988,98990,98992,98994,98996],{"class":38,"line":235},[36,98981,98865],{"class":42},[36,98983,2634],{"class":62},[36,98985,630],{"class":42},[36,98987,2850],{"class":62},[36,98989,630],{"class":42},[36,98991,3048],{"class":7598},[36,98993,47],{"class":46},[36,98995,1906],{"class":62},[36,98997,123],{"class":42},[36,98999,99000],{"class":38,"line":377},[36,99001,98953],{"class":2621},[36,99003,99004],{"class":38,"line":617},[36,99005,99006],{"class":2621},"# [[0. 1. 0. 0.]\n",[36,99008,99009],{"class":38,"line":643},[36,99010,99011],{"class":2621},"#  [0. 0. 1. 0.]\n",[36,99013,99014],{"class":38,"line":921},[36,99015,99016],{"class":2621},"#  [0. 0. 0. 1.]]\n",[1752,99018,99020],{"id":99019},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,99022,99024],{"className":28,"code":99023,"language":30,"meta":31,"style":31},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[33,99025,99026,99031,99035,99040,99045,99050,99055,99060,99065,99070,99075],{"__ignoreMap":31},[36,99027,99028],{"class":38,"line":39},[36,99029,99030],{"class":2621},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,99032,99033],{"class":38,"line":54},[36,99034,98039],{"class":50},[36,99036,99037],{"class":38,"line":66},[36,99038,99039],{"class":50},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,99041,99042],{"class":38,"line":73},[36,99043,99044],{"class":50},"参数介绍：\n",[36,99046,99047],{"class":38,"line":86},[36,99048,99049],{"class":50},"start：序列的起始值\n",[36,99051,99052],{"class":38,"line":126},[36,99053,99054],{"class":50},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,99056,99057],{"class":38,"line":131},[36,99058,99059],{"class":50},"num：要生长的等步长的样本数量，默认为50\n",[36,99061,99062],{"class":38,"line":225},[36,99063,99064],{"class":50},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,99066,99067],{"class":38,"line":235},[36,99068,99069],{"class":50},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,99071,99072],{"class":38,"line":377},[36,99073,99074],{"class":50},"dtype：ndarry的数据类型\n",[36,99076,99077],{"class":38,"line":617},[36,99078,98039],{"class":50},[19,99080,99081],{},[3879,99082],{"alt":31,"src":99083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,99085,99086],{},"这里num=是可以省略的",[19,99088,99089],{},"也就是下方两行代码结果是一模一样的",[26,99091,99093],{"className":28,"code":99092,"language":30,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,99094,99095,99112],{"__ignoreMap":31},[36,99096,99097,99100,99102,99104,99106,99108,99110],{"class":38,"line":39},[36,99098,99099],{"class":42},"np.linspace(",[36,99101,1906],{"class":62},[36,99103,2934],{"class":42},[36,99105,2875],{"class":62},[36,99107,2934],{"class":42},[36,99109,2875],{"class":62},[36,99111,123],{"class":42},[36,99113,99114,99116,99118,99120,99122,99124,99126,99128,99130],{"class":38,"line":54},[36,99115,99099],{"class":42},[36,99117,1906],{"class":62},[36,99119,2934],{"class":42},[36,99121,2875],{"class":62},[36,99123,2934],{"class":42},[36,99125,4073],{"class":7598},[36,99127,47],{"class":46},[36,99129,2875],{"class":62},[36,99131,123],{"class":42},[1752,99133,99135],{"id":99134},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,99137,99139],{"className":28,"code":99138,"language":30,"meta":31,"style":31},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[33,99140,99141,99146,99150,99155,99160,99165,99170,99174,99179,99184,99188],{"__ignoreMap":31},[36,99142,99143],{"class":38,"line":39},[36,99144,99145],{"class":2621},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,99147,99148],{"class":38,"line":54},[36,99149,98039],{"class":50},[36,99151,99152],{"class":38,"line":66},[36,99153,99154],{"class":50},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,99156,99157],{"class":38,"line":73},[36,99158,99159],{"class":50},"参数为：\n",[36,99161,99162],{"class":38,"line":86},[36,99163,99164],{"class":50},"start:序列的起始位置为：base**start\n",[36,99166,99167],{"class":38,"line":126},[36,99168,99169],{"class":50},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,99171,99172],{"class":38,"line":131},[36,99173,99059],{"class":50},[36,99175,99176],{"class":38,"line":225},[36,99177,99178],{"class":50},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,99180,99181],{"class":38,"line":235},[36,99182,99183],{"class":50},"base：对数的底数，默认是 10（常见对数）\n",[36,99185,99186],{"class":38,"line":377},[36,99187,99074],{"class":50},[36,99189,99190],{"class":38,"line":617},[36,99191,98039],{"class":50},[19,99193,99194],{},[3879,99195],{"alt":31,"src":99196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99198,99199],{},"logspace()函数中的num参数也是可以不写num=的",[19,99201,99202],{},"endpoint是不可以省略的",[2467,99204,99205],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":31,"searchDepth":54,"depth":54,"links":99207},[99208,99212,99217,99221,99225,99226],{"id":97597,"depth":54,"text":97598,"children":99209},[99210,99211],{"id":97601,"depth":66,"text":97602},{"id":97674,"depth":66,"text":97675},{"id":97706,"depth":54,"text":97707,"children":99213},[99214,99215,99216],{"id":97710,"depth":66,"text":97711},{"id":97892,"depth":66,"text":97893},{"id":97970,"depth":66,"text":97971},{"id":98005,"depth":54,"text":98006,"children":99218},[99219,99220],{"id":98009,"depth":66,"text":98010},{"id":98066,"depth":66,"text":98067},{"id":98162,"depth":54,"text":98163,"children":99222},[99223,99224],{"id":98166,"depth":66,"text":98167},{"id":98178,"depth":66,"text":98179},{"id":98212,"depth":54,"text":98213},{"id":98249,"depth":54,"text":98250,"children":99227},[99228,99229,99230,99231,99232,99233,99234,99235],{"id":98253,"depth":66,"text":98254},{"id":98478,"depth":66,"text":98479},{"id":98485,"depth":66,"text":98486},{"id":98694,"depth":66,"text":98695},{"id":98714,"depth":66,"text":98715},{"id":98850,"depth":66,"text":98851},{"id":99019,"depth":66,"text":99020},{"id":99134,"depth":66,"text":99135},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97589,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99242,"title":99243,"body":99244,"description":2493,"extension":2494,"meta":99337,"navigation":69,"path":99338,"seo":99339,"stem":99340,"__hash__":99341},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99245,"toc":99335},[99246,99249,99252,99255,99258,99261,99264,99267,99270,99273,99276,99279,99281,99284,99287,99292,99295,99298,99332],[10,99247,99243],{"id":99248},"_20魔法命令mprun",[19,99250,99251],{},"逐行分析数据内存的使用情况",[19,99253,99254],{},"语法格式：",[19,99256,99257],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99259,99260],{},"分析结果列如下：",[19,99262,99263],{},"Line行号",[19,99265,99266],{},"Mem usage内存使用大小",[19,99268,99269],{},"increment内存增量",[19,99271,99272],{},"Line content代码内容",[19,99274,99275],{},"补充说明：",[19,99277,99278],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99280,97544],{},[19,99282,99283],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99285,99286],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99288,99289],{},[3879,99290],{"alt":31,"src":99291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99293,99294],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99296,99297],{},"这时候需要重新加载模块",[26,99299,99301],{"className":28,"code":99300,"language":30,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,99302,99303,99308,99315,99320],{"__ignoreMap":31},[36,99304,99305],{"class":38,"line":39},[36,99306,99307],{"class":2621},"#重新加载模块\n",[36,99309,99310,99312],{"class":38,"line":54},[36,99311,1943],{"class":46},[36,99313,99314],{"class":42}," importlib\n",[36,99316,99317],{"class":38,"line":66},[36,99318,99319],{"class":42},"importlib.reload(mprun_test)\n",[36,99321,99322,99324,99327,99329],{"class":38,"line":73},[36,99323,2884],{"class":46},[36,99325,99326],{"class":42},"mprun ",[36,99328,3087],{"class":46},[36,99330,99331],{"class":42},"f mprun_test.fun_test mprun_test.fun_test()\n",[2467,99333,99334],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":99336},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99243,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99343,"title":99344,"body":99345,"description":2493,"extension":2494,"meta":99362,"navigation":69,"path":99363,"seo":99364,"stem":99365,"__hash__":99366},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99346,"toc":99360},[99347,99350,99355],[10,99348,99344],{"id":99349},"_3一维数组的索引和切片",[19,99351,99352],{},[3879,99353],{"alt":31,"src":99354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99356,99357],{},[3879,99358],{"alt":31,"src":99359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":54,"depth":54,"links":99361},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99344,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99368,"title":99369,"body":99370,"description":2493,"extension":2494,"meta":99853,"navigation":69,"path":99854,"seo":99855,"stem":99856,"__hash__":99857},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99371,"toc":99851},[99372,99375,99378,99383,99416,99419,99457,99460,99494,99497,99602,99605,99642,99645,99746,99749,99800,99803,99845,99848],[10,99373,99369],{"id":99374},"_4二维数组的索引与切片",[19,99376,99377],{},"①获取指定单个元素",[19,99379,99380],{},[3879,99381],{"alt":31,"src":99382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,99384,99386],{"className":28,"code":99385,"language":30,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,99387,99388,99393,99398,99403],{"__ignoreMap":31},[36,99389,99390],{"class":38,"line":39},[36,99391,99392],{"class":2621},"#获取元素9\n",[36,99394,99395],{"class":38,"line":54},[36,99396,99397],{"class":2621},"#先获取所在行，再获取所在列\n",[36,99399,99400],{"class":38,"line":66},[36,99401,99402],{"class":2621},"#数组[行索引号，列索引号]\n",[36,99404,99405,99408,99410,99412,99414],{"class":38,"line":73},[36,99406,99407],{"class":42},"a[",[36,99409,1906],{"class":62},[36,99411,2934],{"class":42},[36,99413,1911],{"class":62},[36,99415,35598],{"class":42},[19,99417,99418],{},"②获取整行元素",[26,99420,99422],{"className":28,"code":99421,"language":30,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,99423,99424,99429,99434,99442,99447],{"__ignoreMap":31},[36,99425,99426],{"class":38,"line":39},[36,99427,99428],{"class":2621},"#获取整行 数组[行索引号]\n",[36,99430,99431],{"class":38,"line":54},[36,99432,99433],{"class":2621},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,99435,99436,99438,99440],{"class":38,"line":66},[36,99437,99407],{"class":42},[36,99439,1911],{"class":62},[36,99441,35598],{"class":42},[36,99443,99444],{"class":38,"line":73},[36,99445,99446],{"class":2621},"#也可以负索引获取一行\n",[36,99448,99449,99451,99453,99455],{"class":38,"line":86},[36,99450,99407],{"class":42},[36,99452,3087],{"class":46},[36,99454,1906],{"class":62},[36,99456,35598],{"class":42},[19,99458,99459],{},"③获取整列元素",[26,99461,99463],{"className":28,"code":99462,"language":30,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,99464,99465,99470,99479,99484],{"__ignoreMap":31},[36,99466,99467],{"class":38,"line":39},[36,99468,99469],{"class":2621},"#获取整列 数组名[:,列索引]\n",[36,99471,99472,99475,99477],{"class":38,"line":54},[36,99473,99474],{"class":42},"a[:,",[36,99476,1911],{"class":62},[36,99478,35598],{"class":42},[36,99480,99481],{"class":38,"line":66},[36,99482,99483],{"class":2621},"#也可以负索引获取一列\n",[36,99485,99486,99488,99490,99492],{"class":38,"line":73},[36,99487,99474],{"class":42},[36,99489,3087],{"class":46},[36,99491,1906],{"class":62},[36,99493,35598],{"class":42},[19,99495,99496],{},"④部分行部分列的元素",[26,99498,99500],{"className":28,"code":99499,"language":30,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[33,99501,99502,99507,99517,99521,99525,99530,99535,99539,99551,99555,99559,99564,99569,99574,99579,99583,99588],{"__ignoreMap":31},[36,99503,99504],{"class":38,"line":39},[36,99505,99506],{"class":2621},"#部分行部分列 数组名[行切片，列切片]\n",[36,99508,99509,99512,99514],{"class":38,"line":54},[36,99510,99511],{"class":42},"a[:",[36,99513,1911],{"class":62},[36,99515,99516],{"class":42},",:]\n",[36,99518,99519],{"class":38,"line":66},[36,99520,95905],{"class":2621},[36,99522,99523],{"class":38,"line":73},[36,99524,96269],{"class":50},[36,99526,99527],{"class":38,"line":86},[36,99528,99529],{"class":50},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,99531,99532],{"class":38,"line":126},[36,99533,99534],{"class":50},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,99536,99537],{"class":38,"line":131},[36,99538,96269],{"class":50},[36,99540,99541,99543,99545,99547,99549],{"class":38,"line":225},[36,99542,99474],{"class":42},[36,99544,1906],{"class":62},[36,99546,3413],{"class":42},[36,99548,2850],{"class":62},[36,99550,35598],{"class":42},[36,99552,99553],{"class":38,"line":235},[36,99554,95905],{"class":2621},[36,99556,99557],{"class":38,"line":377},[36,99558,96269],{"class":50},[36,99560,99561],{"class":38,"line":617},[36,99562,99563],{"class":50},"array([[ 2,  3,  4],\n",[36,99565,99566],{"class":38,"line":643},[36,99567,99568],{"class":50},"       [ 8,  9, 10],\n",[36,99570,99571],{"class":38,"line":921},[36,99572,99573],{"class":50},"       [14, 15, 16],\n",[36,99575,99576],{"class":38,"line":934},[36,99577,99578],{"class":50},"       [20, 21, 22]])\n",[36,99580,99581],{"class":38,"line":939},[36,99582,96269],{"class":50},[36,99584,99585],{"class":38,"line":949},[36,99586,99587],{"class":2621},"#对列行同时进行切片，使用了step参数\n",[36,99589,99590,99593,99595,99598,99600],{"class":38,"line":962},[36,99591,99592],{"class":42},"a[::",[36,99594,1911],{"class":62},[36,99596,99597],{"class":42},",::",[36,99599,1911],{"class":62},[36,99601,35598],{"class":42},[19,99603,99604],{},"⑤同时获取两个元素",[26,99606,99608],{"className":28,"code":99607,"language":30,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,99609,99610,99615,99620],{"__ignoreMap":31},[36,99611,99612],{"class":38,"line":39},[36,99613,99614],{"class":2621},"#同时获取第三行第二列，第四行第一列\n",[36,99616,99617],{"class":38,"line":54},[36,99618,99619],{"class":2621},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,99621,99622,99625,99627,99629,99631,99633,99635,99637,99639],{"class":38,"line":66},[36,99623,99624],{"class":42},"a[(",[36,99626,1911],{"class":62},[36,99628,2934],{"class":42},[36,99630,2634],{"class":62},[36,99632,44596],{"class":42},[36,99634,1906],{"class":62},[36,99636,2934],{"class":42},[36,99638,2751],{"class":62},[36,99640,99641],{"class":42},")]\n",[19,99643,99644],{},"⑥切片，对行进行反向获取",[26,99646,99648],{"className":28,"code":99647,"language":30,"meta":31,"style":31},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[33,99649,99650,99655,99665,99669,99673,99678,99683,99688,99693,99697,99702,99718,99722,99727,99732,99737,99742],{"__ignoreMap":31},[36,99651,99652],{"class":38,"line":39},[36,99653,99654],{"class":2621},"#切片 对所有行进行反向获取\n",[36,99656,99657,99659,99661,99663],{"class":38,"line":54},[36,99658,99592],{"class":42},[36,99660,3087],{"class":46},[36,99662,1906],{"class":62},[36,99664,35598],{"class":42},[36,99666,99667],{"class":38,"line":66},[36,99668,95905],{"class":2621},[36,99670,99671],{"class":38,"line":73},[36,99672,96269],{"class":50},[36,99674,99675],{"class":38,"line":86},[36,99676,99677],{"class":50},"array([[19, 20, 21, 22, 23, 24],\n",[36,99679,99680],{"class":38,"line":126},[36,99681,99682],{"class":50},"       [13, 14, 15, 16, 17, 18],\n",[36,99684,99685],{"class":38,"line":131},[36,99686,99687],{"class":50},"       [ 7,  8,  9, 10, 11, 12],\n",[36,99689,99690],{"class":38,"line":225},[36,99691,99692],{"class":50},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,99694,99695],{"class":38,"line":235},[36,99696,96269],{"class":50},[36,99698,99699],{"class":38,"line":377},[36,99700,99701],{"class":2621},"#对行列都进行反向切片获取\n",[36,99703,99704,99706,99708,99710,99712,99714,99716],{"class":38,"line":617},[36,99705,99592],{"class":42},[36,99707,3087],{"class":46},[36,99709,1906],{"class":62},[36,99711,99597],{"class":42},[36,99713,3087],{"class":46},[36,99715,1906],{"class":62},[36,99717,35598],{"class":42},[36,99719,99720],{"class":38,"line":643},[36,99721,96269],{"class":50},[36,99723,99724],{"class":38,"line":921},[36,99725,99726],{"class":50},"array([[24, 23, 22, 21, 20, 19],\n",[36,99728,99729],{"class":38,"line":934},[36,99730,99731],{"class":50},"       [18, 17, 16, 15, 14, 13],\n",[36,99733,99734],{"class":38,"line":939},[36,99735,99736],{"class":50},"       [12, 11, 10,  9,  8,  7],\n",[36,99738,99739],{"class":38,"line":949},[36,99740,99741],{"class":50},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,99743,99744],{"class":38,"line":962},[36,99745,96269],{"class":50},[19,99747,99748],{},"⑦修改元素",[26,99750,99752],{"className":28,"code":99751,"language":30,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,99753,99754,99759,99777,99782],{"__ignoreMap":31},[36,99755,99756],{"class":38,"line":39},[36,99757,99758],{"class":2621},"#获取前两行和前两列\n",[36,99760,99761,99764,99766,99768,99770,99773,99775],{"class":38,"line":54},[36,99762,99763],{"class":42},"sub_a",[36,99765,47],{"class":46},[36,99767,99511],{"class":42},[36,99769,1911],{"class":62},[36,99771,99772],{"class":42},",:",[36,99774,1911],{"class":62},[36,99776,35598],{"class":42},[36,99778,99779],{"class":38,"line":66},[36,99780,99781],{"class":2621},"#修改sub_a第一个元素的值\n",[36,99783,99784,99787,99789,99791,99793,99795,99797],{"class":38,"line":73},[36,99785,99786],{"class":42},"sub_a[",[36,99788,2751],{"class":62},[36,99790,2934],{"class":42},[36,99792,2751],{"class":62},[36,99794,3493],{"class":42},[36,99796,47],{"class":46},[36,99798,99799],{"class":62},"100\n",[19,99801,99802],{},"⑧数组复制copy()",[26,99804,99806],{"className":28,"code":99805,"language":30,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,99807,99808,99813,99823,99828],{"__ignoreMap":31},[36,99809,99810],{"class":38,"line":39},[36,99811,99812],{"class":2621},"#数组复制\n",[36,99814,99815,99818,99820],{"class":38,"line":54},[36,99816,99817],{"class":42},"copy_a",[36,99819,47],{"class":46},[36,99821,99822],{"class":42},"np.copy(sub_a)\n",[36,99824,99825],{"class":38,"line":66},[36,99826,99827],{"class":2621},"#修改copy_a后不影响原数组\n",[36,99829,99830,99833,99835,99837,99839,99841,99843],{"class":38,"line":73},[36,99831,99832],{"class":42},"copy_a[",[36,99834,2751],{"class":62},[36,99836,2934],{"class":42},[36,99838,2751],{"class":62},[36,99840,3493],{"class":42},[36,99842,47],{"class":46},[36,99844,99799],{"class":62},[19,99846,99847],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2467,99849,99850],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":99852},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99369,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99859,"title":99860,"body":99861,"description":2493,"extension":2494,"meta":100353,"navigation":69,"path":100354,"seo":100355,"stem":100356,"__hash__":100357},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99862,"toc":100345},[99863,99866,99870,99873,99876,99929,99932,99957,99960,99979,99999,100002,100018,100022,100068,100072,100114,100118,100121,100124,100127,100130,100133,100195,100255,100259,100262,100319,100323,100328,100337,100342],[10,99864,99860],{"id":99865},"_5改变数组的维度",[14,99867,99869],{"id":99868},"_51-使用reshape","5.1 使用reshape()",[19,99871,99872],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99874,99875],{},"①一维数组转换为二维数组",[26,99877,99879],{"className":28,"code":99878,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,99880,99881,99897,99902,99907,99912],{"__ignoreMap":31},[36,99882,99883,99885,99887,99889,99891,99893,99895],{"class":38,"line":39},[36,99884,2796],{"class":42},[36,99886,47],{"class":46},[36,99888,95343],{"class":42},[36,99890,1906],{"class":62},[36,99892,2934],{"class":42},[36,99894,3078],{"class":62},[36,99896,123],{"class":42},[36,99898,99899],{"class":38,"line":54},[36,99900,99901],{"class":2621},"#将一维数组进行转换\n",[36,99903,99904],{"class":38,"line":66},[36,99905,99906],{"class":2621},"#注意点：元素个数不可以变\n",[36,99908,99909],{"class":38,"line":73},[36,99910,99911],{"class":2621},"#转换维度要保持一致，不一致就异常！！！\n",[36,99913,99914,99916,99918,99921,99923,99925,99927],{"class":38,"line":86},[36,99915,95647],{"class":42},[36,99917,47],{"class":46},[36,99919,99920],{"class":42},"a.reshape(",[36,99922,1911],{"class":62},[36,99924,2934],{"class":42},[36,99926,2900],{"class":62},[36,99928,123],{"class":42},[19,99930,99931],{},"②一维数组转换为三维数组",[26,99933,99935],{"className":28,"code":99934,"language":30,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,99936,99937],{"__ignoreMap":31},[36,99938,99939,99941,99943,99945,99947,99949,99951,99953,99955],{"class":38,"line":39},[36,99940,97862],{"class":42},[36,99942,47],{"class":46},[36,99944,99920],{"class":42},[36,99946,1911],{"class":62},[36,99948,2934],{"class":42},[36,99950,2634],{"class":62},[36,99952,2934],{"class":42},[36,99954,1911],{"class":62},[36,99956,123],{"class":42},[19,99958,99959],{},"③二维数组转化为一维数组",[26,99961,99963],{"className":28,"code":99962,"language":30,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,99964,99965,99970],{"__ignoreMap":31},[36,99966,99967],{"class":38,"line":39},[36,99968,99969],{"class":2621},"#知道元素个数：\n",[36,99971,99972,99975,99977],{"class":38,"line":54},[36,99973,99974],{"class":42},"aa.reshape(",[36,99976,3053],{"class":62},[36,99978,123],{"class":42},[26,99980,99982],{"className":28,"code":99981,"language":30,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,99983,99984,99989],{"__ignoreMap":31},[36,99985,99986],{"class":38,"line":39},[36,99987,99988],{"class":2621},"#不知道元素个数，参数传递-1\n",[36,99990,99991,99993,99995,99997],{"class":38,"line":54},[36,99992,99974],{"class":42},[36,99994,3087],{"class":46},[36,99996,1906],{"class":62},[36,99998,123],{"class":42},[19,100000,100001],{},"④三维数组转换为一维数组",[26,100003,100005],{"className":28,"code":100004,"language":30,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,100006,100007],{"__ignoreMap":31},[36,100008,100009,100012,100014,100016],{"class":38,"line":39},[36,100010,100011],{"class":42},"aaa.reshape(",[36,100013,3087],{"class":46},[36,100015,1906],{"class":62},[36,100017,123],{"class":42},[14,100019,100021],{"id":100020},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,100023,100025],{"className":28,"code":100024,"language":30,"meta":31,"style":31},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,100026,100027,100054,100059,100063],{"__ignoreMap":31},[36,100028,100029,100031,100033,100035,100037,100039,100041,100043,100045,100047,100049,100051],{"class":38,"line":39},[36,100030,95647],{"class":42},[36,100032,47],{"class":46},[36,100034,95343],{"class":42},[36,100036,1906],{"class":62},[36,100038,2934],{"class":42},[36,100040,3078],{"class":62},[36,100042,95348],{"class":42},[36,100044,1911],{"class":62},[36,100046,2934],{"class":42},[36,100048,2900],{"class":62},[36,100050,2985],{"class":42},[36,100052,100053],{"class":2621},"#转换为2行6列的数组\n",[36,100055,100056],{"class":38,"line":54},[36,100057,100058],{"class":42},"aa.revel()\n",[36,100060,100061],{"class":38,"line":66},[36,100062,95905],{"class":2621},[36,100064,100065],{"class":38,"line":73},[36,100066,100067],{"class":2621},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100069,100071],{"id":100070},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,100073,100075],{"className":28,"code":100074,"language":30,"meta":31,"style":31},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,100076,100077,100101,100106,100110],{"__ignoreMap":31},[36,100078,100079,100081,100083,100085,100087,100089,100091,100093,100095,100097,100099],{"class":38,"line":39},[36,100080,95647],{"class":42},[36,100082,47],{"class":46},[36,100084,95343],{"class":42},[36,100086,1906],{"class":62},[36,100088,2934],{"class":42},[36,100090,3078],{"class":62},[36,100092,95348],{"class":42},[36,100094,1911],{"class":62},[36,100096,2934],{"class":42},[36,100098,2900],{"class":62},[36,100100,123],{"class":42},[36,100102,100103],{"class":38,"line":54},[36,100104,100105],{"class":42},"aa.flatten()\n",[36,100107,100108],{"class":38,"line":66},[36,100109,95905],{"class":2621},[36,100111,100112],{"class":38,"line":73},[36,100113,100067],{"class":2621},[14,100115,100117],{"id":100116},"_54-使用resize","5.4 使用resize()",[19,100119,100120],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100122,100123],{},"通过resize方法可以改变数组的维度",[19,100125,100126],{},"#resize修改数组维度",[19,100128,100129],{},"#以元组的形式指定形状",[19,100131,100132],{},"#改变的是原数组",[26,100134,100136],{"className":28,"code":100135,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,100137,100138,100154,100174,100187,100191],{"__ignoreMap":31},[36,100139,100140,100142,100144,100146,100148,100150,100152],{"class":38,"line":39},[36,100141,2796],{"class":42},[36,100143,47],{"class":46},[36,100145,95343],{"class":42},[36,100147,1906],{"class":62},[36,100149,2934],{"class":42},[36,100151,3078],{"class":62},[36,100153,123],{"class":42},[36,100155,100156,100159,100161,100163,100165,100167,100169,100171],{"class":38,"line":54},[36,100157,100158],{"class":42},"a.shape",[36,100160,47],{"class":46},[36,100162,92],{"class":42},[36,100164,1911],{"class":62},[36,100166,2934],{"class":42},[36,100168,2900],{"class":62},[36,100170,2985],{"class":42},[36,100172,100173],{"class":2621},"#改变了原数组\n",[36,100175,100176,100178,100180,100183,100185],{"class":38,"line":66},[36,100177,2796],{"class":42},[36,100179,47],{"class":46},[36,100181,100182],{"class":42},"resize((",[36,100184,3053],{"class":62},[36,100186,1914],{"class":42},[36,100188,100189],{"class":38,"line":73},[36,100190,95905],{"class":2621},[36,100192,100193],{"class":38,"line":86},[36,100194,100067],{"class":2621},[26,100196,100198],{"className":28,"code":100197,"language":30,"meta":31,"style":31},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[33,100199,100200,100213,100217,100221,100226,100231,100236,100241,100246,100251],{"__ignoreMap":31},[36,100201,100202,100205,100207,100209,100211],{"class":38,"line":39},[36,100203,100204],{"class":42},"a.resize((",[36,100206,2900],{"class":62},[36,100208,2934],{"class":42},[36,100210,1911],{"class":62},[36,100212,1914],{"class":42},[36,100214,100215],{"class":38,"line":54},[36,100216,95905],{"class":2621},[36,100218,100219],{"class":38,"line":66},[36,100220,96269],{"class":50},[36,100222,100223],{"class":38,"line":73},[36,100224,100225],{"class":50},"array([[ 1,  2],\n",[36,100227,100228],{"class":38,"line":86},[36,100229,100230],{"class":50},"       [ 3,  4],\n",[36,100232,100233],{"class":38,"line":126},[36,100234,100235],{"class":50},"       [ 5,  6],\n",[36,100237,100238],{"class":38,"line":131},[36,100239,100240],{"class":50},"       [ 7,  8],\n",[36,100242,100243],{"class":38,"line":225},[36,100244,100245],{"class":50},"       [ 9, 10],\n",[36,100247,100248],{"class":38,"line":235},[36,100249,100250],{"class":50},"       [11, 12]])\n",[36,100252,100253],{"class":38,"line":377},[36,100254,96269],{"class":50},[14,100256,100258],{"id":100257},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100260,100261],{},"改变了原数组",[26,100263,100265],{"className":28,"code":100264,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[33,100266,100267,100283,100299,100303,100307,100311,100315],{"__ignoreMap":31},[36,100268,100269,100271,100273,100275,100277,100279,100281],{"class":38,"line":39},[36,100270,2796],{"class":42},[36,100272,47],{"class":46},[36,100274,95343],{"class":42},[36,100276,1906],{"class":62},[36,100278,2934],{"class":42},[36,100280,3078],{"class":62},[36,100282,123],{"class":42},[36,100284,100285,100287,100289,100291,100293,100295,100297],{"class":38,"line":54},[36,100286,100158],{"class":42},[36,100288,47],{"class":46},[36,100290,92],{"class":42},[36,100292,1911],{"class":62},[36,100294,2934],{"class":42},[36,100296,2900],{"class":62},[36,100298,123],{"class":42},[36,100300,100301],{"class":38,"line":66},[36,100302,95905],{"class":2621},[36,100304,100305],{"class":38,"line":73},[36,100306,96269],{"class":50},[36,100308,100309],{"class":38,"line":86},[36,100310,99529],{"class":50},[36,100312,100313],{"class":38,"line":126},[36,100314,99534],{"class":50},[36,100316,100317],{"class":38,"line":131},[36,100318,96269],{"class":50},[14,100320,100322],{"id":100321},"_56-重要比较","5.6 重要比较：",[19,100324,100325],{},[3879,100326],{"alt":31,"src":100327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100329,100330,100331,100333,100334,100336],{},"口诀：NumPy 函数要么用 ",[33,100332,98304],{},"，要么用 ",[33,100335,33850],{},"，创建结构用 shape，造数据用 size",[19,100338,100339],{},[3879,100340],{"alt":31,"src":100341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2467,100343,100344],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":100346},[100347,100348,100349,100350,100351,100352],{"id":99868,"depth":54,"text":99869},{"id":100020,"depth":54,"text":100021},{"id":100070,"depth":54,"text":100071},{"id":100116,"depth":54,"text":100117},{"id":100257,"depth":54,"text":100258},{"id":100321,"depth":54,"text":100322},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99860,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100359,"title":100360,"body":100361,"description":2493,"extension":2494,"meta":101433,"navigation":69,"path":101434,"seo":101435,"stem":101436,"__hash__":101437},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100362,"toc":101427},[100363,100366,100370,100373,100376,100379,100444,100447,100487,100490,100572,100575,100580,100602,100604,100609,100614,100617,100620,100775,100778,100980,100984,100987,100990,101058,101060,101065,101068,101071,101151,101155,101158,101160,101233,101235,101240,101242,101322,101326,101329,101332,101335,101338,101341,101344,101424],[10,100364,100360],{"id":100365},"_6数组的拼接",[14,100367,100369],{"id":100368},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100371,100372],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100374,100375],{},"函数内部传两个数列构成的数列或者元组",[19,100377,100378],{},"①一维数组的拼接",[26,100380,100382],{"className":28,"code":100381,"language":30,"meta":31,"style":31},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[33,100383,100384,100404,100424,100429,100434,100439],{"__ignoreMap":31},[36,100385,100386,100388,100390,100392,100394,100396,100398,100400,100402],{"class":38,"line":39},[36,100387,2796],{"class":42},[36,100389,47],{"class":46},[36,100391,95365],{"class":42},[36,100393,1906],{"class":62},[36,100395,2934],{"class":42},[36,100397,1911],{"class":62},[36,100399,2934],{"class":42},[36,100401,2634],{"class":62},[36,100403,7040],{"class":42},[36,100405,100406,100408,100410,100412,100414,100416,100418,100420,100422],{"class":38,"line":54},[36,100407,2820],{"class":42},[36,100409,47],{"class":46},[36,100411,95365],{"class":42},[36,100413,2850],{"class":62},[36,100415,2934],{"class":42},[36,100417,2875],{"class":62},[36,100419,2934],{"class":42},[36,100421,2900],{"class":62},[36,100423,7040],{"class":42},[36,100425,100426],{"class":38,"line":66},[36,100427,100428],{"class":2621},"#调用concatenate进行数组拼接\n",[36,100430,100431],{"class":38,"line":73},[36,100432,100433],{"class":42},"np.concatenate((a,b))\n",[36,100435,100436],{"class":38,"line":86},[36,100437,100438],{"class":2621},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,100440,100441],{"class":38,"line":126},[36,100442,100443],{"class":2621},"#np.concatenate([a,b])\n",[19,100445,100446],{},"②一维多个数组拼接",[26,100448,100450],{"className":28,"code":100449,"language":30,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,100451,100452,100457,100477,100482],{"__ignoreMap":31},[36,100453,100454],{"class":38,"line":39},[36,100455,100456],{"class":2621},"#也可以多个数组进行拼接\n",[36,100458,100459,100461,100463,100465,100467,100469,100471,100473,100475],{"class":38,"line":54},[36,100460,2845],{"class":42},[36,100462,47],{"class":46},[36,100464,95365],{"class":42},[36,100466,3002],{"class":62},[36,100468,2934],{"class":42},[36,100470,3028],{"class":62},[36,100472,2934],{"class":42},[36,100474,3078],{"class":62},[36,100476,7040],{"class":42},[36,100478,100479],{"class":38,"line":66},[36,100480,100481],{"class":42},"c\n",[36,100483,100484],{"class":38,"line":73},[36,100485,100486],{"class":42},"np.concatenate((a,b,c))\n",[19,100488,100489],{},"③二维数组拼接",[26,100491,100493],{"className":28,"code":100492,"language":30,"meta":31,"style":31},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[33,100494,100495,100500,100524,100549,100554,100559],{"__ignoreMap":31},[36,100496,100497],{"class":38,"line":39},[36,100498,100499],{"class":2621},"#二维数组使用concatenate进行拼接\n",[36,100501,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522],{"class":38,"line":54},[36,100503,95647],{"class":42},[36,100505,47],{"class":46},[36,100507,95343],{"class":42},[36,100509,1906],{"class":62},[36,100511,2934],{"class":42},[36,100513,3078],{"class":62},[36,100515,95348],{"class":42},[36,100517,2634],{"class":62},[36,100519,2934],{"class":42},[36,100521,2850],{"class":62},[36,100523,123],{"class":42},[36,100525,100526,100529,100531,100533,100535,100537,100539,100541,100543,100545,100547],{"class":38,"line":66},[36,100527,100528],{"class":42},"bb",[36,100530,47],{"class":46},[36,100532,95343],{"class":42},[36,100534,2893],{"class":62},[36,100536,2934],{"class":42},[36,100538,3197],{"class":62},[36,100540,95348],{"class":42},[36,100542,2634],{"class":62},[36,100544,2934],{"class":42},[36,100546,2850],{"class":62},[36,100548,123],{"class":42},[36,100550,100551],{"class":38,"line":73},[36,100552,100553],{"class":2621},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,100555,100556],{"class":38,"line":86},[36,100557,100558],{"class":2621},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,100560,100561,100564,100566,100568,100570],{"class":38,"line":126},[36,100562,100563],{"class":42},"np.concatenate((aa,bb),",[36,100565,49863],{"class":7598},[36,100567,47],{"class":46},[36,100569,2751],{"class":62},[36,100571,123],{"class":42},[19,100573,100574],{},"结果：",[19,100576,100577],{},[3879,100578],{"alt":31,"src":100579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,100581,100583],{"className":28,"code":100582,"language":30,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,100584,100585,100590],{"__ignoreMap":31},[36,100586,100587],{"class":38,"line":39},[36,100588,100589],{"class":2621},"#指定axis为1进行拼接\n",[36,100591,100592,100594,100596,100598,100600],{"class":38,"line":54},[36,100593,100563],{"class":42},[36,100595,49863],{"class":7598},[36,100597,47],{"class":46},[36,100599,1906],{"class":62},[36,100601,123],{"class":42},[19,100603,100574],{},[19,100605,100606],{},[3879,100607],{"alt":31,"src":100608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100610,100611],{},[667,100612,100613],{},"二维数组总结：0竖着方向，1横着方向",[19,100615,100616],{},"④三维数组拼接",[19,100618,100619],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,100621,100623],{"className":28,"code":100622,"language":30,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[33,100624,100625,100630,100658,100688,100693,100710,100715,100720,100725,100742,100747,100752,100757,100770],{"__ignoreMap":31},[36,100626,100627],{"class":38,"line":39},[36,100628,100629],{"class":2621},"#两个三行六列\n",[36,100631,100632,100634,100636,100638,100640,100642,100644,100646,100648,100650,100652,100654,100656],{"class":38,"line":54},[36,100633,97862],{"class":42},[36,100635,47],{"class":46},[36,100637,95343],{"class":42},[36,100639,1906],{"class":62},[36,100641,2934],{"class":42},[36,100643,2881],{"class":62},[36,100645,95348],{"class":42},[36,100647,1911],{"class":62},[36,100649,2934],{"class":42},[36,100651,2634],{"class":62},[36,100653,2934],{"class":42},[36,100655,2900],{"class":62},[36,100657,123],{"class":42},[36,100659,100660,100663,100665,100667,100669,100671,100674,100676,100678,100680,100682,100684,100686],{"class":38,"line":66},[36,100661,100662],{"class":42},"bbb",[36,100664,47],{"class":46},[36,100666,95343],{"class":42},[36,100668,2893],{"class":62},[36,100670,2934],{"class":42},[36,100672,100673],{"class":62},"137",[36,100675,95348],{"class":42},[36,100677,1911],{"class":62},[36,100679,2934],{"class":42},[36,100681,2634],{"class":62},[36,100683,2934],{"class":42},[36,100685,2900],{"class":62},[36,100687,123],{"class":42},[36,100689,100690],{"class":38,"line":73},[36,100691,100692],{"class":2621},"#axis=0\n",[36,100694,100695,100697,100699,100702,100704,100706,100708],{"class":38,"line":86},[36,100696,3249],{"class":42},[36,100698,47],{"class":46},[36,100700,100701],{"class":42},"np.concatenate((aaa,bbb),",[36,100703,49863],{"class":7598},[36,100705,47],{"class":46},[36,100707,2751],{"class":62},[36,100709,123],{"class":42},[36,100711,100712],{"class":38,"line":126},[36,100713,100714],{"class":42},"s.shape\n",[36,100716,100717],{"class":38,"line":131},[36,100718,100719],{"class":2621},"#输出：(4,3,6)\n",[36,100721,100722],{"class":38,"line":225},[36,100723,100724],{"class":2621},"#axis=1\n",[36,100726,100727,100730,100732,100734,100736,100738,100740],{"class":38,"line":235},[36,100728,100729],{"class":42},"ss",[36,100731,47],{"class":46},[36,100733,100701],{"class":42},[36,100735,49863],{"class":7598},[36,100737,47],{"class":46},[36,100739,1906],{"class":62},[36,100741,123],{"class":42},[36,100743,100744],{"class":38,"line":377},[36,100745,100746],{"class":42},"ss.shape\n",[36,100748,100749],{"class":38,"line":617},[36,100750,100751],{"class":2621},"#输出：(2,6,6)\n",[36,100753,100754],{"class":38,"line":643},[36,100755,100756],{"class":2621},"#axis=2\n",[36,100758,100759,100761,100763,100765,100767],{"class":38,"line":921},[36,100760,100701],{"class":42},[36,100762,49863],{"class":7598},[36,100764,47],{"class":46},[36,100766,1911],{"class":62},[36,100768,100769],{"class":42},").shape\n",[36,100771,100772],{"class":38,"line":934},[36,100773,100774],{"class":2621},"#输出：（2，3，12）\n",[19,100776,100777],{},"⑤四维数组拼接",[26,100779,100781],{"className":28,"code":100780,"language":30,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[33,100782,100783,100787,100815,100843,100868,100894,100898,100911,100916,100920,100932,100937,100941,100953,100958,100963,100975],{"__ignoreMap":31},[36,100784,100785],{"class":38,"line":39},[36,100786,100629],{"class":2621},[36,100788,100789,100791,100793,100795,100797,100799,100801,100803,100805,100807,100809,100811,100813],{"class":38,"line":54},[36,100790,97862],{"class":42},[36,100792,47],{"class":46},[36,100794,95343],{"class":42},[36,100796,1906],{"class":62},[36,100798,2934],{"class":42},[36,100800,2881],{"class":62},[36,100802,95348],{"class":42},[36,100804,1911],{"class":62},[36,100806,2934],{"class":42},[36,100808,2634],{"class":62},[36,100810,2934],{"class":42},[36,100812,2900],{"class":62},[36,100814,123],{"class":42},[36,100816,100817,100819,100821,100823,100825,100827,100829,100831,100833,100835,100837,100839,100841],{"class":38,"line":66},[36,100818,100662],{"class":42},[36,100820,47],{"class":46},[36,100822,95343],{"class":42},[36,100824,2893],{"class":62},[36,100826,2934],{"class":42},[36,100828,100673],{"class":62},[36,100830,95348],{"class":42},[36,100832,1911],{"class":62},[36,100834,2934],{"class":42},[36,100836,2634],{"class":62},[36,100838,2934],{"class":42},[36,100840,2900],{"class":62},[36,100842,123],{"class":42},[36,100844,100845,100848,100850,100852,100854,100856,100858,100860,100862,100864,100866],{"class":38,"line":73},[36,100846,100847],{"class":42},"aaaa",[36,100849,47],{"class":46},[36,100851,100011],{"class":42},[36,100853,1911],{"class":62},[36,100855,2934],{"class":42},[36,100857,2634],{"class":62},[36,100859,2934],{"class":42},[36,100861,2634],{"class":62},[36,100863,2934],{"class":42},[36,100865,1911],{"class":62},[36,100867,123],{"class":42},[36,100869,100870,100873,100875,100878,100880,100882,100884,100886,100888,100890,100892],{"class":38,"line":86},[36,100871,100872],{"class":42},"bbbb",[36,100874,47],{"class":46},[36,100876,100877],{"class":42},"bbb.reshape(",[36,100879,1911],{"class":62},[36,100881,2934],{"class":42},[36,100883,2634],{"class":62},[36,100885,2934],{"class":42},[36,100887,2634],{"class":62},[36,100889,2934],{"class":42},[36,100891,1911],{"class":62},[36,100893,123],{"class":42},[36,100895,100896],{"class":38,"line":126},[36,100897,100692],{"class":2621},[36,100899,100900,100903,100905,100907,100909],{"class":38,"line":131},[36,100901,100902],{"class":42},"np.concatenate((aaaa,bbbb),",[36,100904,49863],{"class":7598},[36,100906,47],{"class":46},[36,100908,2751],{"class":62},[36,100910,100769],{"class":42},[36,100912,100913],{"class":38,"line":225},[36,100914,100915],{"class":2621},"#结果：（4，3，3，2）\n",[36,100917,100918],{"class":38,"line":235},[36,100919,100724],{"class":2621},[36,100921,100922,100924,100926,100928,100930],{"class":38,"line":377},[36,100923,100902],{"class":42},[36,100925,49863],{"class":7598},[36,100927,47],{"class":46},[36,100929,1906],{"class":62},[36,100931,100769],{"class":42},[36,100933,100934],{"class":38,"line":617},[36,100935,100936],{"class":2621},"#结果：（2，6，3，2）\n",[36,100938,100939],{"class":38,"line":643},[36,100940,100756],{"class":2621},[36,100942,100943,100945,100947,100949,100951],{"class":38,"line":921},[36,100944,100902],{"class":42},[36,100946,49863],{"class":7598},[36,100948,47],{"class":46},[36,100950,1911],{"class":62},[36,100952,100769],{"class":42},[36,100954,100955],{"class":38,"line":934},[36,100956,100957],{"class":2621},"#结果：（2，3，6，2）\n",[36,100959,100960],{"class":38,"line":939},[36,100961,100962],{"class":2621},"#axis=3\n",[36,100964,100965,100967,100969,100971,100973],{"class":38,"line":949},[36,100966,100902],{"class":42},[36,100968,49863],{"class":7598},[36,100970,47],{"class":46},[36,100972,2634],{"class":62},[36,100974,100769],{"class":42},[36,100976,100977],{"class":38,"line":962},[36,100978,100979],{"class":2621},"#结果：（2，3，3，4）\n",[14,100981,100983],{"id":100982},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100985,100986],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100988,100989],{},"①二维数组",[26,100991,100993],{"className":28,"code":100992,"language":30,"meta":31,"style":31},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[33,100994,100995,101019,101043,101048,101053],{"__ignoreMap":31},[36,100996,100997,100999,101001,101003,101005,101007,101009,101011,101013,101015,101017],{"class":38,"line":39},[36,100998,95647],{"class":42},[36,101000,47],{"class":46},[36,101002,95343],{"class":42},[36,101004,1906],{"class":62},[36,101006,2934],{"class":42},[36,101008,3078],{"class":62},[36,101010,95348],{"class":42},[36,101012,2634],{"class":62},[36,101014,2934],{"class":42},[36,101016,2850],{"class":62},[36,101018,123],{"class":42},[36,101020,101021,101023,101025,101027,101029,101031,101033,101035,101037,101039,101041],{"class":38,"line":54},[36,101022,100528],{"class":42},[36,101024,47],{"class":46},[36,101026,95343],{"class":42},[36,101028,2893],{"class":62},[36,101030,2934],{"class":42},[36,101032,3197],{"class":62},[36,101034,95348],{"class":42},[36,101036,2634],{"class":62},[36,101038,2934],{"class":42},[36,101040,2850],{"class":62},[36,101042,123],{"class":42},[36,101044,101045],{"class":38,"line":66},[36,101046,101047],{"class":42},"np.hstack((aa,bb))\n",[36,101049,101050],{"class":38,"line":73},[36,101051,101052],{"class":2621},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,101054,101055],{"class":38,"line":86},[36,101056,101057],{"class":2621},"#np.hstack([aa,bb])\n",[19,101059,100574],{},[19,101061,101062],{},[3879,101063],{"alt":31,"src":101064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,101066,101067],{},"等效于concatenate()函数中axis=1时的情况",[19,101069,101070],{},"②三维数组",[26,101072,101074],{"className":28,"code":101073,"language":30,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[33,101075,101076,101080,101108,101136,101141,101146],{"__ignoreMap":31},[36,101077,101078],{"class":38,"line":39},[36,101079,100629],{"class":2621},[36,101081,101082,101084,101086,101088,101090,101092,101094,101096,101098,101100,101102,101104,101106],{"class":38,"line":54},[36,101083,97862],{"class":42},[36,101085,47],{"class":46},[36,101087,95343],{"class":42},[36,101089,1906],{"class":62},[36,101091,2934],{"class":42},[36,101093,2881],{"class":62},[36,101095,95348],{"class":42},[36,101097,1911],{"class":62},[36,101099,2934],{"class":42},[36,101101,2634],{"class":62},[36,101103,2934],{"class":42},[36,101105,2900],{"class":62},[36,101107,123],{"class":42},[36,101109,101110,101112,101114,101116,101118,101120,101122,101124,101126,101128,101130,101132,101134],{"class":38,"line":66},[36,101111,100662],{"class":42},[36,101113,47],{"class":46},[36,101115,95343],{"class":42},[36,101117,2893],{"class":62},[36,101119,2934],{"class":42},[36,101121,100673],{"class":62},[36,101123,95348],{"class":42},[36,101125,1911],{"class":62},[36,101127,2934],{"class":42},[36,101129,2634],{"class":62},[36,101131,2934],{"class":42},[36,101133,2900],{"class":62},[36,101135,123],{"class":42},[36,101137,101138],{"class":38,"line":73},[36,101139,101140],{"class":2621},"#使用hstack\n",[36,101142,101143],{"class":38,"line":86},[36,101144,101145],{"class":42},"np.hstack((aaa,bbb)).shape\n",[36,101147,101148],{"class":38,"line":126},[36,101149,101150],{"class":2621},"#输出：（2，6，6）\n",[14,101152,101154],{"id":101153},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101156,101157],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101159,100989],{},[26,101161,101163],{"className":28,"code":101162,"language":30,"meta":31,"style":31},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[33,101164,101165,101189,101213,101218,101223,101228],{"__ignoreMap":31},[36,101166,101167,101169,101171,101173,101175,101177,101179,101181,101183,101185,101187],{"class":38,"line":39},[36,101168,95647],{"class":42},[36,101170,47],{"class":46},[36,101172,95343],{"class":42},[36,101174,1906],{"class":62},[36,101176,2934],{"class":42},[36,101178,3078],{"class":62},[36,101180,95348],{"class":42},[36,101182,2634],{"class":62},[36,101184,2934],{"class":42},[36,101186,2850],{"class":62},[36,101188,123],{"class":42},[36,101190,101191,101193,101195,101197,101199,101201,101203,101205,101207,101209,101211],{"class":38,"line":54},[36,101192,100528],{"class":42},[36,101194,47],{"class":46},[36,101196,95343],{"class":42},[36,101198,2893],{"class":62},[36,101200,2934],{"class":42},[36,101202,3197],{"class":62},[36,101204,95348],{"class":42},[36,101206,2634],{"class":62},[36,101208,2934],{"class":42},[36,101210,2850],{"class":62},[36,101212,123],{"class":42},[36,101214,101215],{"class":38,"line":66},[36,101216,101217],{"class":2621},"#vstack 垂直方向进行堆叠\n",[36,101219,101220],{"class":38,"line":73},[36,101221,101222],{"class":42},"np.vstack((aa,bb))\n",[36,101224,101225],{"class":38,"line":86},[36,101226,101227],{"class":2621},"#与hstack传的参数类似，等价于：\n",[36,101229,101230],{"class":38,"line":126},[36,101231,101232],{"class":42},"np.vstack([aa,bb])\n",[19,101234,100574],{},[19,101236,101237],{},[3879,101238],{"alt":31,"src":101239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101241,101070],{},[26,101243,101245],{"className":28,"code":101244,"language":30,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[33,101246,101247,101251,101279,101307,101312,101317],{"__ignoreMap":31},[36,101248,101249],{"class":38,"line":39},[36,101250,100629],{"class":2621},[36,101252,101253,101255,101257,101259,101261,101263,101265,101267,101269,101271,101273,101275,101277],{"class":38,"line":54},[36,101254,97862],{"class":42},[36,101256,47],{"class":46},[36,101258,95343],{"class":42},[36,101260,1906],{"class":62},[36,101262,2934],{"class":42},[36,101264,2881],{"class":62},[36,101266,95348],{"class":42},[36,101268,1911],{"class":62},[36,101270,2934],{"class":42},[36,101272,2634],{"class":62},[36,101274,2934],{"class":42},[36,101276,2900],{"class":62},[36,101278,123],{"class":42},[36,101280,101281,101283,101285,101287,101289,101291,101293,101295,101297,101299,101301,101303,101305],{"class":38,"line":66},[36,101282,100662],{"class":42},[36,101284,47],{"class":46},[36,101286,95343],{"class":42},[36,101288,2893],{"class":62},[36,101290,2934],{"class":42},[36,101292,100673],{"class":62},[36,101294,95348],{"class":42},[36,101296,1911],{"class":62},[36,101298,2934],{"class":42},[36,101300,2634],{"class":62},[36,101302,2934],{"class":42},[36,101304,2900],{"class":62},[36,101306,123],{"class":42},[36,101308,101309],{"class":38,"line":73},[36,101310,101311],{"class":2621},"#使用vstack\n",[36,101313,101314],{"class":38,"line":86},[36,101315,101316],{"class":42},"np.vstack((aaa,bbb)).shape\n",[36,101318,101319],{"class":38,"line":126},[36,101320,101321],{"class":2621},"#输出：（4，3，6）\n",[14,101323,101325],{"id":101324},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101327,101328],{},"该方法是三维数组特有的方法",[19,101330,101331],{},"也就是说",[19,101333,101334],{},"一维数组拼接方法用：concatenate()",[19,101336,101337],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101339,101340],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101342,101343],{},"四维数组及多维数组只能用concatenate进行拼接",[26,101345,101347],{"className":28,"code":101346,"language":30,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[33,101348,101349,101353,101381,101409,101414,101419],{"__ignoreMap":31},[36,101350,101351],{"class":38,"line":39},[36,101352,100629],{"class":2621},[36,101354,101355,101357,101359,101361,101363,101365,101367,101369,101371,101373,101375,101377,101379],{"class":38,"line":54},[36,101356,97862],{"class":42},[36,101358,47],{"class":46},[36,101360,95343],{"class":42},[36,101362,1906],{"class":62},[36,101364,2934],{"class":42},[36,101366,2881],{"class":62},[36,101368,95348],{"class":42},[36,101370,1911],{"class":62},[36,101372,2934],{"class":42},[36,101374,2634],{"class":62},[36,101376,2934],{"class":42},[36,101378,2900],{"class":62},[36,101380,123],{"class":42},[36,101382,101383,101385,101387,101389,101391,101393,101395,101397,101399,101401,101403,101405,101407],{"class":38,"line":66},[36,101384,100662],{"class":42},[36,101386,47],{"class":46},[36,101388,95343],{"class":42},[36,101390,2893],{"class":62},[36,101392,2934],{"class":42},[36,101394,100673],{"class":62},[36,101396,95348],{"class":42},[36,101398,1911],{"class":62},[36,101400,2934],{"class":42},[36,101402,2634],{"class":62},[36,101404,2934],{"class":42},[36,101406,2900],{"class":62},[36,101408,123],{"class":42},[36,101410,101411],{"class":38,"line":73},[36,101412,101413],{"class":2621},"#使用dstack\n",[36,101415,101416],{"class":38,"line":86},[36,101417,101418],{"class":42},"np.dstack((aaa,bbb)).shape\n",[36,101420,101421],{"class":38,"line":126},[36,101422,101423],{"class":2621},"#结果：（2，3，12）\n",[2467,101425,101426],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":101428},[101429,101430,101431,101432],{"id":100368,"depth":54,"text":100369},{"id":100982,"depth":54,"text":100983},{"id":101153,"depth":54,"text":101154},{"id":101324,"depth":54,"text":101325},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100360,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101439,"title":101440,"body":101441,"description":2493,"extension":2494,"meta":101716,"navigation":69,"path":101717,"seo":101718,"stem":101719,"__hash__":101720},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101442,"toc":101714},[101443,101446,101449,101543,101546,101549,101552,101555,101558,101561,101564,101567,101711],[10,101444,101440],{"id":101445},"_7数组转置",[19,101447,101448],{},"使用transpose()函数",[26,101450,101452],{"className":28,"code":101451,"language":30,"meta":31,"style":31},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[33,101453,101454,101464,101488,101493,101498,101503,101508,101516,101520,101524,101529,101534,101539],{"__ignoreMap":31},[36,101455,101456,101458,101460,101462],{"class":38,"line":39},[36,101457,1943],{"class":46},[36,101459,33734],{"class":42},[36,101461,33737],{"class":46},[36,101463,33740],{"class":42},[36,101465,101466,101468,101470,101472,101474,101476,101478,101480,101482,101484,101486],{"class":38,"line":54},[36,101467,2796],{"class":42},[36,101469,47],{"class":46},[36,101471,34071],{"class":42},[36,101473,1906],{"class":62},[36,101475,2934],{"class":42},[36,101477,3078],{"class":62},[36,101479,95348],{"class":42},[36,101481,2850],{"class":62},[36,101483,2934],{"class":42},[36,101485,2634],{"class":62},[36,101487,123],{"class":42},[36,101489,101490],{"class":38,"line":66},[36,101491,101492],{"class":2621},"#二维数组转置\n",[36,101494,101495],{"class":38,"line":73},[36,101496,101497],{"class":2621},"#调用transpose()函数\n",[36,101499,101500],{"class":38,"line":86},[36,101501,101502],{"class":42},"a.transpose()\n",[36,101504,101505],{"class":38,"line":126},[36,101506,101507],{"class":2621},"#对于二维数组也可以采用.T来实现\n",[36,101509,101510,101513],{"class":38,"line":131},[36,101511,101512],{"class":42},"a.T",[36,101514,101515],{"class":2621},"#与上述代码一样\n",[36,101517,101518],{"class":38,"line":225},[36,101519,95905],{"class":2621},[36,101521,101522],{"class":38,"line":235},[36,101523,96269],{"class":50},[36,101525,101526],{"class":38,"line":377},[36,101527,101528],{"class":50},"array([[ 1,  4,  7, 10],\n",[36,101530,101531],{"class":38,"line":617},[36,101532,101533],{"class":50},"       [ 2,  5,  8, 11],\n",[36,101535,101536],{"class":38,"line":643},[36,101537,101538],{"class":50},"       [ 3,  6,  9, 12]])\n",[36,101540,101541],{"class":38,"line":921},[36,101542,96269],{"class":50},[19,101544,101545],{},"也可以使用np.transpose()的形式",[19,101547,101548],{},"#多维数组进行转置 np.transpose()",[19,101550,101551],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101553,101554],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101556,101557],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101559,101560],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101562,101563],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101565,101566],{},"四维及以上的数组也是一样的道理",[26,101568,101570],{"className":28,"code":101569,"language":30,"meta":31,"style":31},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[33,101571,101572,101600,101605,101610,101615,101633,101638,101670,101675,101680,101685,101706],{"__ignoreMap":31},[36,101573,101574,101576,101578,101580,101582,101584,101586,101588,101590,101592,101594,101596,101598],{"class":38,"line":39},[36,101575,3374],{"class":42},[36,101577,47],{"class":46},[36,101579,95343],{"class":42},[36,101581,1906],{"class":62},[36,101583,2934],{"class":42},[36,101585,2881],{"class":62},[36,101587,95348],{"class":42},[36,101589,2634],{"class":62},[36,101591,2934],{"class":42},[36,101593,2900],{"class":62},[36,101595,2934],{"class":42},[36,101597,1911],{"class":62},[36,101599,123],{"class":42},[36,101601,101602],{"class":38,"line":54},[36,101603,101604],{"class":42},"x.shape\n",[36,101606,101607],{"class":38,"line":66},[36,101608,101609],{"class":2621},"#结果：（3,6,2）\n",[36,101611,101612],{"class":38,"line":73},[36,101613,101614],{"class":2621},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,101616,101617,101620,101622,101624,101626,101628,101630],{"class":38,"line":86},[36,101618,101619],{"class":42},"np.transpose(x,(",[36,101621,1911],{"class":62},[36,101623,2934],{"class":42},[36,101625,1906],{"class":62},[36,101627,2934],{"class":42},[36,101629,2751],{"class":62},[36,101631,101632],{"class":42},")).shape\n",[36,101634,101635],{"class":38,"line":126},[36,101636,101637],{"class":2621},"#结果：(2,6,3)\n",[36,101639,101640,101642,101644,101646,101648,101650,101652,101654,101656,101658,101660,101662,101664,101666,101668],{"class":38,"line":131},[36,101641,100847],{"class":42},[36,101643,47],{"class":46},[36,101645,95343],{"class":42},[36,101647,1906],{"class":62},[36,101649,2934],{"class":42},[36,101651,2881],{"class":62},[36,101653,95348],{"class":42},[36,101655,2634],{"class":62},[36,101657,2934],{"class":42},[36,101659,1911],{"class":62},[36,101661,2934],{"class":42},[36,101663,1906],{"class":62},[36,101665,2934],{"class":42},[36,101667,2900],{"class":62},[36,101669,123],{"class":42},[36,101671,101672],{"class":38,"line":225},[36,101673,101674],{"class":42},"aaaa.shape\n",[36,101676,101677],{"class":38,"line":235},[36,101678,101679],{"class":2621},"#结果：（3，2，1，6）\n",[36,101681,101682],{"class":38,"line":377},[36,101683,101684],{"class":2621},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,101686,101687,101690,101692,101694,101696,101698,101700,101702,101704],{"class":38,"line":617},[36,101688,101689],{"class":42},"np.transpose(aaaa,(",[36,101691,1906],{"class":62},[36,101693,2934],{"class":42},[36,101695,1911],{"class":62},[36,101697,2934],{"class":42},[36,101699,2751],{"class":62},[36,101701,2934],{"class":42},[36,101703,2634],{"class":62},[36,101705,101632],{"class":42},[36,101707,101708],{"class":38,"line":643},[36,101709,101710],{"class":2621},"#结果：(2,1,3,6)\n",[2467,101712,101713],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":101715},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101440,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101722,"title":101723,"body":101724,"description":2493,"extension":2494,"meta":102458,"navigation":69,"path":102459,"seo":102460,"stem":102461,"__hash__":102462},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101725,"toc":102456},[101726,101729,101732,101735,101738,101741,101744,101747,101750,101859,101862,101865,102453],[10,101727,101723],{"id":101728},"_8数组分割",[19,101730,101731],{},"split分割",[19,101733,101734],{},"numpy.split(ary,indics_or_sections,axis)",[19,101736,101737],{},"解释：",[19,101739,101740],{},"ary:被分割的数组",[19,101742,101743],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101745,101746],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101748,101749],{},"①一维数组的分割",[26,101751,101753],{"className":28,"code":101752,"language":30,"meta":31,"style":31},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[33,101754,101755,101771,101776,101785,101789,101794,101802,101806,101811,101816,101829,101833,101838,101850,101854],{"__ignoreMap":31},[36,101756,101757,101759,101761,101763,101765,101767,101769],{"class":38,"line":39},[36,101758,2796],{"class":42},[36,101760,47],{"class":46},[36,101762,95343],{"class":42},[36,101764,1906],{"class":62},[36,101766,2934],{"class":42},[36,101768,2976],{"class":62},[36,101770,123],{"class":42},[36,101772,101773],{"class":38,"line":54},[36,101774,101775],{"class":2621},"#如果传入整数，必须能够平分，否则会报错\n",[36,101777,101778,101781,101783],{"class":38,"line":66},[36,101779,101780],{"class":42},"np.split(a,",[36,101782,1911],{"class":62},[36,101784,123],{"class":42},[36,101786,101787],{"class":38,"line":73},[36,101788,95905],{"class":2621},[36,101790,101791],{"class":38,"line":86},[36,101792,101793],{"class":2621},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,101795,101796,101798,101800],{"class":38,"line":126},[36,101797,101780],{"class":42},[36,101799,2850],{"class":62},[36,101801,123],{"class":42},[36,101803,101804],{"class":38,"line":131},[36,101805,95905],{"class":2621},[36,101807,101808],{"class":38,"line":225},[36,101809,101810],{"class":2621},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,101812,101813],{"class":38,"line":235},[36,101814,101815],{"class":2621},"#传入数组\n",[36,101817,101818,101821,101823,101825,101827],{"class":38,"line":377},[36,101819,101820],{"class":42},"np.split(a,[",[36,101822,2634],{"class":62},[36,101824,2934],{"class":42},[36,101826,2875],{"class":62},[36,101828,7040],{"class":42},[36,101830,101831],{"class":38,"line":617},[36,101832,95905],{"class":2621},[36,101834,101835],{"class":38,"line":643},[36,101836,101837],{"class":2621},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,101839,101840,101842,101844,101846,101848],{"class":38,"line":921},[36,101841,101820],{"class":42},[36,101843,2875],{"class":62},[36,101845,2934],{"class":42},[36,101847,2925],{"class":62},[36,101849,7040],{"class":42},[36,101851,101852],{"class":38,"line":934},[36,101853,95905],{"class":2621},[36,101855,101856],{"class":38,"line":939},[36,101857,101858],{"class":2621},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101860,101861],{},"②二维数组的分割",[19,101863,101864],{},"使用split()",[26,101866,101868],{"className":28,"code":101867,"language":30,"meta":31,"style":31},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[33,101869,101870,101875,101899,101904,101913,101917,101921,101926,101931,101936,101941,101946,101951,101956,101960,101973,101977,101981,101985,101989,101993,101998,102003,102008,102012,102017,102033,102037,102041,102046,102051,102056,102061,102066,102071,102076,102081,102086,102091,102096,102101,102106,102111,102116,102121,102126,102131,102135,102139,102159,102163,102167,102172,102177,102182,102187,102192,102197,102202,102207,102212,102217,102222,102227,102232,102237,102242,102247,102252,102257,102261,102266,102275,102279,102283,102287,102291,102295,102299,102303,102307,102311,102320,102324,102328,102332,102336,102340,102344,102348,102352,102356,102360,102364,102368,102372,102376,102380,102384,102388,102392,102396,102400,102404,102417,102421,102425,102429,102433,102437,102441,102445,102449],{"__ignoreMap":31},[36,101871,101872],{"class":38,"line":39},[36,101873,101874],{"class":2621},"#二维数组分割\n",[36,101876,101877,101879,101881,101883,101885,101887,101889,101891,101893,101895,101897],{"class":38,"line":54},[36,101878,95647],{"class":42},[36,101880,47],{"class":46},[36,101882,95343],{"class":42},[36,101884,1906],{"class":62},[36,101886,2934],{"class":42},[36,101888,2881],{"class":62},[36,101890,95348],{"class":42},[36,101892,2900],{"class":62},[36,101894,2934],{"class":42},[36,101896,2900],{"class":62},[36,101898,123],{"class":42},[36,101900,101901],{"class":38,"line":66},[36,101902,101903],{"class":2621},"#默认axis=0  传入整数平均分,按行来的\n",[36,101905,101906,101909,101911],{"class":38,"line":73},[36,101907,101908],{"class":42},"np.split(aa,",[36,101910,2634],{"class":62},[36,101912,123],{"class":42},[36,101914,101915],{"class":38,"line":86},[36,101916,98105],{"class":2621},[36,101918,101919],{"class":38,"line":126},[36,101920,96269],{"class":50},[36,101922,101923],{"class":38,"line":131},[36,101924,101925],{"class":50},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,101927,101928],{"class":38,"line":225},[36,101929,101930],{"class":50},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,101932,101933],{"class":38,"line":235},[36,101934,101935],{"class":50}," array([[13, 14, 15, 16, 17, 18],\n",[36,101937,101938],{"class":38,"line":377},[36,101939,101940],{"class":50},"        [19, 20, 21, 22, 23, 24]]),\n",[36,101942,101943],{"class":38,"line":617},[36,101944,101945],{"class":50}," array([[25, 26, 27, 28, 29, 30],\n",[36,101947,101948],{"class":38,"line":643},[36,101949,101950],{"class":50},"        [31, 32, 33, 34, 35, 36]])]\n",[36,101952,101953],{"class":38,"line":921},[36,101954,101955],{"class":50}," '''\n",[36,101957,101958],{"class":38,"line":934},[36,101959,101815],{"class":2621},[36,101961,101962,101965,101967,101969,101971],{"class":38,"line":939},[36,101963,101964],{"class":42},"np.split(aa,[",[36,101966,1911],{"class":62},[36,101968,2934],{"class":42},[36,101970,2875],{"class":62},[36,101972,7040],{"class":42},[36,101974,101975],{"class":38,"line":949},[36,101976,98105],{"class":2621},[36,101978,101979],{"class":38,"line":962},[36,101980,96269],{"class":50},[36,101982,101983],{"class":38,"line":974},[36,101984,101925],{"class":50},[36,101986,101987],{"class":38,"line":979},[36,101988,101930],{"class":50},[36,101990,101991],{"class":38,"line":994},[36,101992,101935],{"class":50},[36,101994,101995],{"class":38,"line":1006},[36,101996,101997],{"class":50},"        [19, 20, 21, 22, 23, 24],\n",[36,101999,102000],{"class":38,"line":1011},[36,102001,102002],{"class":50},"        [25, 26, 27, 28, 29, 30]]),\n",[36,102004,102005],{"class":38,"line":1023},[36,102006,102007],{"class":50}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,102009,102010],{"class":38,"line":1028},[36,102011,96269],{"class":50},[36,102013,102014],{"class":38,"line":1033},[36,102015,102016],{"class":2621},"#axis=1 按照列来分\n",[36,102018,102019,102021,102023,102025,102027,102029,102031],{"class":38,"line":1053},[36,102020,101908],{"class":42},[36,102022,2634],{"class":62},[36,102024,2934],{"class":42},[36,102026,49863],{"class":7598},[36,102028,47],{"class":46},[36,102030,1906],{"class":62},[36,102032,123],{"class":42},[36,102034,102035],{"class":38,"line":1064},[36,102036,98105],{"class":2621},[36,102038,102039],{"class":38,"line":1075},[36,102040,96269],{"class":50},[36,102042,102043],{"class":38,"line":2291},[36,102044,102045],{"class":50},"[array([[ 1,  2],\n",[36,102047,102048],{"class":38,"line":2329},[36,102049,102050],{"class":50},"        [ 7,  8],\n",[36,102052,102053],{"class":38,"line":2334},[36,102054,102055],{"class":50},"        [13, 14],\n",[36,102057,102058],{"class":38,"line":2339},[36,102059,102060],{"class":50},"        [19, 20],\n",[36,102062,102063],{"class":38,"line":2365},[36,102064,102065],{"class":50},"        [25, 26],\n",[36,102067,102068],{"class":38,"line":2373},[36,102069,102070],{"class":50},"        [31, 32]]),\n",[36,102072,102073],{"class":38,"line":5001},[36,102074,102075],{"class":50}," array([[ 3,  4],\n",[36,102077,102078],{"class":38,"line":5006},[36,102079,102080],{"class":50},"        [ 9, 10],\n",[36,102082,102083],{"class":38,"line":10328},[36,102084,102085],{"class":50},"        [15, 16],\n",[36,102087,102088],{"class":38,"line":10352},[36,102089,102090],{"class":50},"        [21, 22],\n",[36,102092,102093],{"class":38,"line":10357},[36,102094,102095],{"class":50},"        [27, 28],\n",[36,102097,102098],{"class":38,"line":10363},[36,102099,102100],{"class":50},"        [33, 34]]),\n",[36,102102,102103],{"class":38,"line":10390},[36,102104,102105],{"class":50}," array([[ 5,  6],\n",[36,102107,102108],{"class":38,"line":10395},[36,102109,102110],{"class":50},"        [11, 12],\n",[36,102112,102113],{"class":38,"line":10401},[36,102114,102115],{"class":50},"        [17, 18],\n",[36,102117,102118],{"class":38,"line":10413},[36,102119,102120],{"class":50},"        [23, 24],\n",[36,102122,102123],{"class":38,"line":10425},[36,102124,102125],{"class":50},"        [29, 30],\n",[36,102127,102128],{"class":38,"line":10437},[36,102129,102130],{"class":50},"        [35, 36]])]\n",[36,102132,102133],{"class":38,"line":12095},[36,102134,101955],{"class":50},[36,102136,102137],{"class":38,"line":12120},[36,102138,101815],{"class":2621},[36,102140,102141,102143,102145,102147,102149,102151,102153,102155,102157],{"class":38,"line":12143},[36,102142,101964],{"class":42},[36,102144,1906],{"class":62},[36,102146,2934],{"class":42},[36,102148,1911],{"class":62},[36,102150,43958],{"class":42},[36,102152,49863],{"class":7598},[36,102154,47],{"class":46},[36,102156,1906],{"class":62},[36,102158,123],{"class":42},[36,102160,102161],{"class":38,"line":12167},[36,102162,95905],{"class":2621},[36,102164,102165],{"class":38,"line":12172},[36,102166,96269],{"class":50},[36,102168,102169],{"class":38,"line":12177},[36,102170,102171],{"class":50},"[array([[ 1],\n",[36,102173,102174],{"class":38,"line":12182},[36,102175,102176],{"class":50},"        [ 7],\n",[36,102178,102179],{"class":38,"line":12191},[36,102180,102181],{"class":50},"        [13],\n",[36,102183,102184],{"class":38,"line":12196},[36,102185,102186],{"class":50},"        [19],\n",[36,102188,102189],{"class":38,"line":12202},[36,102190,102191],{"class":50},"        [25],\n",[36,102193,102194],{"class":38,"line":12223},[36,102195,102196],{"class":50},"        [31]]),\n",[36,102198,102199],{"class":38,"line":12229},[36,102200,102201],{"class":50}," array([[ 2],\n",[36,102203,102204],{"class":38,"line":12243},[36,102205,102206],{"class":50},"        [ 8],\n",[36,102208,102209],{"class":38,"line":12249},[36,102210,102211],{"class":50},"        [14],\n",[36,102213,102214],{"class":38,"line":12276},[36,102215,102216],{"class":50},"        [20],\n",[36,102218,102219],{"class":38,"line":12285},[36,102220,102221],{"class":50},"        [26],\n",[36,102223,102224],{"class":38,"line":12291},[36,102225,102226],{"class":50},"        [32]]),\n",[36,102228,102229],{"class":38,"line":12299},[36,102230,102231],{"class":50}," array([[ 3,  4,  5,  6],\n",[36,102233,102234],{"class":38,"line":12304},[36,102235,102236],{"class":50},"        [ 9, 10, 11, 12],\n",[36,102238,102239],{"class":38,"line":18977},[36,102240,102241],{"class":50},"        [15, 16, 17, 18],\n",[36,102243,102244],{"class":38,"line":18983},[36,102245,102246],{"class":50},"        [21, 22, 23, 24],\n",[36,102248,102249],{"class":38,"line":19006},[36,102250,102251],{"class":50},"        [27, 28, 29, 30],\n",[36,102253,102254],{"class":38,"line":19012},[36,102255,102256],{"class":50},"        [33, 34, 35, 36]])]\n",[36,102258,102259],{"class":38,"line":19035},[36,102260,96269],{"class":50},[36,102262,102263],{"class":38,"line":19049},[36,102264,102265],{"class":2621},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,102267,102268,102271,102273],{"class":38,"line":19069},[36,102269,102270],{"class":42},"np.vsplit(aa,",[36,102272,2634],{"class":62},[36,102274,123],{"class":42},[36,102276,102277],{"class":38,"line":19075},[36,102278,95905],{"class":2621},[36,102280,102281],{"class":38,"line":19086},[36,102282,96269],{"class":50},[36,102284,102285],{"class":38,"line":19109},[36,102286,101925],{"class":50},[36,102288,102289],{"class":38,"line":19131},[36,102290,101930],{"class":50},[36,102292,102293],{"class":38,"line":19136},[36,102294,101935],{"class":50},[36,102296,102297],{"class":38,"line":19142},[36,102298,101940],{"class":50},[36,102300,102301],{"class":38,"line":19156},[36,102302,101945],{"class":50},[36,102304,102305],{"class":38,"line":19169},[36,102306,101950],{"class":50},[36,102308,102309],{"class":38,"line":19174},[36,102310,96269],{"class":50},[36,102312,102313,102316,102318],{"class":38,"line":19188},[36,102314,102315],{"class":42},"np.hsplit(aa,",[36,102317,2634],{"class":62},[36,102319,123],{"class":42},[36,102321,102322],{"class":38,"line":19193},[36,102323,95905],{"class":2621},[36,102325,102326],{"class":38,"line":19199},[36,102327,96269],{"class":50},[36,102329,102330],{"class":38,"line":19204},[36,102331,102045],{"class":50},[36,102333,102334],{"class":38,"line":19218},[36,102335,102050],{"class":50},[36,102337,102338],{"class":38,"line":19223},[36,102339,102055],{"class":50},[36,102341,102342],{"class":38,"line":19228},[36,102343,102060],{"class":50},[36,102345,102346],{"class":38,"line":19242},[36,102347,102065],{"class":50},[36,102349,102350],{"class":38,"line":19254},[36,102351,102070],{"class":50},[36,102353,102354],{"class":38,"line":19259},[36,102355,102075],{"class":50},[36,102357,102358],{"class":38,"line":19272},[36,102359,102080],{"class":50},[36,102361,102362],{"class":38,"line":19277},[36,102363,102085],{"class":50},[36,102365,102366],{"class":38,"line":19282},[36,102367,102090],{"class":50},[36,102369,102370],{"class":38,"line":19287},[36,102371,102095],{"class":50},[36,102373,102374],{"class":38,"line":19300},[36,102375,102100],{"class":50},[36,102377,102378],{"class":38,"line":19305},[36,102379,102105],{"class":50},[36,102381,102382],{"class":38,"line":34985},[36,102383,102110],{"class":50},[36,102385,102386],{"class":38,"line":34991},[36,102387,102115],{"class":50},[36,102389,102390],{"class":38,"line":34997},[36,102391,102120],{"class":50},[36,102393,102394],{"class":38,"line":35003},[36,102395,102125],{"class":50},[36,102397,102398],{"class":38,"line":35009},[36,102399,102130],{"class":50},[36,102401,102402],{"class":38,"line":35020},[36,102403,96269],{"class":50},[36,102405,102406,102409,102411,102413,102415],{"class":38,"line":35026},[36,102407,102408],{"class":42},"np.vsplit(aa,[",[36,102410,1911],{"class":62},[36,102412,2934],{"class":42},[36,102414,2875],{"class":62},[36,102416,7040],{"class":42},[36,102418,102419],{"class":38,"line":35046},[36,102420,95905],{"class":2621},[36,102422,102423],{"class":38,"line":35052},[36,102424,96269],{"class":50},[36,102426,102427],{"class":38,"line":35063},[36,102428,101925],{"class":50},[36,102430,102431],{"class":38,"line":35069},[36,102432,101930],{"class":50},[36,102434,102435],{"class":38,"line":35075},[36,102436,101935],{"class":50},[36,102438,102439],{"class":38,"line":35081},[36,102440,101997],{"class":50},[36,102442,102443],{"class":38,"line":35087},[36,102444,102002],{"class":50},[36,102446,102447],{"class":38,"line":35093},[36,102448,102007],{"class":50},[36,102450,102451],{"class":38,"line":35099},[36,102452,101955],{"class":50},[2467,102454,102455],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":102457},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101723,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102464,"title":102465,"body":102466,"description":2493,"extension":2494,"meta":102960,"navigation":69,"path":102961,"seo":102962,"stem":102963,"__hash__":102964},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102467,"toc":102951},[102468,102471,102474,102499,102503,102562,102614,102618,102620,102656,102710,102712,102750,102821,102825,102830,102834,102837,102870,102873,102877,102880,102883,102886,102889,102894,102898,102901,102904,102907,102910,102915,102919,102924,102927,102948],[10,102469,102465],{"id":102470},"_9数学函数",[19,102472,102473],{},"补充回顾：python的列表推导式",[26,102475,102477],{"className":28,"code":102476,"language":30,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,102478,102479],{"__ignoreMap":31},[36,102480,102481,102483,102485,102487,102490,102492,102494,102496],{"class":38,"line":39},[36,102482,3444],{"class":42},[36,102484,1906],{"class":62},[36,102486,3139],{"class":46},[36,102488,102489],{"class":42},"i ",[36,102491,5410],{"class":46},[36,102493,11818],{"class":42},[36,102495,28413],{"class":46},[36,102497,102498],{"class":42}," a]\n",[14,102500,102502],{"id":102501},"_91-求倒数","9.1 求倒数",[26,102504,102506],{"className":28,"code":102505,"language":30,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,102507,102508,102513,102541,102553],{"__ignoreMap":31},[36,102509,102510],{"class":38,"line":39},[36,102511,102512],{"class":2621},"#数组求倒数\n",[36,102514,102515,102517,102519,102521,102523,102525,102527,102529,102531,102533,102535,102537,102539],{"class":38,"line":54},[36,102516,2796],{"class":42},[36,102518,47],{"class":46},[36,102520,3444],{"class":42},[36,102522,1906],{"class":62},[36,102524,2934],{"class":42},[36,102526,1911],{"class":62},[36,102528,2934],{"class":42},[36,102530,2634],{"class":62},[36,102532,2934],{"class":42},[36,102534,2850],{"class":62},[36,102536,2934],{"class":42},[36,102538,2875],{"class":62},[36,102540,35598],{"class":42},[36,102542,102543,102545,102547,102550],{"class":38,"line":66},[36,102544,2820],{"class":42},[36,102546,47],{"class":46},[36,102548,102549],{"class":42},"np.array(a)",[36,102551,102552],{"class":2621},"#将列表转换为数组\n",[36,102554,102555,102557,102559],{"class":38,"line":73},[36,102556,1906],{"class":62},[36,102558,3139],{"class":46},[36,102560,102561],{"class":42},"b\n",[26,102563,102565],{"className":28,"code":102564,"language":30,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,102566,102567,102595,102604,102609],{"__ignoreMap":31},[36,102568,102569,102571,102573,102575,102577,102579,102581,102583,102585,102587,102589,102591,102593],{"class":38,"line":39},[36,102570,2796],{"class":42},[36,102572,47],{"class":46},[36,102574,3444],{"class":42},[36,102576,1906],{"class":62},[36,102578,2934],{"class":42},[36,102580,1911],{"class":62},[36,102582,2934],{"class":42},[36,102584,2634],{"class":62},[36,102586,2934],{"class":42},[36,102588,2850],{"class":62},[36,102590,2934],{"class":42},[36,102592,2875],{"class":62},[36,102594,35598],{"class":42},[36,102596,102597,102599,102601],{"class":38,"line":54},[36,102598,2820],{"class":42},[36,102600,47],{"class":46},[36,102602,102603],{"class":42},"np.array(a)\n",[36,102605,102606],{"class":38,"line":66},[36,102607,102608],{"class":2621},"#调用numpy中的函数reciprocal()\n",[36,102610,102611],{"class":38,"line":73},[36,102612,102613],{"class":42},"np.reciprocal(b)\n",[14,102615,102617],{"id":102616},"_92-求平方","9.2 求平方",[19,102619,96871],{},[26,102621,102623],{"className":28,"code":102622,"language":30,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,102624,102625,102630,102635,102651],{"__ignoreMap":31},[36,102626,102627],{"class":38,"line":39},[36,102628,102629],{"class":2621},"#square()，求平方\n",[36,102631,102632],{"class":38,"line":54},[36,102633,102634],{"class":2621},"#一维数组\n",[36,102636,102637,102639,102641,102643,102645,102647,102649],{"class":38,"line":66},[36,102638,2796],{"class":42},[36,102640,47],{"class":46},[36,102642,95343],{"class":42},[36,102644,1906],{"class":62},[36,102646,2934],{"class":42},[36,102648,3002],{"class":62},[36,102650,123],{"class":42},[36,102652,102653],{"class":38,"line":73},[36,102654,102655],{"class":42},"np.square(a)\n",[26,102657,102659],{"className":28,"code":102658,"language":30,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,102660,102661,102666,102671,102692],{"__ignoreMap":31},[36,102662,102663],{"class":38,"line":39},[36,102664,102665],{"class":2621},"#或者通过循环遍历的形式来计算\n",[36,102667,102668],{"class":38,"line":54},[36,102669,102670],{"class":2621},"#这是一个列表\n",[36,102672,102673,102676,102678,102680,102682,102684,102686,102689],{"class":38,"line":66},[36,102674,102675],{"class":42},"[i",[36,102677,3011],{"class":46},[36,102679,102489],{"class":42},[36,102681,5410],{"class":46},[36,102683,11818],{"class":42},[36,102685,28413],{"class":46},[36,102687,102688],{"class":42}," a]",[36,102690,102691],{"class":2621},"#这个求完之后在数列当中\n",[36,102693,102694,102697,102699,102701,102703,102705,102707],{"class":38,"line":73},[36,102695,102696],{"class":42},"np.array([i",[36,102698,3011],{"class":46},[36,102700,102489],{"class":42},[36,102702,5410],{"class":46},[36,102704,11818],{"class":42},[36,102706,28413],{"class":46},[36,102708,102709],{"class":42}," a])\n",[19,102711,95632],{},[26,102713,102715],{"className":28,"code":102714,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,102716,102717,102721,102745],{"__ignoreMap":31},[36,102718,102719],{"class":38,"line":39},[36,102720,95642],{"class":2621},[36,102722,102723,102725,102727,102729,102731,102733,102735,102737,102739,102741,102743],{"class":38,"line":54},[36,102724,95647],{"class":42},[36,102726,47],{"class":46},[36,102728,95343],{"class":42},[36,102730,1906],{"class":62},[36,102732,2934],{"class":42},[36,102734,3078],{"class":62},[36,102736,95348],{"class":42},[36,102738,2850],{"class":62},[36,102740,2934],{"class":42},[36,102742,2634],{"class":62},[36,102744,123],{"class":42},[36,102746,102747],{"class":38,"line":66},[36,102748,102749],{"class":42},"np.square(aa)\n",[26,102751,102753],{"className":28,"code":102752,"language":30,"meta":31,"style":31},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[33,102754,102755,102760,102769,102785,102801,102816],{"__ignoreMap":31},[36,102756,102757],{"class":38,"line":39},[36,102758,102759],{"class":2621},"#传统的方式\n",[36,102761,102762,102764,102766],{"class":38,"line":54},[36,102763,100528],{"class":42},[36,102765,47],{"class":46},[36,102767,102768],{"class":42},"np.empty_like(aa)\n",[36,102770,102771,102773,102775,102777,102779,102781,102783],{"class":38,"line":66},[36,102772,5410],{"class":46},[36,102774,11818],{"class":42},[36,102776,28413],{"class":46},[36,102778,34796],{"class":62},[36,102780,92],{"class":42},[36,102782,2850],{"class":62},[36,102784,1147],{"class":42},[36,102786,102787,102789,102791,102793,102795,102797,102799],{"class":38,"line":73},[36,102788,5586],{"class":46},[36,102790,11879],{"class":42},[36,102792,28413],{"class":46},[36,102794,34796],{"class":62},[36,102796,92],{"class":42},[36,102798,2634],{"class":62},[36,102800,1147],{"class":42},[36,102802,102803,102806,102808,102811,102813],{"class":38,"line":86},[36,102804,102805],{"class":42},"        bb[i,j]",[36,102807,47],{"class":46},[36,102809,102810],{"class":42},"aa[i,j]",[36,102812,3011],{"class":46},[36,102814,102815],{"class":42},"aa[i,j]\n",[36,102817,102818],{"class":38,"line":126},[36,102819,102820],{"class":42},"bb\n",[14,102822,102824],{"id":102823},"_93-求各元素的符号","9.3 求各元素的符号",[19,102826,102827],{},[3879,102828],{"alt":31,"src":102829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102831,102833],{"id":102832},"_94-modf函数","9.4 modf函数",[19,102835,102836],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,102838,102840],{"className":28,"code":102839,"language":30,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,102841,102842,102865],{"__ignoreMap":31},[36,102843,102844,102846,102848,102850,102852,102854,102856,102858,102860,102863],{"class":38,"line":39},[36,102845,2796],{"class":42},[36,102847,47],{"class":46},[36,102849,95343],{"class":42},[36,102851,3087],{"class":46},[36,102853,3002],{"class":62},[36,102855,2934],{"class":42},[36,102857,3002],{"class":62},[36,102859,2934],{"class":42},[36,102861,102862],{"class":62},"0.3",[36,102864,123],{"class":42},[36,102866,102867],{"class":38,"line":54},[36,102868,102869],{"class":42},"np.modf(a)\n",[19,102871,102872],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102874,102876],{"id":102875},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102878,102879],{},"np.cell()",[19,102881,102882],{},"np.floor()",[19,102884,102885],{},"np.rint()",[19,102887,102888],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102890,102891],{},[3879,102892],{"alt":31,"src":102893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102895,102897],{"id":102896},"_96-around函数","9.6 around()函数",[19,102899,102900],{},"around()函数也可以实现对数的小数位数进行操作",[19,102902,102903],{},"其中的参数：",[19,102905,102906],{},"1.要传的数组",[19,102908,102909],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102911,102912],{},[3879,102913],{"alt":31,"src":102914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102916,102918],{"id":102917},"_97-三角函数","9.7 三角函数",[19,102920,102921],{},[3879,102922],{"alt":31,"src":102923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102925,102926],{},"引入图像模块非常重要",[26,102928,102930],{"className":28,"code":102929,"language":30,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,102931,102932],{"__ignoreMap":31},[36,102933,102934,102936,102939,102941,102944,102946],{"class":38,"line":39},[36,102935,1937],{"class":46},[36,102937,102938],{"class":42}," matplotlib ",[36,102940,1943],{"class":46},[36,102942,102943],{"class":42}," pyplot ",[36,102945,33737],{"class":46},[36,102947,33791],{"class":42},[2467,102949,102950],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":102952},[102953,102954,102955,102956,102957,102958,102959],{"id":102501,"depth":54,"text":102502},{"id":102616,"depth":54,"text":102617},{"id":102823,"depth":54,"text":102824},{"id":102832,"depth":54,"text":102833},{"id":102875,"depth":54,"text":102876},{"id":102896,"depth":54,"text":102897},{"id":102917,"depth":54,"text":102918},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102465,"description":2493},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102966,"title":102967,"body":102968,"description":2493,"extension":2494,"meta":102972,"navigation":69,"path":102973,"seo":102974,"stem":102975,"__hash__":102976},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102969,"toc":102970},[],{"title":31,"searchDepth":54,"depth":54,"links":102971},[],{"category":52769},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102967,"description":2493},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102978,"title":102979,"body":102980,"description":31,"extension":2494,"meta":104987,"navigation":69,"path":104988,"seo":104989,"stem":104990,"__hash__":104991},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102981,"toc":104963},[102982,102985,102989,102992,102995,103001,103004,103027,103030,103064,103067,103108,103112,103115,103208,103211,103255,103258,103275,103278,103292,103295,103298,103343,103346,103382,103386,103389,103395,103400,103420,103424,103427,103493,103496,103514,103518,103521,103550,103560,103566,103570,103573,103579,103590,103594,103597,103627,103630,103910,103913,103916,103927,103930,103933,103955,103962,103965,103983,103986,103989,104003,104011,104014,104040,104046,104049,104052,104062,104074,104094,104103,104123,104133,104157,104170,104184,104189,104230,104247,104272,104284,104304,104310,104355,104374,104391,104404,104420,104427,104439,104448,104483,104504,104529,104542,104566,104581,104606,104609,104630,104639,104642,104653,104657,104660,104666,104678,104685,104689,104692,104704,104707,104721,104724,104734,104744,104747,104787,104790,104794,104800,104803,104817,104821,104824,104857,104861,104864,104887,104895,104898,104904,104910,104913,104916,104944,104948,104951,104957,104960],[10,102983,102979],{"id":102984},"_1环境安装与第一个-mujoco-程序",[14,102986,102988],{"id":102987},"_1目标说明","1.目标说明",[19,102990,102991],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102993,102994],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,102996,102999],{"className":102997,"code":102998,"language":7570,"meta":31},[7568],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,103000,102998],{"__ignoreMap":31},[19,103002,103003],{},"需要掌握:",[650,103005,103006,103009,103012,103017,103022],{},[653,103007,103008],{},"Fedora 44 下 MuJoCo 的系统依赖",[653,103010,103011],{},"Python 虚拟环境创建",[653,103013,103014],{},[33,103015,103016],{},"mujoco.MjModel",[653,103018,103019],{},[33,103020,103021],{},"mujoco.MjData",[653,103023,103024],{},[33,103025,103026],{},"mujoco.mj_step(model, data)",[19,103028,103029],{},"MuJoCo 中最重要的两个对象:",[2698,103031,103032,103042],{},[2701,103033,103034],{},[2704,103035,103036,103039],{},[2707,103037,103038],{"align":26106},"对象",[2707,103040,103041],{"align":26106},"含义",[2744,103043,103044,103054],{},[2704,103045,103046,103051],{},[2749,103047,103048],{"align":26106},[33,103049,103050],{},"MjModel",[2749,103052,103053],{"align":26106},"模型结构，来自 XML，基本不随时间变化",[2704,103055,103056,103061],{},[2749,103057,103058],{"align":26106},[33,103059,103060],{},"MjData",[2749,103062,103063],{"align":26106},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,103065,103066],{},"可以先用一个类比理解：",[2698,103068,103069,103079],{},[2701,103070,103071],{},[2704,103072,103073,103076],{},[2707,103074,103075],{"align":26106},"类比",[2707,103077,103078],{"align":26106},"MuJoCo 对象",[2744,103080,103081,103090,103099],{},[2704,103082,103083,103086],{},[2749,103084,103085],{"align":26106},"游戏地图和角色配置",[2749,103087,103088],{"align":26106},[33,103089,103050],{},[2704,103091,103092,103095],{},[2749,103093,103094],{"align":26106},"游戏运行到当前帧的状态",[2749,103096,103097],{"align":26106},[33,103098,103060],{},[2704,103100,103101,103104],{},[2749,103102,103103],{"align":26106},"前进一帧",[2749,103105,103106],{"align":26106},[33,103107,103026],{},[14,103109,103111],{"id":103110},"_2环境与依赖安装","2.环境与依赖安装",[19,103113,103114],{},"Fedora 44 系统依赖:",[26,103116,103118],{"className":26192,"code":103117,"language":26194,"meta":31,"style":31},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[33,103119,103120,103132,103145,103158,103168,103178,103197],{"__ignoreMap":31},[36,103121,103122,103124,103126,103128,103130],{"class":38,"line":39},[36,103123,26947],{"class":79},[36,103125,28685],{"class":50},[36,103127,26204],{"class":50},[36,103129,28770],{"class":62},[36,103131,27049],{"class":62},[36,103133,103134,103137,103140,103143],{"class":38,"line":54},[36,103135,103136],{"class":50},"  python3",[36,103138,103139],{"class":50}," python3-pip",[36,103141,103142],{"class":50}," python3-virtualenv",[36,103144,27049],{"class":62},[36,103146,103147,103150,103153,103156],{"class":38,"line":66},[36,103148,103149],{"class":50},"  mesa-libGL",[36,103151,103152],{"class":50}," mesa-libGLU",[36,103154,103155],{"class":50}," mesa-dri-drivers",[36,103157,27049],{"class":62},[36,103159,103160,103163,103166],{"class":38,"line":73},[36,103161,103162],{"class":50},"  libglvnd-glx",[36,103164,103165],{"class":50}," libglvnd-opengl",[36,103167,27049],{"class":62},[36,103169,103170,103173,103176],{"class":38,"line":86},[36,103171,103172],{"class":50},"  glfw",[36,103174,103175],{"class":50}," glfw-devel",[36,103177,27049],{"class":62},[36,103179,103180,103183,103186,103189,103192,103195],{"class":38,"line":126},[36,103181,103182],{"class":50},"  libX11",[36,103184,103185],{"class":50}," libXcursor",[36,103187,103188],{"class":50}," libXi",[36,103190,103191],{"class":50}," libXinerama",[36,103193,103194],{"class":50}," libXrandr",[36,103196,27049],{"class":62},[36,103198,103199,103202,103205],{"class":38,"line":131},[36,103200,103201],{"class":50},"  gcc",[36,103203,103204],{"class":50}," gcc-c++",[36,103206,103207],{"class":50}," make\n",[19,103209,103210],{},"创建 Python 环境:",[26,103212,103214],{"className":26192,"code":103213,"language":26194,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,103215,103216,103230,103238],{"__ignoreMap":31},[36,103217,103218,103221,103224,103227],{"class":38,"line":39},[36,103219,103220],{"class":79},"python3",[36,103222,103223],{"class":62}," -m",[36,103225,103226],{"class":50}," venv",[36,103228,103229],{"class":50}," .venv\n",[36,103231,103232,103235],{"class":38,"line":54},[36,103233,103234],{"class":62},"source",[36,103236,103237],{"class":50}," .venv\u002Fbin\u002Factivate\n",[36,103239,103240,103242,103244,103247,103249,103252],{"class":38,"line":66},[36,103241,30],{"class":79},[36,103243,103223],{"class":62},[36,103245,103246],{"class":50}," pip",[36,103248,26204],{"class":50},[36,103250,103251],{"class":62}," --upgrade",[36,103253,103254],{"class":50}," pip\n",[19,103256,103257],{},"pip 安装:",[26,103259,103261],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,103262,103263],{"__ignoreMap":31},[36,103264,103265,103267,103269,103272],{"class":38,"line":39},[36,103266,26201],{"class":79},[36,103268,26204],{"class":50},[36,103270,103271],{"class":50}," \"mujoco>=2.3\"",[36,103273,103274],{"class":50}," numpy\n",[19,103276,103277],{},"安装完成后，先做最小检查：",[26,103279,103281],{"className":26192,"code":103280,"language":26194,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,103282,103283],{"__ignoreMap":31},[36,103284,103285,103287,103289],{"class":38,"line":39},[36,103286,30],{"class":79},[36,103288,32727],{"class":62},[36,103290,103291],{"class":50}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103293,103294],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103296,103297],{},"conda 安装:",[26,103299,103301],{"className":26192,"code":103300,"language":26194,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,103302,103303,103323,103333],{"__ignoreMap":31},[36,103304,103305,103307,103309,103311,103314,103317,103320],{"class":38,"line":39},[36,103306,32699],{"class":79},[36,103308,31545],{"class":50},[36,103310,27486],{"class":62},[36,103312,103313],{"class":50}," mujoco-study",[36,103315,103316],{"class":50}," python=",[36,103318,103319],{"class":62},"3.10",[36,103321,103322],{"class":62}," -y\n",[36,103324,103325,103327,103330],{"class":38,"line":54},[36,103326,32699],{"class":79},[36,103328,103329],{"class":50}," activate",[36,103331,103332],{"class":50}," mujoco-study\n",[36,103334,103335,103337,103339,103341],{"class":38,"line":66},[36,103336,26201],{"class":79},[36,103338,26204],{"class":50},[36,103340,103271],{"class":50},[36,103342,103274],{"class":50},[19,103344,103345],{},"版本冲突说明:",[650,103347,103348,103354,103363,103372],{},[653,103349,103350,103351,676],{},"不要安装 ",[33,103352,103353],{},"mujoco-py",[653,103355,103356,103357,302,103359,103362],{},"如果旧项目里同时安装了 ",[33,103358,103353],{},[33,103360,103361],{},"mujoco","，建议新建干净虚拟环境。",[653,103364,103365,103368,103369,676],{},[33,103366,103367],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,103370,103371],{},"~\u002F.mujoco\u002Fmujoco210",[653,103373,103374,103375,84881,103378,103381],{},"离屏渲染可能涉及 OpenGL 后端，",[33,103376,103377],{},"MUJOCO_GL=egl",[33,103379,103380],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103383,103385],{"id":103384},"_3核心概念解释","3.核心概念解释",[19,103387,103388],{},"MuJoCo 的基本执行流程:",[26,103390,103393],{"className":103391,"code":103392,"language":7570,"meta":31},[7568],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,103394,103392],{"__ignoreMap":31},[19,103396,103397,103399],{},[33,103398,103050],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103401,103402,103404,103405,2031,103408,2031,103411,2031,103414,2031,103417,676],{},[33,103403,103060],{}," 存放仿真运行时状态，例如 ",[33,103406,103407],{},"data.time",[33,103409,103410],{},"data.qpos",[33,103412,103413],{},"data.qvel",[33,103415,103416],{},"data.ctrl",[33,103418,103419],{},"data.xpos",[1752,103421,103423],{"id":103422},"xml-是什么","XML 是什么",[19,103425,103426],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,103428,103430],{"className":55415,"code":103429,"language":55417,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[33,103431,103432,103454,103485],{"__ignoreMap":31},[36,103433,103434,103436,103438,103440,103442,103444,103447,103449,103452],{"class":38,"line":39},[36,103435,3463],{"class":42},[36,103437,54148],{"class":53649},[36,103439,17295],{"class":79},[36,103441,47],{"class":42},[36,103443,55839],{"class":50},[36,103445,103446],{"class":79}," pos",[36,103448,47],{"class":42},[36,103450,103451],{"class":50},"\"0 0 1\"",[36,103453,53656],{"class":42},[36,103455,103456,103458,103461,103463,103465,103468,103470,103472,103474,103477,103479,103482],{"class":38,"line":54},[36,103457,54492],{"class":42},[36,103459,103460],{"class":53649},"geom",[36,103462,17295],{"class":79},[36,103464,47],{"class":42},[36,103466,103467],{"class":50},"\"box_geom\"",[36,103469,56172],{"class":79},[36,103471,47],{"class":42},[36,103473,55839],{"class":50},[36,103475,103476],{"class":79}," size",[36,103478,47],{"class":42},[36,103480,103481],{"class":50},"\"0.1 0.1 0.1\"",[36,103483,103484],{"class":42},"\u002F>\n",[36,103486,103487,103489,103491],{"class":38,"line":66},[36,103488,54133],{"class":42},[36,103490,54148],{"class":53649},[36,103492,53656],{"class":42},[19,103494,103495],{},"这段意思是：",[650,103497,103498,103504,103511],{},[653,103499,103500,103501,103503],{},"创建一个叫 ",[33,103502,56062],{}," 的刚体。",[653,103505,103506,103507,103510],{},"它初始放在 ",[33,103508,103509],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[653,103512,103513],{},"它里面有一个盒子形状的几何体。",[1752,103515,103517],{"id":103516},"timestep-是什么","timestep 是什么",[19,103519,103520],{},"XML 里的：",[26,103522,103524],{"className":55415,"code":103523,"language":55417,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,103525,103526],{"__ignoreMap":31},[36,103527,103528,103530,103532,103535,103537,103540,103543,103545,103548],{"class":38,"line":39},[36,103529,3463],{"class":42},[36,103531,71512],{"class":53649},[36,103533,103534],{"class":79}," timestep",[36,103536,47],{"class":42},[36,103538,103539],{"class":50},"\"0.01\"",[36,103541,103542],{"class":79}," gravity",[36,103544,47],{"class":42},[36,103546,103547],{"class":50},"\"0 0 -9.81\"",[36,103549,103484],{"class":42},[19,103551,103552,103553,103556,103557,103559],{},"表示每调用一次 ",[33,103554,103555],{},"mj_step","，仿真时间前进 ",[33,103558,41335],{}," 秒。循环 100 次，大约就是 1 秒：",[26,103561,103564],{"className":103562,"code":103563,"language":7570,"meta":31},[7568],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,103565,103563],{"__ignoreMap":31},[1752,103567,103569],{"id":103568},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103571,103572],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,103574,103577],{"className":103575,"code":103576,"language":7570,"meta":31},[7568],"x y z qw qx qy qz\n",[33,103578,103576],{"__ignoreMap":31},[19,103580,103581,103582,103585,103586,103589],{},"表示一个自由刚体的位置和姿态。其中 ",[33,103583,103584],{},"x y z"," 是位置，",[33,103587,103588],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103591,103593],{"id":103592},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103595,103596],{},"新建文件:",[26,103598,103600],{"className":26192,"code":103599,"language":26194,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,103601,103602,103612,103619],{"__ignoreMap":31},[36,103603,103604,103607,103609],{"class":38,"line":39},[36,103605,103606],{"class":79},"mkdir",[36,103608,31585],{"class":62},[36,103610,103611],{"class":50}," mujoco_tutorial\n",[36,103613,103614,103617],{"class":38,"line":54},[36,103615,103616],{"class":62},"cd",[36,103618,103611],{"class":50},[36,103620,103621,103624],{"class":38,"line":66},[36,103622,103623],{"class":79},"touch",[36,103625,103626],{"class":50}," ch1_first_sim.py\n",[19,103628,103629],{},"写入:",[26,103631,103633],{"className":28,"code":103632,"language":30,"meta":31,"style":31},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,103634,103635,103642,103646,103650,103660,103665,103670,103674,103679,103684,103688,103693,103698,103703,103708,103713,103718,103722,103726,103730,103743,103757,103767,103771,103783,103795,103807,103819,103831,103835,103852,103857,103861,103872,103883,103887,103891,103905],{"__ignoreMap":31},[36,103636,103637,103639],{"class":38,"line":39},[36,103638,1943],{"class":46},[36,103640,103641],{"class":42}," mujoco\n",[36,103643,103644],{"class":38,"line":54},[36,103645,70],{"emptyLinePlaceholder":69},[36,103647,103648],{"class":38,"line":66},[36,103649,70],{"emptyLinePlaceholder":69},[36,103651,103652,103655,103657],{"class":38,"line":73},[36,103653,103654],{"class":62},"XML",[36,103656,15941],{"class":46},[36,103658,103659],{"class":50}," \"\"\"\n",[36,103661,103662],{"class":38,"line":86},[36,103663,103664],{"class":50},"\u003Cmujoco model=\"first_sim\">\n",[36,103666,103667],{"class":38,"line":126},[36,103668,103669],{"class":50},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,103671,103672],{"class":38,"line":131},[36,103673,70],{"emptyLinePlaceholder":69},[36,103675,103676],{"class":38,"line":225},[36,103677,103678],{"class":50},"  \u003Cworldbody>\n",[36,103680,103681],{"class":38,"line":235},[36,103682,103683],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,103685,103686],{"class":38,"line":377},[36,103687,70],{"emptyLinePlaceholder":69},[36,103689,103690],{"class":38,"line":617},[36,103691,103692],{"class":50},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,103694,103695],{"class":38,"line":643},[36,103696,103697],{"class":50},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,103699,103700],{"class":38,"line":921},[36,103701,103702],{"class":50},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,103704,103705],{"class":38,"line":934},[36,103706,103707],{"class":50},"    \u003C\u002Fbody>\n",[36,103709,103710],{"class":38,"line":939},[36,103711,103712],{"class":50},"  \u003C\u002Fworldbody>\n",[36,103714,103715],{"class":38,"line":949},[36,103716,103717],{"class":50},"\u003C\u002Fmujoco>\n",[36,103719,103720],{"class":38,"line":962},[36,103721,98039],{"class":50},[36,103723,103724],{"class":38,"line":974},[36,103725,70],{"emptyLinePlaceholder":69},[36,103727,103728],{"class":38,"line":979},[36,103729,70],{"emptyLinePlaceholder":69},[36,103731,103732,103734,103736,103739,103741],{"class":38,"line":994},[36,103733,76],{"class":46},[36,103735,4366],{"class":79},[36,103737,103738],{"class":42},"() -> ",[36,103740,98027],{"class":62},[36,103742,153],{"class":42},[36,103744,103745,103748,103750,103753,103755],{"class":38,"line":1006},[36,103746,103747],{"class":42},"    model ",[36,103749,47],{"class":46},[36,103751,103752],{"class":42}," mujoco.MjModel.from_xml_string(",[36,103754,103654],{"class":62},[36,103756,123],{"class":42},[36,103758,103759,103762,103764],{"class":38,"line":1011},[36,103760,103761],{"class":42},"    data ",[36,103763,47],{"class":46},[36,103765,103766],{"class":42}," mujoco.MjData(model)\n",[36,103768,103769],{"class":38,"line":1023},[36,103770,70],{"emptyLinePlaceholder":69},[36,103772,103773,103775,103777,103780],{"class":38,"line":1028},[36,103774,89],{"class":62},[36,103776,92],{"class":42},[36,103778,103779],{"class":50},"\"nq:\"",[36,103781,103782],{"class":42},", model.nq)\n",[36,103784,103785,103787,103789,103792],{"class":38,"line":1033},[36,103786,89],{"class":62},[36,103788,92],{"class":42},[36,103790,103791],{"class":50},"\"nv:\"",[36,103793,103794],{"class":42},", model.nv)\n",[36,103796,103797,103799,103801,103804],{"class":38,"line":1053},[36,103798,89],{"class":62},[36,103800,92],{"class":42},[36,103802,103803],{"class":50},"\"nu:\"",[36,103805,103806],{"class":42},", model.nu)\n",[36,103808,103809,103811,103813,103816],{"class":38,"line":1064},[36,103810,89],{"class":62},[36,103812,92],{"class":42},[36,103814,103815],{"class":50},"\"initial time:\"",[36,103817,103818],{"class":42},", data.time)\n",[36,103820,103821,103823,103825,103828],{"class":38,"line":1075},[36,103822,89],{"class":62},[36,103824,92],{"class":42},[36,103826,103827],{"class":50},"\"initial qpos:\"",[36,103829,103830],{"class":42},", data.qpos.copy())\n",[36,103832,103833],{"class":38,"line":2291},[36,103834,70],{"emptyLinePlaceholder":69},[36,103836,103837,103839,103842,103844,103846,103848,103850],{"class":38,"line":2329},[36,103838,5586],{"class":46},[36,103840,103841],{"class":42}," _ ",[36,103843,28413],{"class":46},[36,103845,34796],{"class":62},[36,103847,92],{"class":42},[36,103849,1070],{"class":62},[36,103851,1147],{"class":42},[36,103853,103854],{"class":38,"line":2334},[36,103855,103856],{"class":42},"        mujoco.mj_step(model, data)\n",[36,103858,103859],{"class":38,"line":2339},[36,103860,70],{"emptyLinePlaceholder":69},[36,103862,103863,103865,103867,103870],{"class":38,"line":2365},[36,103864,89],{"class":62},[36,103866,92],{"class":42},[36,103868,103869],{"class":50},"\"final time:\"",[36,103871,103818],{"class":42},[36,103873,103874,103876,103878,103881],{"class":38,"line":2373},[36,103875,89],{"class":62},[36,103877,92],{"class":42},[36,103879,103880],{"class":50},"\"final qpos:\"",[36,103882,103830],{"class":42},[36,103884,103885],{"class":38,"line":5001},[36,103886,70],{"emptyLinePlaceholder":69},[36,103888,103889],{"class":38,"line":5006},[36,103890,70],{"emptyLinePlaceholder":69},[36,103892,103893,103895,103897,103900,103903],{"class":38,"line":10328},[36,103894,3948],{"class":46},[36,103896,33575],{"class":62},[36,103898,103899],{"class":46}," ==",[36,103901,103902],{"class":50}," \"__main__\"",[36,103904,153],{"class":42},[36,103906,103907],{"class":38,"line":10352},[36,103908,103909],{"class":42},"    main()\n",[1752,103911,103912],{"id":103912},"代码逐段解释",[19,103914,103915],{},"导入库：",[26,103917,103919],{"className":28,"code":103918,"language":30,"meta":31,"style":31},"import mujoco\n",[33,103920,103921],{"__ignoreMap":31},[36,103922,103923,103925],{"class":38,"line":39},[36,103924,1943],{"class":46},[36,103926,103641],{"class":42},[19,103928,103929],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103931,103932],{},"定义 XML：",[26,103934,103936],{"className":28,"code":103935,"language":30,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,103937,103938,103946,103951],{"__ignoreMap":31},[36,103939,103940,103942,103944],{"class":38,"line":39},[36,103941,103654],{"class":62},[36,103943,15941],{"class":46},[36,103945,103659],{"class":50},[36,103947,103948],{"class":38,"line":54},[36,103949,103950],{"class":50},"...\n",[36,103952,103953],{"class":38,"line":66},[36,103954,98039],{"class":50},[19,103956,103957,103958,103961],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,103959,103960],{},"freejoint"," 的方块。",[19,103963,103964],{},"编译模型：",[26,103966,103968],{"className":28,"code":103967,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,103969,103970],{"__ignoreMap":31},[36,103971,103972,103975,103977,103979,103981],{"class":38,"line":39},[36,103973,103974],{"class":42},"model ",[36,103976,47],{"class":46},[36,103978,103752],{"class":42},[36,103980,103654],{"class":62},[36,103982,123],{"class":42},[19,103984,103985],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103987,103988],{},"创建数据：",[26,103990,103992],{"className":28,"code":103991,"language":30,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,103993,103994],{"__ignoreMap":31},[36,103995,103996,103999,104001],{"class":38,"line":39},[36,103997,103998],{"class":42},"data ",[36,104000,47],{"class":46},[36,104002,103766],{"class":42},[19,104004,104005,104007,104008,104010],{},[33,104006,35753],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,104009,2751],{},"，方块还在初始位置。",[19,104012,104013],{},"推进仿真：",[26,104015,104017],{"className":28,"code":104016,"language":30,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,104018,104019,104035],{"__ignoreMap":31},[36,104020,104021,104023,104025,104027,104029,104031,104033],{"class":38,"line":39},[36,104022,5410],{"class":46},[36,104024,103841],{"class":42},[36,104026,28413],{"class":46},[36,104028,34796],{"class":62},[36,104030,92],{"class":42},[36,104032,1070],{"class":62},[36,104034,1147],{"class":42},[36,104036,104037],{"class":38,"line":54},[36,104038,104039],{"class":42},"    mujoco.mj_step(model, data)\n",[19,104041,104042,104043,104045],{},"每次 ",[33,104044,103555],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1752,104047,104048],{"id":104048},"代码逐行细讲",[19,104050,104051],{},"下面把完整代码按新手视角拆开讲。",[26,104053,104054],{"className":28,"code":103918,"language":30,"meta":31,"style":31},[33,104055,104056],{"__ignoreMap":31},[36,104057,104058,104060],{"class":38,"line":39},[36,104059,1943],{"class":46},[36,104061,103641],{"class":42},[19,104063,104064,104066,104067,2031,104069,2031,104071,676],{},[33,104065,1943],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,104068,103016],{},[33,104070,103021],{},[33,104072,104073],{},"mujoco.mj_step",[26,104075,104076],{"className":28,"code":103935,"language":30,"meta":31,"style":31},[33,104077,104078,104086,104090],{"__ignoreMap":31},[36,104079,104080,104082,104084],{"class":38,"line":39},[36,104081,103654],{"class":62},[36,104083,15941],{"class":46},[36,104085,103659],{"class":50},[36,104087,104088],{"class":38,"line":54},[36,104089,103950],{"class":50},[36,104091,104092],{"class":38,"line":66},[36,104093,98039],{"class":50},[19,104095,104096,104098,104099,104102],{},[33,104097,103654],{}," 是一个变量名。右边的三引号 ",[33,104100,104101],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,104104,104105],{"className":55415,"code":103664,"language":55417,"meta":31,"style":31},[33,104106,104107],{"__ignoreMap":31},[36,104108,104109,104111,104113,104116,104118,104121],{"class":38,"line":39},[36,104110,3463],{"class":42},[36,104112,103361],{"class":53649},[36,104114,104115],{"class":79}," model",[36,104117,47],{"class":42},[36,104119,104120],{"class":50},"\"first_sim\"",[36,104122,53656],{"class":42},[19,104124,104125,104126,104129,104130,676],{},"这是 XML 的根标签。",[33,104127,104128],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,104131,104132],{},"first_sim",[26,104134,104135],{"className":55415,"code":103523,"language":55417,"meta":31,"style":31},[33,104136,104137],{"__ignoreMap":31},[36,104138,104139,104141,104143,104145,104147,104149,104151,104153,104155],{"class":38,"line":39},[36,104140,3463],{"class":42},[36,104142,71512],{"class":53649},[36,104144,103534],{"class":79},[36,104146,47],{"class":42},[36,104148,103539],{"class":50},[36,104150,103542],{"class":79},[36,104152,47],{"class":42},[36,104154,103547],{"class":50},[36,104156,103484],{"class":42},[19,104158,104159,104161,104162,104165,104166,104169],{},[33,104160,71512],{}," 用来设置仿真参数。",[33,104163,104164],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,104167,104168],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,104171,104173],{"className":55415,"code":104172,"language":55417,"meta":31,"style":31},"\u003Cworldbody>\n",[33,104174,104175],{"__ignoreMap":31},[36,104176,104177,104179,104182],{"class":38,"line":39},[36,104178,3463],{"class":42},[36,104180,104181],{"class":53649},"worldbody",[36,104183,53656],{"class":42},[19,104185,104186,104188],{},[33,104187,104181],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,104190,104192],{"className":55415,"code":104191,"language":55417,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,104193,104194],{"__ignoreMap":31},[36,104195,104196,104198,104200,104202,104204,104207,104209,104211,104214,104216,104218,104221,104223,104225,104228],{"class":38,"line":39},[36,104197,3463],{"class":42},[36,104199,103460],{"class":53649},[36,104201,17295],{"class":79},[36,104203,47],{"class":42},[36,104205,104206],{"class":50},"\"floor\"",[36,104208,56172],{"class":79},[36,104210,47],{"class":42},[36,104212,104213],{"class":50},"\"plane\"",[36,104215,103476],{"class":79},[36,104217,47],{"class":42},[36,104219,104220],{"class":50},"\"2 2 0.1\"",[36,104222,81112],{"class":79},[36,104224,47],{"class":42},[36,104226,104227],{"class":50},"\"0.8 0.8 0.8 1\"",[36,104229,103484],{"class":42},[19,104231,104232,104233,104235,104236,104239,104240,104243,104244,104246],{},"这行创建地面。",[33,104234,103460],{}," 是几何体。",[33,104237,104238],{},"name=\"floor\""," 是名字。",[33,104241,104242],{},"type=\"plane\""," 表示平面。",[33,104245,57458],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,104248,104250],{"className":55415,"code":104249,"language":55417,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,104251,104252],{"__ignoreMap":31},[36,104253,104254,104256,104258,104260,104262,104264,104266,104268,104270],{"class":38,"line":39},[36,104255,3463],{"class":42},[36,104257,54148],{"class":53649},[36,104259,17295],{"class":79},[36,104261,47],{"class":42},[36,104263,55839],{"class":50},[36,104265,103446],{"class":79},[36,104267,47],{"class":42},[36,104269,103451],{"class":50},[36,104271,53656],{"class":42},[19,104273,104274,104275,676,104277,104280,104281,104283],{},"这行创建一个刚体，名字叫 ",[33,104276,56062],{},[33,104278,104279],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,104282,103509],{},"，也就是离地面 1 米高。",[26,104285,104287],{"className":55415,"code":104286,"language":55417,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,104288,104289],{"__ignoreMap":31},[36,104290,104291,104293,104295,104297,104299,104302],{"class":38,"line":39},[36,104292,3463],{"class":42},[36,104294,103960],{"class":53649},[36,104296,17295],{"class":79},[36,104298,47],{"class":42},[36,104300,104301],{"class":50},"\"box_free\"",[36,104303,103484],{"class":42},[19,104305,104306,104307,104309],{},"这行很重要。",[33,104308,103960],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,104311,104313],{"className":55415,"code":104312,"language":55417,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,104314,104315],{"__ignoreMap":31},[36,104316,104317,104319,104321,104323,104325,104327,104329,104331,104333,104335,104337,104339,104342,104344,104346,104348,104350,104353],{"class":38,"line":39},[36,104318,3463],{"class":42},[36,104320,103460],{"class":53649},[36,104322,17295],{"class":79},[36,104324,47],{"class":42},[36,104326,103467],{"class":50},[36,104328,56172],{"class":79},[36,104330,47],{"class":42},[36,104332,55839],{"class":50},[36,104334,103476],{"class":79},[36,104336,47],{"class":42},[36,104338,103481],{"class":50},[36,104340,104341],{"class":79}," mass",[36,104343,47],{"class":42},[36,104345,6063],{"class":50},[36,104347,81112],{"class":79},[36,104349,47],{"class":42},[36,104351,104352],{"class":50},"\"1 0 0 1\"",[36,104354,103484],{"class":42},[19,104356,104357,104358,104361,104362,104365,104366,104369,104370,104373],{},"这行给 box body 添加一个盒子形状。",[33,104359,104360],{},"type=\"box\""," 表示形状是盒子。",[33,104363,104364],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,104367,104368],{},"mass=\"1\""," 表示质量是 1。",[33,104371,104372],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,104375,104377],{"className":28,"code":104376,"language":30,"meta":31,"style":31},"def main() -> None:\n",[33,104378,104379],{"__ignoreMap":31},[36,104380,104381,104383,104385,104387,104389],{"class":38,"line":39},[36,104382,76],{"class":46},[36,104384,4366],{"class":79},[36,104386,103738],{"class":42},[36,104388,98027],{"class":62},[36,104390,153],{"class":42},[19,104392,104393,104395,104396,104399,104400,104403],{},[33,104394,76],{}," 用来定义函数。这里定义了一个叫 ",[33,104397,104398],{},"main"," 的函数。",[33,104401,104402],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,104405,104406],{"className":28,"code":103967,"language":30,"meta":31,"style":31},[33,104407,104408],{"__ignoreMap":31},[36,104409,104410,104412,104414,104416,104418],{"class":38,"line":39},[36,104411,103974],{"class":42},[36,104413,47],{"class":46},[36,104415,103752],{"class":42},[36,104417,103654],{"class":62},[36,104419,123],{"class":42},[19,104421,104422,104423,104426],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,104424,104425],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,104428,104429],{"className":28,"code":103991,"language":30,"meta":31,"style":31},[33,104430,104431],{"__ignoreMap":31},[36,104432,104433,104435,104437],{"class":38,"line":39},[36,104434,103998],{"class":42},[36,104436,47],{"class":46},[36,104438,103766],{"class":42},[19,104440,104441,104442,104444,104445,104447],{},"这行创建仿真数据。",[33,104443,35753],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,104446,35753],{}," 都会变化。",[26,104449,104451],{"className":28,"code":104450,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,104452,104453,104463,104473],{"__ignoreMap":31},[36,104454,104455,104457,104459,104461],{"class":38,"line":39},[36,104456,371],{"class":62},[36,104458,92],{"class":42},[36,104460,103779],{"class":50},[36,104462,103782],{"class":42},[36,104464,104465,104467,104469,104471],{"class":38,"line":54},[36,104466,371],{"class":62},[36,104468,92],{"class":42},[36,104470,103791],{"class":50},[36,104472,103794],{"class":42},[36,104474,104475,104477,104479,104481],{"class":38,"line":66},[36,104476,371],{"class":62},[36,104478,92],{"class":42},[36,104480,103803],{"class":50},[36,104482,103806],{"class":42},[19,104484,104485,104487,104488,104491,104492,104495,104496,104499,104500,104503],{},[33,104486,371],{}," 用来输出信息。",[33,104489,104490],{},"model.nq"," 是位置变量数量，",[33,104493,104494],{},"model.nv"," 是速度变量数量，",[33,104497,104498],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,104501,104502],{},"nu"," 是 0。",[26,104505,104507],{"className":28,"code":104506,"language":30,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,104508,104509,104519],{"__ignoreMap":31},[36,104510,104511,104513,104515,104517],{"class":38,"line":39},[36,104512,371],{"class":62},[36,104514,92],{"class":42},[36,104516,103815],{"class":50},[36,104518,103818],{"class":42},[36,104520,104521,104523,104525,104527],{"class":38,"line":54},[36,104522,371],{"class":62},[36,104524,92],{"class":42},[36,104526,103827],{"class":50},[36,104528,103830],{"class":42},[19,104530,104531,104532,104534,104535,104537,104538,104541],{},"这里打印初始时间和初始位置。",[33,104533,103407],{}," 一开始是 0。",[33,104536,103410],{}," 是位置数组。",[33,104539,104540],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,104543,104544],{"className":28,"code":104016,"language":30,"meta":31,"style":31},[33,104545,104546,104562],{"__ignoreMap":31},[36,104547,104548,104550,104552,104554,104556,104558,104560],{"class":38,"line":39},[36,104549,5410],{"class":46},[36,104551,103841],{"class":42},[36,104553,28413],{"class":46},[36,104555,34796],{"class":62},[36,104557,92],{"class":42},[36,104559,1070],{"class":62},[36,104561,1147],{"class":42},[36,104563,104564],{"class":38,"line":54},[36,104565,104039],{"class":42},[19,104567,104568,104570,104571,104574,104575,104577,104578,104580],{},[33,104569,5410],{}," 是循环。",[33,104572,104573],{},"range(100)"," 表示循环 100 次。",[33,104576,3542],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,104579,103555],{},"，仿真就前进一步。",[26,104582,104584],{"className":28,"code":104583,"language":30,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,104585,104586,104596],{"__ignoreMap":31},[36,104587,104588,104590,104592,104594],{"class":38,"line":39},[36,104589,371],{"class":62},[36,104591,92],{"class":42},[36,104593,103869],{"class":50},[36,104595,103818],{"class":42},[36,104597,104598,104600,104602,104604],{"class":38,"line":54},[36,104599,371],{"class":62},[36,104601,92],{"class":42},[36,104603,103880],{"class":50},[36,104605,103830],{"class":42},[19,104607,104608],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,104610,104612],{"className":28,"code":104611,"language":30,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,104613,104614,104626],{"__ignoreMap":31},[36,104615,104616,104618,104620,104622,104624],{"class":38,"line":39},[36,104617,3948],{"class":46},[36,104619,33575],{"class":62},[36,104621,103899],{"class":46},[36,104623,103902],{"class":50},[36,104625,153],{"class":42},[36,104627,104628],{"class":38,"line":54},[36,104629,103909],{"class":42},[19,104631,104632,104633,104636,104637,676],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,104634,104635],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,104638,104635],{},[19,104640,104641],{},"运行:",[26,104643,104645],{"className":26192,"code":104644,"language":26194,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,104646,104647],{"__ignoreMap":31},[36,104648,104649,104651],{"class":38,"line":39},[36,104650,30],{"class":79},[36,104652,103626],{"class":50},[14,104654,104656],{"id":104655},"_5运行结果说明","5.运行结果说明",[19,104658,104659],{},"你应该看到类似输出:",[26,104661,104664],{"className":104662,"code":104663,"language":7570,"meta":31},[7568],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,104665,104663],{"__ignoreMap":31},[19,104667,104668,104670,104671,104674,104675,676],{},[33,104669,103960],{}," 有 7 个位置变量: ",[33,104672,104673],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,104676,104677],{},"vx vy vz wx wy wz",[19,104679,104680,104681,104684],{},"你还会看到 ",[33,104682,104683],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104686,104688],{"id":104687},"_6验证步骤","6.验证步骤",[19,104690,104691],{},"确认版本:",[26,104693,104694],{"className":26192,"code":103280,"language":26194,"meta":31,"style":31},[33,104695,104696],{"__ignoreMap":31},[36,104697,104698,104700,104702],{"class":38,"line":39},[36,104699,30],{"class":79},[36,104701,32727],{"class":62},[36,104703,103291],{"class":50},[19,104705,104706],{},"确认导入的是官方 bindings:",[26,104708,104710],{"className":26192,"code":104709,"language":26194,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,104711,104712],{"__ignoreMap":31},[36,104713,104714,104716,104718],{"class":38,"line":39},[36,104715,30],{"class":79},[36,104717,32727],{"class":62},[36,104719,104720],{"class":50}," \"import mujoco; print(mujoco)\"\n",[19,104722,104723],{},"运行程序:",[26,104725,104726],{"className":26192,"code":104644,"language":26194,"meta":31,"style":31},[33,104727,104728],{"__ignoreMap":31},[36,104729,104730,104732],{"class":38,"line":39},[36,104731,30],{"class":79},[36,104733,103626],{"class":50},[19,104735,104736,104737,104740,104741,676],{},"检查 ",[33,104738,104739],{},"final time"," 是否约等于 ",[33,104742,104743],{},"1.0",[19,104745,104746],{},"再做几个小实验：",[650,104748,104749,104759,104767,104780],{},[653,104750,104751,104752,104754,104755,104758],{},"把 ",[33,104753,104279],{}," 改成 ",[33,104756,104757],{},"pos=\"0 0 2\"","，观察初始高度变化。",[653,104760,104751,104761,104754,104763,104766],{},[33,104762,104168],{},[33,104764,104765],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[653,104768,104751,104769,104754,104771,104774,104775,104777,104778,676],{},[33,104770,104164],{},[33,104772,104773],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,104776,104739],{}," 是否变成约 ",[33,104779,37680],{},[653,104781,104782,104783,104786],{},"删除 ",[33,104784,104785],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104788,104789],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104791,104793],{"id":104792},"_7常见错误与解决方案","7.常见错误与解决方案",[1752,104795,104797],{"id":104796},"modulenotfounderror-no-module-named-mujoco",[33,104798,104799],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104801,104802],{},"解决:",[26,104804,104806],{"className":26192,"code":104805,"language":26194,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,104807,104808],{"__ignoreMap":31},[36,104809,104810,104812,104814],{"class":38,"line":39},[36,104811,26201],{"class":79},[36,104813,26204],{"class":50},[36,104815,104816],{"class":50}," \"mujoco>=2.3\"\n",[1752,104818,104820],{"id":104819},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104822,104823],{},"先安装系统依赖:",[26,104825,104827],{"className":26192,"code":104826,"language":26194,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,104828,104829],{"__ignoreMap":31},[36,104830,104831,104833,104835,104837,104839,104842,104844,104847,104849,104852,104854],{"class":38,"line":39},[36,104832,26947],{"class":79},[36,104834,28685],{"class":50},[36,104836,26204],{"class":50},[36,104838,28770],{"class":62},[36,104840,104841],{"class":50}," mesa-libGL",[36,104843,103155],{"class":50},[36,104845,104846],{"class":50}," glfw",[36,104848,103175],{"class":50},[36,104850,104851],{"class":50}," libX11",[36,104853,103188],{"class":50},[36,104855,104856],{"class":50}," libXrandr\n",[1752,104858,104860],{"id":104859},"xml-解析失败","XML 解析失败",[19,104862,104863],{},"检查:",[650,104865,104866,104869,104872,104878],{},[653,104867,104868],{},"标签是否闭合",[653,104870,104871],{},"属性是否带引号",[653,104873,104874,104875],{},"根节点是否是 ",[33,104876,104877],{},"\u003Cmujoco>",[653,104879,104880,104882,104883,104886],{},[33,104881,54148],{}," 是否放在 ",[33,104884,104885],{},"\u003Cworldbody>"," 内部",[1752,104888,104890,104892,104893],{"id":104889},"final-time-不是严格等于-10",[33,104891,104739],{}," 不是严格等于 ",[33,104894,104743],{},[19,104896,104897],{},"这通常不是错误。浮点数计算可能得到：",[26,104899,104902],{"className":104900,"code":104901,"language":7570,"meta":31},[7568],"1.0000000000000007\n",[33,104903,104901],{"__ignoreMap":31},[19,104905,104906,104907,104909],{},"只要接近 ",[33,104908,104743],{}," 就正常。",[1752,104911,104912],{"id":104912},"方块没有掉下来",[19,104914,104915],{},"检查：",[650,104917,104918,104924,104930,104935],{},[653,104919,104920,104921],{},"方块 body 里是否有 ",[33,104922,104923],{},"\u003Cfreejoint\u002F>",[653,104925,104926,104927],{},"重力是否是 ",[33,104928,104929],{},"0 0 -9.81",[653,104931,104932,104933],{},"是否真的调用了 ",[33,104934,103026],{},[653,104936,104937,104938,104940,104941],{},"你看的是否是 ",[33,104939,104683],{},"，不是 ",[33,104942,104943],{},"initial qpos",[14,104945,104947],{"id":104946},"_8本章小结","8.本章小结",[19,104949,104950],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,104952,104955],{"className":104953,"code":104954,"language":7570,"meta":31},[7568],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,104956,104954],{"__ignoreMap":31},[19,104958,104959],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2467,104961,104962],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":104964},[104965,104966,104967,104972,104976,104977,104978,104986],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":104968},[104969,104970,104971],{"id":103422,"depth":66,"text":103423},{"id":103516,"depth":66,"text":103517},{"id":103568,"depth":66,"text":103569},{"id":103592,"depth":54,"text":103593,"children":104973},[104974,104975],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":104979},[104980,104981,104982,104983,104985],{"id":104796,"depth":66,"text":104799},{"id":104819,"depth":66,"text":104820},{"id":104859,"depth":66,"text":104860},{"id":104889,"depth":66,"text":104984},"final time 不是严格等于 1.0",{"id":104912,"depth":66,"text":104912},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102979,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104993,"title":104994,"body":104995,"description":31,"extension":2494,"meta":106651,"navigation":69,"path":106652,"seo":106653,"stem":106654,"__hash__":106655},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104996,"toc":106627},[104997,105000,105002,105005,105008,105025,105120,105123,105129,105131,105133,105157,105160,105174,105177,105218,105220,105233,105235,105238,105286,105298,105301,105304,105310,105323,105390,105393,105412,105415,105418,105424,105426,105435,105438,105442,105451,105533,105542,105546,105552,105566,105576,105578,105908,105911,105923,105925,105936,105938,105941,105959,105962,105965,105983,105994,105997,106012,106022,106024,106045,106062,106082,106088,106128,106144,106160,106166,106169,106193,106209,106214,106244,106261,106286,106289,106304,106313,106328,106337,106352,106359,106361,106371,106384,106391,106394,106433,106440,106442,106494,106496,106502,106505,106512,106519,106522,106524,106542,106545,106548,106582,106594,106596,106599,106621,106624],[10,104998,104994],{"id":104999},"_2xml-与-mjcf-物理建模基础",[14,105001,102988],{"id":102987},[19,105003,105004],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105006,105007],{},"本章结束后，你应该能看懂一个简单模型里：",[650,105009,105010,105013,105016,105019,105022],{},[653,105011,105012],{},"地面在哪里。",[653,105014,105015],{},"物体初始位置在哪里。",[653,105017,105018],{},"几何体是什么形状。",[653,105020,105021],{},"哪些 body 可以自由运动。",[653,105023,105024],{},"如何用名字在 Python 里找到 XML 中的对象。",[2698,105026,105027,105037],{},[2701,105028,105029],{},[2704,105030,105031,105034],{},[2707,105032,105033],{"align":26106},"标签",[2707,105035,105036],{"align":26106},"作用",[2744,105038,105039,105048,105058,105067,105077,105087,105100,105110],{},[2704,105040,105041,105045],{},[2749,105042,105043],{"align":26106},[33,105044,104877],{},[2749,105046,105047],{"align":26106},"根节点",[2704,105049,105050,105055],{},[2749,105051,105052],{"align":26106},[33,105053,105054],{},"\u003Coption>",[2749,105056,105057],{"align":26106},"仿真参数",[2704,105059,105060,105064],{},[2749,105061,105062],{"align":26106},[33,105063,104885],{},[2749,105065,105066],{"align":26106},"世界中的物体",[2704,105068,105069,105074],{},[2749,105070,105071],{"align":26106},[33,105072,105073],{},"\u003Cbody>",[2749,105075,105076],{"align":26106},"刚体",[2704,105078,105079,105084],{},[2749,105080,105081],{"align":26106},[33,105082,105083],{},"\u003Cgeom>",[2749,105085,105086],{"align":26106},"几何体、碰撞体、可视体",[2704,105088,105089,105097],{},[2749,105090,105091,27349,105094],{"align":26106},[33,105092,105093],{},"\u003Cjoint>",[33,105095,105096],{},"\u003Cfreejoint>",[2749,105098,105099],{"align":26106},"关节",[2704,105101,105102,105107],{},[2749,105103,105104],{"align":26106},[33,105105,105106],{},"\u003Csite>",[2749,105108,105109],{"align":26106},"标记点",[2704,105111,105112,105117],{},[2749,105113,105114],{"align":26106},[33,105115,105116],{},"\u003Cactuator>",[2749,105118,105119],{"align":26106},"控制器",[19,105121,105122],{},"初学时可以先记住：",[26,105124,105127],{"className":105125,"code":105126,"language":7570,"meta":31},[7568],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,105128,105126],{"__ignoreMap":31},[14,105130,103111],{"id":103110},[19,105132,103114],{},[26,105134,105136],{"className":26192,"code":105135,"language":26194,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,105137,105138],{"__ignoreMap":31},[36,105139,105140,105142,105144,105146,105148,105150,105152,105154],{"class":38,"line":39},[36,105141,26947],{"class":79},[36,105143,28685],{"class":50},[36,105145,26204],{"class":50},[36,105147,28770],{"class":62},[36,105149,104841],{"class":50},[36,105151,103155],{"class":50},[36,105153,104846],{"class":50},[36,105155,105156],{"class":50}," glfw-devel\n",[19,105158,105159],{},"pip:",[26,105161,105162],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},[33,105163,105164],{"__ignoreMap":31},[36,105165,105166,105168,105170,105172],{"class":38,"line":39},[36,105167,26201],{"class":79},[36,105169,26204],{"class":50},[36,105171,103271],{"class":50},[36,105173,103274],{"class":50},[19,105175,105176],{},"conda:",[26,105178,105180],{"className":26192,"code":105179,"language":26194,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,105181,105182,105199,105208],{"__ignoreMap":31},[36,105183,105184,105186,105188,105190,105193,105195,105197],{"class":38,"line":39},[36,105185,32699],{"class":79},[36,105187,31545],{"class":50},[36,105189,27486],{"class":62},[36,105191,105192],{"class":50}," mujoco-xml",[36,105194,103316],{"class":50},[36,105196,103319],{"class":62},[36,105198,103322],{"class":62},[36,105200,105201,105203,105205],{"class":38,"line":54},[36,105202,32699],{"class":79},[36,105204,103329],{"class":50},[36,105206,105207],{"class":50}," mujoco-xml\n",[36,105209,105210,105212,105214,105216],{"class":38,"line":66},[36,105211,26201],{"class":79},[36,105213,26204],{"class":50},[36,105215,103271],{"class":50},[36,105217,103274],{"class":50},[19,105219,103345],{},[650,105221,105222,105225,105230],{},[653,105223,105224],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[653,105226,105227,105228,676],{},"本章使用基础标签，适用于 ",[33,105229,103367],{},[653,105231,105232],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105234,103385],{"id":103384},[19,105236,105237],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,105239,105241],{"className":55415,"code":105240,"language":55417,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,105242,105243,105257,105265,105270,105278],{"__ignoreMap":31},[36,105244,105245,105247,105249,105251,105253,105255],{"class":38,"line":39},[36,105246,3463],{"class":42},[36,105248,103361],{"class":53649},[36,105250,104115],{"class":79},[36,105252,47],{"class":42},[36,105254,2251],{"class":50},[36,105256,53656],{"class":42},[36,105258,105259,105261,105263],{"class":38,"line":54},[36,105260,54492],{"class":42},[36,105262,104181],{"class":53649},[36,105264,53656],{"class":42},[36,105266,105267],{"class":38,"line":66},[36,105268,105269],{"class":42},"    ...\n",[36,105271,105272,105274,105276],{"class":38,"line":73},[36,105273,54765],{"class":42},[36,105275,104181],{"class":53649},[36,105277,53656],{"class":42},[36,105279,105280,105282,105284],{"class":38,"line":86},[36,105281,54133],{"class":42},[36,105283,103361],{"class":53649},[36,105285,53656],{"class":42},[19,105287,105288,105290,105291,105293,105294,105297],{},[33,105289,54148],{}," 表示刚体。",[33,105292,103460],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,105295,105296],{},"joint"," 表示刚体相对父刚体如何运动。",[1752,105299,105300],{"id":105300},"层级结构非常重要",[19,105302,105303],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,105305,105308],{"className":105306,"code":105307,"language":7570,"meta":31},[7568],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,105309,105307],{"__ignoreMap":31},[19,105311,105312,302,105315,105318,105319,105322],{},[33,105313,105314],{},"red_box_geom",[33,105316,105317],{},"box_center"," 都属于 ",[33,105320,105321],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,105324,105326],{"className":55415,"code":105325,"language":55417,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[33,105327,105328,105348,105362,105382],{"__ignoreMap":31},[36,105329,105330,105332,105334,105336,105338,105340,105342,105344,105346],{"class":38,"line":39},[36,105331,3463],{"class":42},[36,105333,54148],{"class":53649},[36,105335,17295],{"class":79},[36,105337,47],{"class":42},[36,105339,55839],{"class":50},[36,105341,103446],{"class":79},[36,105343,47],{"class":42},[36,105345,103451],{"class":50},[36,105347,53656],{"class":42},[36,105349,105350,105352,105354,105356,105358,105360],{"class":38,"line":54},[36,105351,54492],{"class":42},[36,105353,103960],{"class":53649},[36,105355,17295],{"class":79},[36,105357,47],{"class":42},[36,105359,104301],{"class":50},[36,105361,103484],{"class":42},[36,105363,105364,105366,105368,105370,105372,105374,105376,105378,105380],{"class":38,"line":66},[36,105365,54492],{"class":42},[36,105367,103460],{"class":53649},[36,105369,56172],{"class":79},[36,105371,47],{"class":42},[36,105373,55839],{"class":50},[36,105375,103476],{"class":79},[36,105377,47],{"class":42},[36,105379,103481],{"class":50},[36,105381,103484],{"class":42},[36,105383,105384,105386,105388],{"class":38,"line":73},[36,105385,54133],{"class":42},[36,105387,54148],{"class":53649},[36,105389,53656],{"class":42},[19,105391,105392],{},"含义:",[650,105394,105395,105401,105406,105409],{},[653,105396,105397,105398,105400],{},"创建名为 ",[33,105399,56062],{}," 的刚体",[653,105402,105403,105404],{},"初始位置在世界坐标 ",[33,105405,103509],{},[653,105407,105408],{},"它有一个自由关节",[653,105410,105411],{},"它有一个盒子几何体",[1752,105413,105414],{"id":105414},"坐标怎么理解",[19,105416,105417],{},"MuJoCo 默认使用三维坐标：",[26,105419,105422],{"className":105420,"code":105421,"language":7570,"meta":31},[7568],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,105423,105421],{"__ignoreMap":31},[19,105425,17010],{},[26,105427,105429],{"className":55415,"code":105428,"language":55417,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,105430,105431],{"__ignoreMap":31},[36,105432,105433],{"class":38,"line":39},[36,105434,105428],{"class":42},[19,105436,105437],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1752,105439,105441],{"id":105440},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105443,105444,105445,84872,105448,105450],{},"不同 ",[33,105446,105447],{},"type",[33,105449,33850],{}," 含义不同：",[2698,105452,105453,105468],{},[2701,105454,105455],{},[2704,105456,105457,105461,105466],{},[2707,105458,105459],{"align":26106},[33,105460,105447],{},[2707,105462,105463,105465],{"align":26106},[33,105464,33850],{}," 示例",[2707,105467,103041],{"align":26106},[2744,105469,105470,105484,105499,105518],{},[2704,105471,105472,105476,105481],{},[2749,105473,105474],{"align":26106},[33,105475,56062],{},[2749,105477,105478],{"align":26106},[33,105479,105480],{},"size=\"0.1 0.2 0.3\"",[2749,105482,105483],{"align":26106},"x\u002Fy\u002Fz 半边长，不是完整长度",[2704,105485,105486,105491,105496],{},[2749,105487,105488],{"align":26106},[33,105489,105490],{},"sphere",[2749,105492,105493],{"align":26106},[33,105494,105495],{},"size=\"0.1\"",[2749,105497,105498],{"align":26106},"球半径",[2704,105500,105501,105506,105511],{},[2749,105502,105503],{"align":26106},[33,105504,105505],{},"capsule",[2749,105507,105508],{"align":26106},[33,105509,105510],{},"size=\"0.03\"",[2749,105512,105513,105514,105517],{"align":26106},"胶囊半径，长度常用 ",[33,105515,105516],{},"fromto"," 指定",[2704,105519,105520,105525,105530],{},[2749,105521,105522],{"align":26106},[33,105523,105524],{},"plane",[2749,105526,105527],{"align":26106},[33,105528,105529],{},"size=\"3 3 0.1\"",[2749,105531,105532],{"align":26106},"可视平面大小，通常当地面",[19,105534,105535,105536,105538,105539,105541],{},"最容易踩坑的是 box：",[33,105537,104364],{}," 表示边长大约是 ",[33,105540,34390],{},"，因为 MuJoCo 用的是半边长。",[1752,105543,105545],{"id":105544},"site-是什么","site 是什么",[19,105547,105548,105551],{},[33,105549,105550],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[650,105553,105554,105557,105560,105563],{},[653,105555,105556],{},"标记机械臂末端。",[653,105558,105559],{},"标记目标位置。",[653,105561,105562],{},"放传感器或相机参考点。",[653,105564,105565],{},"在 Python 中读取某个关键点的世界坐标。",[19,105567,105568,105569,302,105572,105575],{},"在后面的 Reacher 任务中，",[33,105570,105571],{},"tip",[33,105573,105574],{},"target"," 就会用 site 表示。",[14,105577,103593],{"id":103592},[26,105579,105581],{"className":28,"code":105580,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,105582,105583,105589,105599,105603,105607,105615,105620,105624,105628,105632,105637,105641,105646,105651,105656,105661,105665,105669,105673,105677,105681,105685,105697,105709,105717,105721,105736,105751,105755,105768,105783,105796,105809,105813,105829,105833,105837,105848,105860,105872,105884,105888,105892,105904],{"__ignoreMap":31},[36,105584,105585,105587],{"class":38,"line":39},[36,105586,1943],{"class":46},[36,105588,103641],{"class":42},[36,105590,105591,105593,105595,105597],{"class":38,"line":54},[36,105592,1943],{"class":46},[36,105594,33734],{"class":42},[36,105596,33737],{"class":46},[36,105598,33740],{"class":42},[36,105600,105601],{"class":38,"line":66},[36,105602,70],{"emptyLinePlaceholder":69},[36,105604,105605],{"class":38,"line":73},[36,105606,70],{"emptyLinePlaceholder":69},[36,105608,105609,105611,105613],{"class":38,"line":86},[36,105610,103654],{"class":62},[36,105612,15941],{"class":46},[36,105614,103659],{"class":50},[36,105616,105617],{"class":38,"line":126},[36,105618,105619],{"class":50},"\u003Cmujoco model=\"xml_basic\">\n",[36,105621,105622],{"class":38,"line":131},[36,105623,103669],{"class":50},[36,105625,105626],{"class":38,"line":225},[36,105627,70],{"emptyLinePlaceholder":69},[36,105629,105630],{"class":38,"line":235},[36,105631,103678],{"class":50},[36,105633,105634],{"class":38,"line":377},[36,105635,105636],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,105638,105639],{"class":38,"line":617},[36,105640,70],{"emptyLinePlaceholder":69},[36,105642,105643],{"class":38,"line":643},[36,105644,105645],{"class":50},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,105647,105648],{"class":38,"line":921},[36,105649,105650],{"class":50},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,105652,105653],{"class":38,"line":934},[36,105654,105655],{"class":50},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,105657,105658],{"class":38,"line":939},[36,105659,105660],{"class":50},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,105662,105663],{"class":38,"line":949},[36,105664,103707],{"class":50},[36,105666,105667],{"class":38,"line":962},[36,105668,103712],{"class":50},[36,105670,105671],{"class":38,"line":974},[36,105672,103717],{"class":50},[36,105674,105675],{"class":38,"line":979},[36,105676,98039],{"class":50},[36,105678,105679],{"class":38,"line":994},[36,105680,70],{"emptyLinePlaceholder":69},[36,105682,105683],{"class":38,"line":1006},[36,105684,70],{"emptyLinePlaceholder":69},[36,105686,105687,105689,105691,105693,105695],{"class":38,"line":1011},[36,105688,76],{"class":46},[36,105690,4366],{"class":79},[36,105692,103738],{"class":42},[36,105694,98027],{"class":62},[36,105696,153],{"class":42},[36,105698,105699,105701,105703,105705,105707],{"class":38,"line":1023},[36,105700,103747],{"class":42},[36,105702,47],{"class":46},[36,105704,103752],{"class":42},[36,105706,103654],{"class":62},[36,105708,123],{"class":42},[36,105710,105711,105713,105715],{"class":38,"line":1028},[36,105712,103761],{"class":42},[36,105714,47],{"class":46},[36,105716,103766],{"class":42},[36,105718,105719],{"class":38,"line":1033},[36,105720,70],{"emptyLinePlaceholder":69},[36,105722,105723,105726,105728,105731,105734],{"class":38,"line":1053},[36,105724,105725],{"class":42},"    box_body_id ",[36,105727,47],{"class":46},[36,105729,105730],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,105732,105733],{"class":50},"\"red_box\"",[36,105735,123],{"class":42},[36,105737,105738,105741,105743,105746,105749],{"class":38,"line":1064},[36,105739,105740],{"class":42},"    site_id ",[36,105742,47],{"class":46},[36,105744,105745],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,105747,105748],{"class":50},"\"box_center\"",[36,105750,123],{"class":42},[36,105752,105753],{"class":38,"line":1075},[36,105754,70],{"emptyLinePlaceholder":69},[36,105756,105757,105759,105762,105764,105766],{"class":38,"line":2291},[36,105758,5486],{"class":46},[36,105760,105761],{"class":42}," box_body_id ",[36,105763,3463],{"class":46},[36,105765,899],{"class":62},[36,105767,153],{"class":42},[36,105769,105770,105773,105776,105778,105781],{"class":38,"line":2329},[36,105771,105772],{"class":46},"        raise",[36,105774,105775],{"class":62}," RuntimeError",[36,105777,92],{"class":42},[36,105779,105780],{"class":50},"\"body red_box not found\"",[36,105782,123],{"class":42},[36,105784,105785,105787,105790,105792,105794],{"class":38,"line":2334},[36,105786,5486],{"class":46},[36,105788,105789],{"class":42}," site_id ",[36,105791,3463],{"class":46},[36,105793,899],{"class":62},[36,105795,153],{"class":42},[36,105797,105798,105800,105802,105804,105807],{"class":38,"line":2339},[36,105799,105772],{"class":46},[36,105801,105775],{"class":62},[36,105803,92],{"class":42},[36,105805,105806],{"class":50},"\"site box_center not found\"",[36,105808,123],{"class":42},[36,105810,105811],{"class":38,"line":2365},[36,105812,70],{"emptyLinePlaceholder":69},[36,105814,105815,105817,105819,105821,105823,105825,105827],{"class":38,"line":2373},[36,105816,5586],{"class":46},[36,105818,103841],{"class":42},[36,105820,28413],{"class":46},[36,105822,34796],{"class":62},[36,105824,92],{"class":42},[36,105826,1059],{"class":62},[36,105828,1147],{"class":42},[36,105830,105831],{"class":38,"line":5001},[36,105832,103856],{"class":42},[36,105834,105835],{"class":38,"line":5006},[36,105836,70],{"emptyLinePlaceholder":69},[36,105838,105839,105841,105843,105846],{"class":38,"line":10328},[36,105840,89],{"class":62},[36,105842,92],{"class":42},[36,105844,105845],{"class":50},"\"simulation time:\"",[36,105847,103818],{"class":42},[36,105849,105850,105852,105854,105857],{"class":38,"line":10352},[36,105851,89],{"class":62},[36,105853,92],{"class":42},[36,105855,105856],{"class":50},"\"box body position:\"",[36,105858,105859],{"class":42},", data.xpos[box_body_id].copy())\n",[36,105861,105862,105864,105866,105869],{"class":38,"line":10357},[36,105863,89],{"class":62},[36,105865,92],{"class":42},[36,105867,105868],{"class":50},"\"site position:\"",[36,105870,105871],{"class":42},", data.site_xpos[site_id].copy())\n",[36,105873,105874,105876,105878,105881],{"class":38,"line":10363},[36,105875,89],{"class":62},[36,105877,92],{"class":42},[36,105879,105880],{"class":50},"\"box qpos:\"",[36,105882,105883],{"class":42},", np.array(data.qpos))\n",[36,105885,105886],{"class":38,"line":10390},[36,105887,70],{"emptyLinePlaceholder":69},[36,105889,105890],{"class":38,"line":10395},[36,105891,70],{"emptyLinePlaceholder":69},[36,105893,105894,105896,105898,105900,105902],{"class":38,"line":10401},[36,105895,3948],{"class":46},[36,105897,33575],{"class":62},[36,105899,103899],{"class":46},[36,105901,103902],{"class":50},[36,105903,153],{"class":42},[36,105905,105906],{"class":38,"line":10413},[36,105907,103909],{"class":42},[19,105909,105910],{},"保存为：",[26,105912,105914],{"className":26192,"code":105913,"language":26194,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,105915,105916],{"__ignoreMap":31},[36,105917,105918,105920],{"class":38,"line":39},[36,105919,103623],{"class":79},[36,105921,105922],{"class":50}," ch2_xml_basic.py\n",[19,105924,104641],{},[26,105926,105928],{"className":26192,"code":105927,"language":26194,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,105929,105930],{"__ignoreMap":31},[36,105931,105932,105934],{"class":38,"line":39},[36,105933,30],{"class":79},[36,105935,105922],{"class":50},[1752,105937,103912],{"id":103912},[19,105939,105940],{},"用名字查找 body：",[26,105942,105944],{"className":28,"code":105943,"language":30,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,105945,105946],{"__ignoreMap":31},[36,105947,105948,105951,105953,105955,105957],{"class":38,"line":39},[36,105949,105950],{"class":42},"box_body_id ",[36,105952,47],{"class":46},[36,105954,105730],{"class":42},[36,105956,105733],{"class":50},[36,105958,123],{"class":42},[19,105960,105961],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105963,105964],{},"用名字查找 site：",[26,105966,105968],{"className":28,"code":105967,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,105969,105970],{"__ignoreMap":31},[36,105971,105972,105975,105977,105979,105981],{"class":38,"line":39},[36,105973,105974],{"class":42},"site_id ",[36,105976,47],{"class":46},[36,105978,105745],{"class":42},[36,105980,105748],{"class":50},[36,105982,123],{"class":42},[19,105984,105985,105986,105989,105990,105993],{},"注意第二个参数是对象类型。查 body 就用 ",[33,105987,105988],{},"mjOBJ_BODY","，查 site 就用 ",[33,105991,105992],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105995,105996],{},"读取世界坐标：",[26,105998,106000],{"className":28,"code":105999,"language":30,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,106001,106002,106007],{"__ignoreMap":31},[36,106003,106004],{"class":38,"line":39},[36,106005,106006],{"class":42},"data.xpos[box_body_id]\n",[36,106008,106009],{"class":38,"line":54},[36,106010,106011],{"class":42},"data.site_xpos[site_id]\n",[19,106013,106014,106017,106018,106021],{},[33,106015,106016],{},"xpos"," 是 body 的世界坐标，",[33,106019,106020],{},"site_xpos"," 是 site 的世界坐标。",[1752,106023,104048],{"id":104048},[26,106025,106027],{"className":28,"code":106026,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,106028,106029,106035],{"__ignoreMap":31},[36,106030,106031,106033],{"class":38,"line":39},[36,106032,1943],{"class":46},[36,106034,103641],{"class":42},[36,106036,106037,106039,106041,106043],{"class":38,"line":54},[36,106038,1943],{"class":46},[36,106040,33734],{"class":42},[36,106042,33737],{"class":46},[36,106044,33740],{"class":42},[19,106046,106047,106048,106051,106052,106055,106056,2031,106059,676],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,106049,106050],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,106053,106054],{},"as np"," 是习惯写法，后面就可以写 ",[33,106057,106058],{},"np.array(...)",[33,106060,106061],{},"np.round(...)",[26,106063,106064],{"className":28,"code":103935,"language":30,"meta":31,"style":31},[33,106065,106066,106074,106078],{"__ignoreMap":31},[36,106067,106068,106070,106072],{"class":38,"line":39},[36,106069,103654],{"class":62},[36,106071,15941],{"class":46},[36,106073,103659],{"class":50},[36,106075,106076],{"class":38,"line":54},[36,106077,103950],{"class":50},[36,106079,106080],{"class":38,"line":66},[36,106081,98039],{"class":50},[19,106083,106084,106085,676],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,106086,106087],{},"mujoco.MjModel.from_xml_string(XML)",[26,106089,106091],{"className":55415,"code":106090,"language":55417,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,106092,106093],{"__ignoreMap":31},[36,106094,106095,106097,106099,106101,106103,106105,106107,106109,106112,106114,106116,106119,106121,106123,106126],{"class":38,"line":39},[36,106096,3463],{"class":42},[36,106098,105550],{"class":53649},[36,106100,17295],{"class":79},[36,106102,47],{"class":42},[36,106104,105748],{"class":50},[36,106106,103446],{"class":79},[36,106108,47],{"class":42},[36,106110,106111],{"class":50},"\"0 0 0\"",[36,106113,103476],{"class":79},[36,106115,47],{"class":42},[36,106117,106118],{"class":50},"\"0.03\"",[36,106120,81112],{"class":79},[36,106122,47],{"class":42},[36,106124,106125],{"class":50},"\"0 1 0 1\"",[36,106127,103484],{"class":42},[19,106129,106130,106132,106133,106136,106137,106139,106140,106143],{},[33,106131,105550],{}," 是标记点。",[33,106134,106135],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,106138,105510],{}," 表示显示出来的小球大小。",[33,106141,106142],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,106145,106146],{"className":28,"code":105943,"language":30,"meta":31,"style":31},[33,106147,106148],{"__ignoreMap":31},[36,106149,106150,106152,106154,106156,106158],{"class":38,"line":39},[36,106151,105950],{"class":42},[36,106153,47],{"class":46},[36,106155,105730],{"class":42},[36,106157,105733],{"class":50},[36,106159,123],{"class":42},[19,106161,106162,106163,106165],{},"这行的作用是：根据名字 ",[33,106164,105733],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106167,106168],{},"拆开看：",[650,106170,106171,106177,106182,106188],{},[653,106172,106173,106176],{},[33,106174,106175],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[653,106178,106179,106181],{},[33,106180,104425],{}," 是被查询的模型。",[653,106183,106184,106187],{},[33,106185,106186],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[653,106189,106190,106192],{},[33,106191,105733],{}," 是 XML 里写的名字。",[26,106194,106195],{"className":28,"code":105967,"language":30,"meta":31,"style":31},[33,106196,106197],{"__ignoreMap":31},[36,106198,106199,106201,106203,106205,106207],{"class":38,"line":39},[36,106200,105974],{"class":42},[36,106202,47],{"class":46},[36,106204,105745],{"class":42},[36,106206,105748],{"class":50},[36,106208,123],{"class":42},[19,106210,106211,106212,676],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,106213,105748],{},[26,106215,106217],{"className":28,"code":106216,"language":30,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,106218,106219,106231],{"__ignoreMap":31},[36,106220,106221,106223,106225,106227,106229],{"class":38,"line":39},[36,106222,3948],{"class":46},[36,106224,105761],{"class":42},[36,106226,3463],{"class":46},[36,106228,899],{"class":62},[36,106230,153],{"class":42},[36,106232,106233,106236,106238,106240,106242],{"class":38,"line":54},[36,106234,106235],{"class":46},"    raise",[36,106237,105775],{"class":62},[36,106239,92],{"class":42},[36,106241,105780],{"class":50},[36,106243,123],{"class":42},[19,106245,106246,106248,106249,106252,106253,106256,106257,106260],{},[33,106247,3948],{}," 是条件判断。",[33,106250,106251],{},"mj_name2id"," 找不到对象时会返回 ",[33,106254,106255],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,106258,106259],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,106262,106264],{"className":28,"code":106263,"language":30,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,106265,106266,106282],{"__ignoreMap":31},[36,106267,106268,106270,106272,106274,106276,106278,106280],{"class":38,"line":39},[36,106269,5410],{"class":46},[36,106271,103841],{"class":42},[36,106273,28413],{"class":46},[36,106275,34796],{"class":62},[36,106277,92],{"class":42},[36,106279,1059],{"class":62},[36,106281,1147],{"class":42},[36,106283,106284],{"class":38,"line":54},[36,106285,104039],{"class":42},[19,106287,106288],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,106290,106292],{"className":28,"code":106291,"language":30,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,106293,106294],{"__ignoreMap":31},[36,106295,106296,106298,106300,106302],{"class":38,"line":39},[36,106297,371],{"class":62},[36,106299,92],{"class":42},[36,106301,105856],{"class":50},[36,106303,105859],{"class":42},[19,106305,106306,106308,106309,106312],{},[33,106307,103419],{}," 保存所有 body 的世界坐标。",[33,106310,106311],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,106314,106316],{"className":28,"code":106315,"language":30,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,106317,106318],{"__ignoreMap":31},[36,106319,106320,106322,106324,106326],{"class":38,"line":39},[36,106321,371],{"class":62},[36,106323,92],{"class":42},[36,106325,105868],{"class":50},[36,106327,105871],{"class":42},[19,106329,106330,106333,106334,106336],{},[33,106331,106332],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,106335,105317],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,106338,106340],{"className":28,"code":106339,"language":30,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,106341,106342],{"__ignoreMap":31},[36,106343,106344,106346,106348,106350],{"class":38,"line":39},[36,106345,371],{"class":62},[36,106347,92],{"class":42},[36,106349,105880],{"class":50},[36,106351,105883],{"class":42},[19,106353,106354,106355,106358],{},"这里打印广义位置数组。",[33,106356,106357],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106360,104656],{"id":104655},[19,106362,106363,106364,106367,106368,676],{},"程序会输出 ",[33,106365,106366],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,106369,106370],{},"qpos",[19,106372,106373,106375,106376,106379,106380,106383],{},[33,106374,106311],{}," 是 body 的世界坐标位置。",[33,106377,106378],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,106381,106382],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106385,84564,106386,84872,106388,106390],{},[33,106387,105317],{},[33,106389,106135],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106392,106393],{},"如果你把 site 改成：",[26,106395,106397],{"className":55415,"code":106396,"language":55417,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,106398,106399],{"__ignoreMap":31},[36,106400,106401,106403,106405,106407,106409,106412,106414,106416,106419,106421,106423,106425,106427,106429,106431],{"class":38,"line":39},[36,106402,3463],{"class":42},[36,106404,105550],{"class":53649},[36,106406,17295],{"class":79},[36,106408,47],{"class":42},[36,106410,106411],{"class":50},"\"box_top\"",[36,106413,103446],{"class":79},[36,106415,47],{"class":42},[36,106417,106418],{"class":50},"\"0 0 0.15\"",[36,106420,103476],{"class":79},[36,106422,47],{"class":42},[36,106424,106118],{"class":50},[36,106426,81112],{"class":79},[36,106428,47],{"class":42},[36,106430,106125],{"class":50},[36,106432,103484],{"class":42},[19,106434,106435,106436,106439],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,106437,106438],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106441,104688],{"id":104687},[650,106443,106444,106453,106456,106463,106469,106480],{},[653,106445,104751,106446,106448,106449,104754,106451,676],{},[33,106447,105321],{}," 的初始高度从 ",[33,106450,1906],{},[33,106452,1911],{},[653,106454,106455],{},"重新运行程序。",[653,106457,106458,106459,106462],{},"观察 ",[33,106460,106461],{},"box qpos"," 和最终位置是否变化。",[653,106464,106465,106466,106468],{},"故意把 ",[33,106467,105550],{}," 名称改错，确认程序能报错。",[653,106470,104751,106471,106473,106474,104754,106476,106479],{},[33,106472,103460],{}," 的颜色 ",[33,106475,104372],{},[33,106477,106478],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[653,106481,104751,106482,84872,106484,104754,106487,106490,106491,106493],{},[33,106483,105317],{},[33,106485,106486],{},"pos",[33,106488,106489],{},"0 0 0.2","，观察 ",[33,106492,106438],{}," 如何变化。",[14,106495,104793],{"id":104792},[1752,106497,106499],{"id":106498},"xml-error-schema-violation",[33,106500,106501],{},"XML Error: Schema violation",[19,106503,106504],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1752,106506,106508,83632,106510],{"id":106507},"mj_name2id-返回-1",[33,106509,106251],{},[33,106511,106255],{},[19,106513,106514,106515,106518],{},"说明名字没有找到。检查 XML 中 ",[33,106516,106517],{},"name=\"...\"","，并确认对象类型正确。",[1752,106520,106521],{"id":106521},"物体不下落",[19,106523,104863],{},[650,106525,106526,106531,106536],{},[653,106527,106528,106529],{},"body 是否有 ",[33,106530,103960],{},[653,106532,106533,106534],{},"gravity 是否为 ",[33,106535,104929],{},[653,106537,106538,106539,106541],{},"body 是否被固定在 ",[33,106540,104181],{}," 中",[1752,106543,106544],{"id":106544},"坐标看起来不符合预期",[19,106546,106547],{},"先区分两种坐标：",[2698,106549,106550,106559],{},[2701,106551,106552],{},[2704,106553,106554,106557],{},[2707,106555,106556],{"align":26106},"坐标",[2707,106558,103041],{"align":26106},[2744,106560,106561,106571],{},[2704,106562,106563,106568],{},[2749,106564,106565,106566],{"align":26106},"XML 里的 ",[33,106567,106486],{},[2749,106569,106570],{"align":26106},"相对父 body 的局部坐标",[2704,106572,106573,106579],{},[2749,106574,106575,27349,106577],{"align":26106},[33,106576,103419],{},[33,106578,106332],{},[2749,106580,106581],{"align":26106},"仿真更新后的世界坐标",[19,106583,106584,106585,106587,106588,84881,106591,106593],{},"如果你修改了 ",[33,106586,103410],{},"，但还没调用 ",[33,106589,106590],{},"mj_forward",[33,106592,103555],{},"，世界坐标可能还没有更新。",[14,106595,104947],{"id":104946},[19,106597,106598],{},"MJCF 建模先掌握四件事：",[650,106600,106601,106606,106611,106616],{},[653,106602,106603,106605],{},[33,106604,54148],{}," 表示刚体层级。",[653,106607,106608,106610],{},[33,106609,103460],{}," 表示形状、碰撞和质量。",[653,106612,106613,106615],{},[33,106614,105296],{}," 决定 body 能不能动、怎么动。",[653,106617,106618,106620],{},[33,106619,105550],{}," 用来标记关键点，方便 Python 读取位置。",[19,106622,106623],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2467,106625,106626],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":106628},[106629,106630,106631,106637,106641,106642,106643,106650],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":106632},[106633,106634,106635,106636],{"id":105300,"depth":66,"text":105300},{"id":105414,"depth":66,"text":105414},{"id":105440,"depth":66,"text":105441},{"id":105544,"depth":66,"text":105545},{"id":103592,"depth":54,"text":103593,"children":106638},[106639,106640],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":106644},[106645,106646,106648,106649],{"id":106498,"depth":66,"text":106501},{"id":106507,"depth":66,"text":106647},"mj_name2id 返回 -1",{"id":106521,"depth":66,"text":106521},{"id":106544,"depth":66,"text":106544},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104994,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106657,"title":106658,"body":106659,"description":31,"extension":2494,"meta":108153,"navigation":69,"path":108154,"seo":108155,"stem":108156,"__hash__":108157},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106660,"toc":108125},[106661,106664,106666,106669,106672,106709,106712,106718,106721,106723,106725,106752,106754,106768,106770,106811,106813,106837,106839,106842,106851,106860,106863,106872,106880,106889,106892,106902,106905,106957,106964,106970,106978,107026,107029,107048,107051,107059,107063,107072,107105,107107,107455,107457,107469,107471,107482,107484,107487,107508,107514,107517,107542,107552,107555,107563,107566,107569,107590,107601,107603,107623,107626,107647,107656,107675,107681,107706,107709,107723,107730,107754,107757,107765,107774,107790,107802,107810,107819,107821,107824,107848,107853,107856,107878,107880,107919,107921,107928,107930,107938,107941,107944,107956,107997,108004,108015,108022,108025,108074,108077,108080,108086,108088,108093,108119,108122],[10,106662,106658],{"id":106663},"_3python-控制接口读取状态与推进仿真",[14,106665,102988],{"id":102987},[19,106667,106668],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106670,106671],{},"你将学习:",[650,106673,106674,106679,106684,106688,106693,106704],{},[653,106675,106676],{},[33,106677,106678],{},"MjModel.from_xml_string",[653,106680,106681],{},[33,106682,106683],{},"MjData(model)",[653,106685,106686],{},[33,106687,103555],{},[653,106689,106690],{},[33,106691,106692],{},"mj_resetData",[653,106694,106695,106696,2031,106698,2031,106701],{},"读取 ",[33,106697,106370],{},[33,106699,106700],{},"qvel",[33,106702,106703],{},"ctrl",[653,106705,2459,106706],{},[33,106707,106708],{},"model.opt.timestep",[19,106710,106711],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,106713,106716],{"className":106714,"code":106715,"language":7570,"meta":31},[7568],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,106717,106715],{"__ignoreMap":31},[19,106719,106720],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106722,103111],{"id":103110},[19,106724,103114],{},[26,106726,106728],{"className":26192,"code":106727,"language":26194,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,106729,106730],{"__ignoreMap":31},[36,106731,106732,106734,106736,106738,106740,106743,106745,106747,106749],{"class":38,"line":39},[36,106733,26947],{"class":79},[36,106735,28685],{"class":50},[36,106737,26204],{"class":50},[36,106739,28770],{"class":62},[36,106741,106742],{"class":50}," python3",[36,106744,103139],{"class":50},[36,106746,104841],{"class":50},[36,106748,103155],{"class":50},[36,106750,106751],{"class":50}," glfw\n",[19,106753,105159],{},[26,106755,106756],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},[33,106757,106758],{"__ignoreMap":31},[36,106759,106760,106762,106764,106766],{"class":38,"line":39},[36,106761,26201],{"class":79},[36,106763,26204],{"class":50},[36,106765,103271],{"class":50},[36,106767,103274],{"class":50},[19,106769,105176],{},[26,106771,106773],{"className":26192,"code":106772,"language":26194,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,106774,106775,106792,106801],{"__ignoreMap":31},[36,106776,106777,106779,106781,106783,106786,106788,106790],{"class":38,"line":39},[36,106778,32699],{"class":79},[36,106780,31545],{"class":50},[36,106782,27486],{"class":62},[36,106784,106785],{"class":50}," mujoco-python-api",[36,106787,103316],{"class":50},[36,106789,103319],{"class":62},[36,106791,103322],{"class":62},[36,106793,106794,106796,106798],{"class":38,"line":54},[36,106795,32699],{"class":79},[36,106797,103329],{"class":50},[36,106799,106800],{"class":50}," mujoco-python-api\n",[36,106802,106803,106805,106807,106809],{"class":38,"line":66},[36,106804,26201],{"class":79},[36,106806,26204],{"class":50},[36,106808,103271],{"class":50},[36,106810,103274],{"class":50},[19,106812,103345],{},[650,106814,106815,106822,106831],{},[653,106816,106817,302,106819,106821],{},[33,106818,103016],{},[33,106820,103021],{}," 是官方 Python bindings 的类名。",[653,106823,106824,106825,106828,106829,676],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,106826,106827],{},"mjModel"," 在 Python 中是 ",[33,106830,103050],{},[653,106832,106833,106834,676],{},"不要使用 ",[33,106835,106836],{},"sim = mujoco_py.MjSim(...)",[14,106838,103385],{"id":103384},[19,106840,106841],{},"仿真推进核心代码:",[26,106843,106845],{"className":28,"code":106844,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,106846,106847],{"__ignoreMap":31},[36,106848,106849],{"class":38,"line":39},[36,106850,106844],{"class":42},[19,106852,106853,106854,2031,106856,2031,106858,676],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,106855,103410],{},[33,106857,103413],{},[33,106859,103407],{},[19,106861,106862],{},"重置仿真:",[26,106864,106866],{"className":28,"code":106865,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,106867,106868],{"__ignoreMap":31},[36,106869,106870],{"class":38,"line":39},[36,106871,106865],{"class":42},[19,106873,106874,106875,84881,106877,106879],{},"如果手动修改了 ",[33,106876,103410],{},[33,106878,103413],{},"，通常应调用:",[26,106881,106883],{"className":28,"code":106882,"language":30,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,106884,106885],{"__ignoreMap":31},[36,106886,106887],{"class":38,"line":39},[36,106888,106882],{"class":42},[19,106890,106891],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1752,106893,106895,2031,106897,2031,106899,106901],{"id":106894},"qposqvelctrl-是什么",[33,106896,106370],{},[33,106898,106700],{},[33,106900,106703],{}," 是什么",[19,106903,106904],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2698,106906,106907,106919],{},[2701,106908,106909],{},[2704,106910,106911,106914,106916],{},[2707,106912,106913],{"align":26106},"字段",[2707,106915,103041],{"align":26106},[2707,106917,106918],{"align":26106},"谁来修改",[2744,106920,106921,106933,106945],{},[2704,106922,106923,106927,106930],{},[2749,106924,106925],{"align":26106},[33,106926,103410],{},[2749,106928,106929],{"align":26106},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2749,106931,106932],{"align":26106},"MuJoCo 更新，也可以手动设置初始状态",[2704,106934,106935,106939,106942],{},[2749,106936,106937],{"align":26106},[33,106938,103413],{},[2749,106940,106941],{"align":26106},"广义速度，例如小车速度、关节角速度",[2749,106943,106944],{"align":26106},"MuJoCo 更新，也可以手动清零",[2704,106946,106947,106951,106954],{},[2749,106948,106949],{"align":26106},[33,106950,103416],{},[2749,106952,106953],{"align":26106},"actuator 的控制输入",[2749,106955,106956],{"align":26106},"主要由你的控制代码写入",[19,106958,11405,106959,302,106961,106963],{},[33,106960,106370],{},[33,106962,106700],{}," 不一定同维。自由刚体就是典型例子：",[26,106965,106968],{"className":106966,"code":106967,"language":7570,"meta":31},[7568],"freejoint: qpos 7 维，qvel 6 维\n",[33,106969,106967],{"__ignoreMap":31},[1752,106971,106973,302,106975,106977],{"id":106972},"mj_step-和-mj_forward-的区别",[33,106974,103555],{},[33,106976,106590],{}," 的区别",[2698,106979,106980,106993],{},[2701,106981,106982],{},[2704,106983,106984,106987,106990],{},[2707,106985,106986],{"align":26106},"函数",[2707,106988,106989],{"align":26106},"是否推进时间",[2707,106991,106992],{"align":26106},"什么时候用",[2744,106994,106995,107008],{},[2704,106996,106997,107002,107005],{},[2749,106998,106999],{"align":26106},[33,107000,107001],{},"mj_step(model, data)",[2749,107003,107004],{"align":26106},"是",[2749,107006,107007],{"align":26106},"正常仿真循环，每调用一次前进一步",[2704,107009,107010,107015,107018],{},[2749,107011,107012],{"align":26106},[33,107013,107014],{},"mj_forward(model, data)",[2749,107016,107017],{"align":26106},"否",[2749,107019,107020,107021,2031,107023,107025],{"align":26106},"手动改了 ",[33,107022,106370],{},[33,107024,106700],{}," 后，刷新派生量",[19,107027,107028],{},"例如你写：",[26,107030,107032],{"className":28,"code":107031,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,107033,107034],{"__ignoreMap":31},[36,107035,107036,107039,107041,107043,107045],{"class":38,"line":39},[36,107037,107038],{"class":42},"data.qpos[",[36,107040,1911],{"class":62},[36,107042,6826],{"class":42},[36,107044,47],{"class":46},[36,107046,107047],{"class":62}," 2.0\n",[19,107049,107050],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,107052,107053],{"className":28,"code":106882,"language":30,"meta":31,"style":31},[33,107054,107055],{"__ignoreMap":31},[36,107056,107057],{"class":38,"line":39},[36,107058,106882],{"class":42},[1752,107060,107062],{"id":107061},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,107064,107065,107068,107069,107071],{},[33,107066,107067],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,107070,35753],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,107073,107075],{"className":28,"code":107074,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,107076,107077,107081,107091,107101],{"__ignoreMap":31},[36,107078,107079],{"class":38,"line":39},[36,107080,106865],{"class":42},[36,107082,107083,107086,107088],{"class":38,"line":54},[36,107084,107085],{"class":42},"data.qpos[:] ",[36,107087,47],{"class":46},[36,107089,107090],{"class":42}," random_qpos\n",[36,107092,107093,107096,107098],{"class":38,"line":66},[36,107094,107095],{"class":42},"data.qvel[:] ",[36,107097,47],{"class":46},[36,107099,107100],{"class":62}," 0.0\n",[36,107102,107103],{"class":38,"line":73},[36,107104,106882],{"class":42},[14,107106,103593],{"id":103592},[26,107108,107110],{"className":28,"code":107109,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,107111,107112,107118,107128,107132,107136,107144,107149,107153,107157,107161,107166,107170,107175,107180,107185,107189,107193,107197,107201,107205,107209,107228,107235,107247,107258,107274,107290,107294,107298,107310,107322,107330,107334,107345,107349,107365,107369,107373,107382,107386,107391,107400,107404,107417,107422,107431,107435,107439,107451],{"__ignoreMap":31},[36,107113,107114,107116],{"class":38,"line":39},[36,107115,1943],{"class":46},[36,107117,103641],{"class":42},[36,107119,107120,107122,107124,107126],{"class":38,"line":54},[36,107121,1943],{"class":46},[36,107123,33734],{"class":42},[36,107125,33737],{"class":46},[36,107127,33740],{"class":42},[36,107129,107130],{"class":38,"line":66},[36,107131,70],{"emptyLinePlaceholder":69},[36,107133,107134],{"class":38,"line":73},[36,107135,70],{"emptyLinePlaceholder":69},[36,107137,107138,107140,107142],{"class":38,"line":86},[36,107139,103654],{"class":62},[36,107141,15941],{"class":46},[36,107143,103659],{"class":50},[36,107145,107146],{"class":38,"line":126},[36,107147,107148],{"class":50},"\u003Cmujoco model=\"state_api\">\n",[36,107150,107151],{"class":38,"line":131},[36,107152,103669],{"class":50},[36,107154,107155],{"class":38,"line":225},[36,107156,70],{"emptyLinePlaceholder":69},[36,107158,107159],{"class":38,"line":235},[36,107160,103678],{"class":50},[36,107162,107163],{"class":38,"line":377},[36,107164,107165],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,107167,107168],{"class":38,"line":617},[36,107169,70],{"emptyLinePlaceholder":69},[36,107171,107172],{"class":38,"line":643},[36,107173,107174],{"class":50},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,107176,107177],{"class":38,"line":921},[36,107178,107179],{"class":50},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,107181,107182],{"class":38,"line":934},[36,107183,107184],{"class":50},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,107186,107187],{"class":38,"line":939},[36,107188,103707],{"class":50},[36,107190,107191],{"class":38,"line":949},[36,107192,103712],{"class":50},[36,107194,107195],{"class":38,"line":962},[36,107196,103717],{"class":50},[36,107198,107199],{"class":38,"line":974},[36,107200,98039],{"class":50},[36,107202,107203],{"class":38,"line":979},[36,107204,70],{"emptyLinePlaceholder":69},[36,107206,107207],{"class":38,"line":994},[36,107208,70],{"emptyLinePlaceholder":69},[36,107210,107211,107213,107216,107219,107221,107224,107226],{"class":38,"line":1006},[36,107212,76],{"class":46},[36,107214,107215],{"class":79}," print_state",[36,107217,107218],{"class":42},"(prefix: ",[36,107220,669],{"class":62},[36,107222,107223],{"class":42},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,107225,98027],{"class":62},[36,107227,153],{"class":42},[36,107229,107230,107232],{"class":38,"line":1011},[36,107231,89],{"class":62},[36,107233,107234],{"class":42},"(prefix)\n",[36,107236,107237,107239,107241,107244],{"class":38,"line":1023},[36,107238,89],{"class":62},[36,107240,92],{"class":42},[36,107242,107243],{"class":50},"\"  timestep:\"",[36,107245,107246],{"class":42},", model.opt.timestep)\n",[36,107248,107249,107251,107253,107256],{"class":38,"line":1028},[36,107250,89],{"class":62},[36,107252,92],{"class":42},[36,107254,107255],{"class":50},"\"  time:\"",[36,107257,103818],{"class":42},[36,107259,107260,107262,107264,107267,107270,107272],{"class":38,"line":1033},[36,107261,89],{"class":62},[36,107263,92],{"class":42},[36,107265,107266],{"class":50},"\"  qpos:\"",[36,107268,107269],{"class":42},", np.round(data.qpos.copy(), ",[36,107271,2850],{"class":62},[36,107273,1914],{"class":42},[36,107275,107276,107278,107280,107283,107286,107288],{"class":38,"line":1053},[36,107277,89],{"class":62},[36,107279,92],{"class":42},[36,107281,107282],{"class":50},"\"  qvel:\"",[36,107284,107285],{"class":42},", np.round(data.qvel.copy(), ",[36,107287,2850],{"class":62},[36,107289,1914],{"class":42},[36,107291,107292],{"class":38,"line":1064},[36,107293,70],{"emptyLinePlaceholder":69},[36,107295,107296],{"class":38,"line":1075},[36,107297,70],{"emptyLinePlaceholder":69},[36,107299,107300,107302,107304,107306,107308],{"class":38,"line":2291},[36,107301,76],{"class":46},[36,107303,4366],{"class":79},[36,107305,103738],{"class":42},[36,107307,98027],{"class":62},[36,107309,153],{"class":42},[36,107311,107312,107314,107316,107318,107320],{"class":38,"line":2329},[36,107313,103747],{"class":42},[36,107315,47],{"class":46},[36,107317,103752],{"class":42},[36,107319,103654],{"class":62},[36,107321,123],{"class":42},[36,107323,107324,107326,107328],{"class":38,"line":2334},[36,107325,103761],{"class":42},[36,107327,47],{"class":46},[36,107329,103766],{"class":42},[36,107331,107332],{"class":38,"line":2339},[36,107333,70],{"emptyLinePlaceholder":69},[36,107335,107336,107339,107342],{"class":38,"line":2365},[36,107337,107338],{"class":42},"    print_state(",[36,107340,107341],{"class":50},"\"initial\"",[36,107343,107344],{"class":42},", model, data)\n",[36,107346,107347],{"class":38,"line":2373},[36,107348,70],{"emptyLinePlaceholder":69},[36,107350,107351,107353,107355,107357,107359,107361,107363],{"class":38,"line":5001},[36,107352,5586],{"class":46},[36,107354,103841],{"class":42},[36,107356,28413],{"class":46},[36,107358,34796],{"class":62},[36,107360,92],{"class":42},[36,107362,3210],{"class":62},[36,107364,1147],{"class":42},[36,107366,107367],{"class":38,"line":5006},[36,107368,103856],{"class":42},[36,107370,107371],{"class":38,"line":10328},[36,107372,70],{"emptyLinePlaceholder":69},[36,107374,107375,107377,107380],{"class":38,"line":10352},[36,107376,107338],{"class":42},[36,107378,107379],{"class":50},"\"after 50 steps\"",[36,107381,107344],{"class":42},[36,107383,107384],{"class":38,"line":10357},[36,107385,70],{"emptyLinePlaceholder":69},[36,107387,107388],{"class":38,"line":10363},[36,107389,107390],{"class":42},"    mujoco.mj_resetData(model, data)\n",[36,107392,107393,107395,107398],{"class":38,"line":10390},[36,107394,107338],{"class":42},[36,107396,107397],{"class":50},"\"after reset\"",[36,107399,107344],{"class":42},[36,107401,107402],{"class":38,"line":10395},[36,107403,70],{"emptyLinePlaceholder":69},[36,107405,107406,107409,107411,107413,107415],{"class":38,"line":10401},[36,107407,107408],{"class":42},"    data.qpos[",[36,107410,1911],{"class":62},[36,107412,6826],{"class":42},[36,107414,47],{"class":46},[36,107416,107047],{"class":62},[36,107418,107419],{"class":38,"line":10413},[36,107420,107421],{"class":42},"    mujoco.mj_forward(model, data)\n",[36,107423,107424,107426,107429],{"class":38,"line":10425},[36,107425,107338],{"class":42},[36,107427,107428],{"class":50},"\"after manual qpos edit\"",[36,107430,107344],{"class":42},[36,107432,107433],{"class":38,"line":10437},[36,107434,70],{"emptyLinePlaceholder":69},[36,107436,107437],{"class":38,"line":12095},[36,107438,70],{"emptyLinePlaceholder":69},[36,107440,107441,107443,107445,107447,107449],{"class":38,"line":12120},[36,107442,3948],{"class":46},[36,107444,33575],{"class":62},[36,107446,103899],{"class":46},[36,107448,103902],{"class":50},[36,107450,153],{"class":42},[36,107452,107453],{"class":38,"line":12143},[36,107454,103909],{"class":42},[19,107456,105910],{},[26,107458,107460],{"className":26192,"code":107459,"language":26194,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,107461,107462],{"__ignoreMap":31},[36,107463,107464,107466],{"class":38,"line":39},[36,107465,103623],{"class":79},[36,107467,107468],{"class":50}," ch3_python_state.py\n",[19,107470,104641],{},[26,107472,107474],{"className":26192,"code":107473,"language":26194,"meta":31,"style":31},"python ch3_python_state.py\n",[33,107475,107476],{"__ignoreMap":31},[36,107477,107478,107480],{"class":38,"line":39},[36,107479,30],{"class":79},[36,107481,107468],{"class":50},[1752,107483,103912],{"id":103912},[19,107485,107486],{},"打印状态的函数：",[26,107488,107490],{"className":28,"code":107489,"language":30,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,107491,107492],{"__ignoreMap":31},[36,107493,107494,107496,107498,107500,107502,107504,107506],{"class":38,"line":39},[36,107495,76],{"class":46},[36,107497,107215],{"class":79},[36,107499,107218],{"class":42},[36,107501,669],{"class":62},[36,107503,107223],{"class":42},[36,107505,98027],{"class":62},[36,107507,153],{"class":42},[19,107509,107510,107511,107513],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,107512,35753],{}," 里发生了什么。",[19,107515,107516],{},"推进 50 步：",[26,107518,107520],{"className":28,"code":107519,"language":30,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,107521,107522,107538],{"__ignoreMap":31},[36,107523,107524,107526,107528,107530,107532,107534,107536],{"class":38,"line":39},[36,107525,5410],{"class":46},[36,107527,103841],{"class":42},[36,107529,28413],{"class":46},[36,107531,34796],{"class":62},[36,107533,92],{"class":42},[36,107535,3210],{"class":62},[36,107537,1147],{"class":42},[36,107539,107540],{"class":38,"line":54},[36,107541,104039],{"class":42},[19,107543,107544,107545,107548,107549,107551],{},"由于 ",[33,107546,107547],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,107550,37680],{}," 秒。",[19,107553,107554],{},"重置：",[26,107556,107557],{"className":28,"code":106865,"language":30,"meta":31,"style":31},[33,107558,107559],{"__ignoreMap":31},[36,107560,107561],{"class":38,"line":39},[36,107562,106865],{"class":42},[19,107564,107565],{},"这会把时间、位置、速度恢复到初始状态。",[19,107567,107568],{},"手动改高度：",[26,107570,107572],{"className":28,"code":107571,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,107573,107574,107586],{"__ignoreMap":31},[36,107575,107576,107578,107580,107582,107584],{"class":38,"line":39},[36,107577,107038],{"class":42},[36,107579,1911],{"class":62},[36,107581,6826],{"class":42},[36,107583,47],{"class":46},[36,107585,107047],{"class":62},[36,107587,107588],{"class":38,"line":54},[36,107589,106882],{"class":42},[19,107591,107592,107593,107596,107597,107600],{},"这个例子里 ",[33,107594,107595],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,107598,107599],{},"2.0"," 表示把小球放到更高的位置。",[1752,107602,104048],{"id":104048},[26,107604,107605],{"className":28,"code":107489,"language":30,"meta":31,"style":31},[33,107606,107607],{"__ignoreMap":31},[36,107608,107609,107611,107613,107615,107617,107619,107621],{"class":38,"line":39},[36,107610,76],{"class":46},[36,107612,107215],{"class":79},[36,107614,107218],{"class":42},[36,107616,669],{"class":62},[36,107618,107223],{"class":42},[36,107620,98027],{"class":62},[36,107622,153],{"class":42},[19,107624,107625],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[650,107627,107628,107637,107642],{},[653,107629,107630,107633,107634,107636],{},[33,107631,107632],{},"prefix","：一段文字，比如 ",[33,107635,107341],{},"，用来说明现在打印的是哪个阶段。",[653,107638,107639,107641],{},[33,107640,104425],{},"：MuJoCo 模型。",[653,107643,107644,107646],{},[33,107645,35753],{},"：MuJoCo 当前状态。",[19,107648,107649,2031,107652,107655],{},[33,107650,107651],{},"prefix: str",[33,107653,107654],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,107657,107659],{"className":28,"code":107658,"language":30,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,107660,107661],{"__ignoreMap":31},[36,107662,107663,107665,107667,107669,107671,107673],{"class":38,"line":39},[36,107664,371],{"class":62},[36,107666,92],{"class":42},[36,107668,107266],{"class":50},[36,107670,107269],{"class":42},[36,107672,2850],{"class":62},[36,107674,1914],{"class":42},[19,107676,107677,107680],{},[33,107678,107679],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,107682,107684],{"className":28,"code":107683,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,107685,107686,107698],{"__ignoreMap":31},[36,107687,107688,107690,107692,107694,107696],{"class":38,"line":39},[36,107689,103974],{"class":42},[36,107691,47],{"class":46},[36,107693,103752],{"class":42},[36,107695,103654],{"class":62},[36,107697,123],{"class":42},[36,107699,107700,107702,107704],{"class":38,"line":54},[36,107701,103998],{"class":42},[36,107703,47],{"class":46},[36,107705,103766],{"class":42},[19,107707,107708],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,107710,107712],{"className":28,"code":107711,"language":30,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,107713,107714],{"__ignoreMap":31},[36,107715,107716,107719,107721],{"class":38,"line":39},[36,107717,107718],{"class":42},"print_state(",[36,107720,107341],{"class":50},[36,107722,107344],{"class":42},[19,107724,107725,107726,107729],{},"调用刚才定义的 ",[33,107727,107728],{},"print_state"," 函数，打印初始状态。",[26,107731,107732],{"className":28,"code":107519,"language":30,"meta":31,"style":31},[33,107733,107734,107750],{"__ignoreMap":31},[36,107735,107736,107738,107740,107742,107744,107746,107748],{"class":38,"line":39},[36,107737,5410],{"class":46},[36,107739,103841],{"class":42},[36,107741,28413],{"class":46},[36,107743,34796],{"class":62},[36,107745,92],{"class":42},[36,107747,3210],{"class":62},[36,107749,1147],{"class":42},[36,107751,107752],{"class":38,"line":54},[36,107753,104039],{"class":42},[19,107755,107756],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,107758,107759],{"className":28,"code":106865,"language":30,"meta":31,"style":31},[33,107760,107761],{"__ignoreMap":31},[36,107762,107763],{"class":38,"line":39},[36,107764,106865],{"class":42},[19,107766,107767,107768,107770,107771,107773],{},"重置 ",[33,107769,35753],{},"。注意它不会重新创建 ",[33,107772,104425],{},"，因为模型结构没有变，只是状态回到初始值。",[26,107775,107776],{"className":28,"code":107031,"language":30,"meta":31,"style":31},[33,107777,107778],{"__ignoreMap":31},[36,107779,107780,107782,107784,107786,107788],{"class":38,"line":39},[36,107781,107038],{"class":42},[36,107783,1911],{"class":62},[36,107785,6826],{"class":42},[36,107787,47],{"class":46},[36,107789,107047],{"class":62},[19,107791,107792,107793,2031,107796,2031,107799,107801],{},"这行是“手动改状态”。在 freejoint 中，",[33,107794,107795],{},"qpos[0]",[33,107797,107798],{},"qpos[1]",[33,107800,107595],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,107803,107804],{"className":28,"code":106882,"language":30,"meta":31,"style":31},[33,107805,107806],{"__ignoreMap":31},[36,107807,107808],{"class":38,"line":39},[36,107809,106882],{"class":42},[19,107811,107812,107813,107815,107816,107818],{},"手动改完 ",[33,107814,106370],{}," 后，调用 ",[33,107817,106590],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107820,104656],{"id":104655},[19,107822,107823],{},"你会看到:",[650,107825,107826,107831,107836,107839],{},[653,107827,107828,107829],{},"初始时间为 ",[33,107830,2751],{},[653,107832,107833,107834],{},"50 步后时间约为 ",[33,107835,37680],{},[653,107837,107838],{},"reset 后状态恢复",[653,107840,107841,107842,107845,107846],{},"手动修改 ",[33,107843,107844],{},"data.qpos[2]"," 后，小球高度变为 ",[33,107847,107599],{},[19,107849,107850,107852],{},[33,107851,107595],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107854,107855],{},"输出里可以重点看三件事：",[650,107857,107858,107866,107871],{},[653,107859,107860,107862,107863,107865],{},[33,107861,4780],{}," 是否随着 ",[33,107864,103555],{}," 增加。",[653,107867,107868,107870],{},[33,107869,106370],{}," 的 z 坐标是否因为下落而变化。",[653,107872,107873,107875,107876,676],{},[33,107874,106692],{}," 后时间是否回到 ",[33,107877,2751],{},[14,107879,104688],{"id":104687},[650,107881,107882,107888,107894,107900,107903,107912],{},[653,107883,107884,107885,676],{},"修改 timestep 为 ",[33,107886,107887],{},"0.005",[653,107889,107890,107891,676],{},"重新运行，检查 50 步后时间是否约为 ",[33,107892,107893],{},"0.25",[653,107895,107896,107897,676],{},"修改重力为 ",[33,107898,107899],{},"0 0 -1.0",[653,107901,107902],{},"观察小球下降速度是否变慢。",[653,107904,104751,107905,104754,107908,107911],{},[33,107906,107907],{},"data.qpos[2] = 2.0",[33,107909,107910],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[653,107913,107914,107915,107918],{},"注释掉 ",[33,107916,107917],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107920,104793],{"id":104792},[1752,107922,107924,107925,107927],{"id":107923},"修改-dataqpos-后位置没有更新","修改 ",[33,107926,103410],{}," 后位置没有更新",[19,107929,104802],{},[26,107931,107932],{"className":28,"code":106882,"language":30,"meta":31,"style":31},[33,107933,107934],{"__ignoreMap":31},[36,107935,107936],{"class":38,"line":39},[36,107937,106882],{"class":42},[1752,107939,107940],{"id":107940},"数组维度看不懂",[19,107942,107943],{},"打印模型维度:",[26,107945,107947],{"className":28,"code":107946,"language":30,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,107948,107949],{"__ignoreMap":31},[36,107950,107951,107953],{"class":38,"line":39},[36,107952,371],{"class":62},[36,107954,107955],{"class":42},"(model.nq, model.nv, model.nu)\n",[2698,107957,107958,107966],{},[2701,107959,107960],{},[2704,107961,107962,107964],{},[2707,107963,106913],{"align":26106},[2707,107965,103041],{"align":26106},[2744,107967,107968,107978,107988],{},[2704,107969,107970,107975],{},[2749,107971,107972],{"align":26106},[33,107973,107974],{},"nq",[2749,107976,107977],{"align":26106},"位置变量数量",[2704,107979,107980,107985],{},[2749,107981,107982],{"align":26106},[33,107983,107984],{},"nv",[2749,107986,107987],{"align":26106},"速度变量数量",[2704,107989,107990,107994],{},[2749,107991,107992],{"align":26106},[33,107993,104502],{},[2749,107995,107996],{"align":26106},"控制输入数量",[1752,107998,108000,108001,108003],{"id":107999},"误以为-qpos-一定等于关节数","误以为 ",[33,108002,106370],{}," 一定等于关节数",[19,108005,108006,108007,84872,108009,108011,108012,108014],{},"不是。例如 ",[33,108008,103960],{},[33,108010,106370],{}," 是 7 维，但 ",[33,108013,106700],{}," 是 6 维。",[1752,108016,108018,108019,108021],{"id":108017},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,108020,106370],{}," 的第几位",[19,108023,108024],{},"初学时可以先打印：",[26,108026,108028],{"className":28,"code":108027,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,108029,108030,108040,108050,108062],{"__ignoreMap":31},[36,108031,108032,108034,108036,108038],{"class":38,"line":39},[36,108033,371],{"class":62},[36,108035,92],{"class":42},[36,108037,103779],{"class":50},[36,108039,103782],{"class":42},[36,108041,108042,108044,108046,108048],{"class":38,"line":54},[36,108043,371],{"class":62},[36,108045,92],{"class":42},[36,108047,103791],{"class":50},[36,108049,103794],{"class":42},[36,108051,108052,108054,108056,108059],{"class":38,"line":66},[36,108053,371],{"class":62},[36,108055,92],{"class":42},[36,108057,108058],{"class":50},"\"qpos:\"",[36,108060,108061],{"class":42},", data.qpos)\n",[36,108063,108064,108066,108068,108071],{"class":38,"line":73},[36,108065,371],{"class":62},[36,108067,92],{"class":42},[36,108069,108070],{"class":50},"\"qvel:\"",[36,108072,108073],{"class":42},", data.qvel)\n",[19,108075,108076],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1752,108078,108079],{"id":108079},"仿真结果每次都一样",[19,108081,108082,108083,108085],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,108084,106370],{},"、目标点或控制输入。",[14,108087,104947],{"id":104946},[19,108089,108090,108091,26989],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,108092,35753],{},[650,108094,108095,108103,108108,108113],{},[653,108096,108097,108098,302,108100,108102],{},"用 ",[33,108099,103410],{},[33,108101,103413],{}," 读取状态。",[653,108104,108097,108105,108107],{},[33,108106,103416],{}," 写入控制。",[653,108109,108097,108110,108112],{},[33,108111,103555],{}," 推进时间。",[653,108114,108115,108116,108118],{},"手动改状态后用 ",[33,108117,106590],{}," 刷新派生量。",[19,108120,108121],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2467,108123,108124],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":108126},[108127,108128,108129,108136,108140,108141,108142,108152],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":108130},[108131,108133,108135],{"id":106894,"depth":66,"text":108132},"qpos、qvel、ctrl 是什么",{"id":106972,"depth":66,"text":108134},"mj_step 和 mj_forward 的区别",{"id":107061,"depth":66,"text":107062},{"id":103592,"depth":54,"text":103593,"children":108137},[108138,108139],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":108143},[108144,108146,108147,108149,108151],{"id":107923,"depth":66,"text":108145},"修改 data.qpos 后位置没有更新",{"id":107940,"depth":66,"text":107940},{"id":107999,"depth":66,"text":108148},"误以为 qpos 一定等于关节数",{"id":108017,"depth":66,"text":108150},"不知道某个元素在 qpos 的第几位",{"id":108079,"depth":66,"text":108079},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106658,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108159,"title":108160,"body":108161,"description":31,"extension":2494,"meta":109851,"navigation":69,"path":109852,"seo":109853,"stem":109854,"__hash__":109855},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108162,"toc":109827},[108163,108166,108168,108171,108173,108198,108201,108220,108223,108225,108227,108251,108253,108267,108269,108310,108312,108336,108338,108341,108375,108377,108390,108393,108461,108470,108474,108477,108511,108517,108520,108524,108563,108566,108586,108590,108633,108635,108664,108667,108673,108676,108678,109072,109074,109086,109088,109099,109101,109104,109133,109141,109144,109179,109182,109184,109192,109195,109197,109208,109218,109238,109241,109277,109289,109337,109356,109398,109411,109439,109444,109465,109475,109493,109496,109530,109533,109553,109556,109575,109581,109583,109586,109592,109598,109608,109611,109617,109626,109628,109674,109676,109682,109688,109691,109694,109714,109717,109723,109729,109731,109754,109757,109760,109769,109772,109810,109812,109815,109821,109824],[10,108164,108160],{"id":108165},"_4关节actuator-与力控制",[14,108167,102988],{"id":102987},[19,108169,108170],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108172,106671],{},[650,108174,108175,108181,108186,108190,108195],{},[653,108176,108177,108180],{},[33,108178,108179],{},"hinge"," 关节",[653,108182,108183],{},[33,108184,108185],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[653,108187,108188],{},[33,108189,103416],{},[653,108191,108192],{},[33,108193,108194],{},"ctrlrange",[653,108196,108197],{},"读取关节角和角速度",[19,108199,108200],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,108202,108204],{"className":28,"code":108203,"language":30,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,108205,108206],{"__ignoreMap":31},[36,108207,108208,108211,108213,108215,108217],{"class":38,"line":39},[36,108209,108210],{"class":42},"data.ctrl[",[36,108212,2751],{"class":62},[36,108214,6826],{"class":42},[36,108216,47],{"class":46},[36,108218,108219],{"class":62}," ...\n",[19,108221,108222],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108224,103111],{"id":103110},[19,108226,103114],{},[26,108228,108229],{"className":26192,"code":106727,"language":26194,"meta":31,"style":31},[33,108230,108231],{"__ignoreMap":31},[36,108232,108233,108235,108237,108239,108241,108243,108245,108247,108249],{"class":38,"line":39},[36,108234,26947],{"class":79},[36,108236,28685],{"class":50},[36,108238,26204],{"class":50},[36,108240,28770],{"class":62},[36,108242,106742],{"class":50},[36,108244,103139],{"class":50},[36,108246,104841],{"class":50},[36,108248,103155],{"class":50},[36,108250,106751],{"class":50},[19,108252,105159],{},[26,108254,108255],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},[33,108256,108257],{"__ignoreMap":31},[36,108258,108259,108261,108263,108265],{"class":38,"line":39},[36,108260,26201],{"class":79},[36,108262,26204],{"class":50},[36,108264,103271],{"class":50},[36,108266,103274],{"class":50},[19,108268,105176],{},[26,108270,108272],{"className":26192,"code":108271,"language":26194,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,108273,108274,108291,108300],{"__ignoreMap":31},[36,108275,108276,108278,108280,108282,108285,108287,108289],{"class":38,"line":39},[36,108277,32699],{"class":79},[36,108279,31545],{"class":50},[36,108281,27486],{"class":62},[36,108283,108284],{"class":50}," mujoco-control",[36,108286,103316],{"class":50},[36,108288,103319],{"class":62},[36,108290,103322],{"class":62},[36,108292,108293,108295,108297],{"class":38,"line":54},[36,108294,32699],{"class":79},[36,108296,103329],{"class":50},[36,108298,108299],{"class":50}," mujoco-control\n",[36,108301,108302,108304,108306,108308],{"class":38,"line":66},[36,108303,26201],{"class":79},[36,108305,26204],{"class":50},[36,108307,103271],{"class":50},[36,108309,103274],{"class":50},[19,108311,103345],{},[650,108313,108314,108320,108327,108333],{},[653,108315,108316,108319],{},[33,108317,108318],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[653,108321,108322,108324,108325,676],{},[33,108323,103416],{}," 长度等于 ",[33,108326,104498],{},[653,108328,84564,108329,108332],{},[33,108330,108331],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[653,108334,108335],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108337,103385],{"id":103384},[19,108339,108340],{},"关节决定 body 如何运动:",[26,108342,108344],{"className":55415,"code":108343,"language":55417,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,108345,108346],{"__ignoreMap":31},[36,108347,108348,108350,108352,108354,108356,108359,108361,108363,108365,108368,108370,108373],{"class":38,"line":39},[36,108349,3463],{"class":42},[36,108351,105296],{"class":53649},[36,108353,17295],{"class":79},[36,108355,47],{"class":42},[36,108357,108358],{"class":50},"\"hinge\"",[36,108360,56172],{"class":79},[36,108362,47],{"class":42},[36,108364,108358],{"class":50},[36,108366,108367],{"class":79}," axis",[36,108369,47],{"class":42},[36,108371,108372],{"class":50},"\"0 1 0\"",[36,108374,103484],{"class":42},[19,108376,105392],{},[650,108378,108379,108384,108387],{},[653,108380,108381,108382],{},"名字是 ",[33,108383,108179],{},[653,108385,108386],{},"类型是旋转关节",[653,108388,108389],{},"绕 y 轴旋转",[19,108391,108392],{},"actuator 决定如何施加控制:",[26,108394,108396],{"className":55415,"code":108395,"language":55417,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,108397,108398,108407,108453],{"__ignoreMap":31},[36,108399,108400,108402,108405],{"class":38,"line":39},[36,108401,3463],{"class":42},[36,108403,108404],{"class":53649},"actuator",[36,108406,53656],{"class":42},[36,108408,108409,108411,108414,108416,108418,108421,108424,108426,108428,108431,108433,108435,108438,108440,108443,108446,108448,108451],{"class":38,"line":54},[36,108410,54492],{"class":42},[36,108412,108413],{"class":53649},"motor",[36,108415,17295],{"class":79},[36,108417,47],{"class":42},[36,108419,108420],{"class":50},"\"hinge_motor\"",[36,108422,108423],{"class":79}," joint",[36,108425,47],{"class":42},[36,108427,108358],{"class":50},[36,108429,108430],{"class":79}," gear",[36,108432,47],{"class":42},[36,108434,6063],{"class":50},[36,108436,108437],{"class":79}," ctrlrange",[36,108439,47],{"class":42},[36,108441,108442],{"class":50},"\"-2 2\"",[36,108444,108445],{"class":79}," ctrllimited",[36,108447,47],{"class":42},[36,108449,108450],{"class":50},"\"true\"",[36,108452,103484],{"class":42},[36,108454,108455,108457,108459],{"class":38,"line":66},[36,108456,54133],{"class":42},[36,108458,108404],{"class":53649},[36,108460,53656],{"class":42},[19,108462,108463,108466,108467,676],{},[33,108464,108465],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,108468,108469],{},"[-2, 2]",[1752,108471,108473],{"id":108472},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108475,108476],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2698,108478,108479,108489],{},[2701,108480,108481],{},[2704,108482,108483,108485,108487],{},[2707,108484,28123],{"align":26106},[2707,108486,105036],{"align":26106},[2707,108488,103075],{"align":26106},[2744,108490,108491,108501],{},[2704,108492,108493,108495,108498],{},[2749,108494,105296],{"align":26106},[2749,108496,108497],{"align":26106},"定义能怎么动",[2749,108499,108500],{"align":26106},"门轴允许门旋转",[2704,108502,108503,108505,108508],{},[2749,108504,108404],{"align":26106},[2749,108506,108507],{"align":26106},"定义怎么施力或控制",[2749,108509,108510],{"align":26106},"人推门、马达带动门",[19,108512,108513,108514,108516],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,108515,103416],{}," 主动控制它。",[19,108518,108519],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1752,108521,108523],{"id":108522},"hinge-joint","hinge joint",[26,108525,108527],{"className":55415,"code":108526,"language":55417,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,108528,108529],{"__ignoreMap":31},[36,108530,108531,108533,108535,108537,108539,108541,108543,108545,108547,108549,108551,108553,108556,108558,108561],{"class":38,"line":39},[36,108532,3463],{"class":42},[36,108534,105296],{"class":53649},[36,108536,17295],{"class":79},[36,108538,47],{"class":42},[36,108540,108358],{"class":50},[36,108542,56172],{"class":79},[36,108544,47],{"class":42},[36,108546,108358],{"class":50},[36,108548,108367],{"class":79},[36,108550,47],{"class":42},[36,108552,108372],{"class":50},[36,108554,108555],{"class":79}," damping",[36,108557,47],{"class":42},[36,108559,108560],{"class":50},"\"0.1\"",[36,108562,103484],{"class":42},[19,108564,108565],{},"含义：",[650,108567,108568,108574,108580],{},[653,108569,108570,108573],{},[33,108571,108572],{},"type=\"hinge\"","：只能绕一个轴旋转。",[653,108575,108576,108579],{},[33,108577,108578],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[653,108581,108582,108585],{},[33,108583,108584],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1752,108587,108589],{"id":108588},"motor-actuator","motor actuator",[26,108591,108593],{"className":55415,"code":108592,"language":55417,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,108594,108595],{"__ignoreMap":31},[36,108596,108597,108599,108601,108603,108605,108607,108609,108611,108613,108615,108617,108619,108621,108623,108625,108627,108629,108631],{"class":38,"line":39},[36,108598,3463],{"class":42},[36,108600,108413],{"class":53649},[36,108602,17295],{"class":79},[36,108604,47],{"class":42},[36,108606,108420],{"class":50},[36,108608,108423],{"class":79},[36,108610,47],{"class":42},[36,108612,108358],{"class":50},[36,108614,108430],{"class":79},[36,108616,47],{"class":42},[36,108618,6063],{"class":50},[36,108620,108437],{"class":79},[36,108622,47],{"class":42},[36,108624,108442],{"class":50},[36,108626,108445],{"class":79},[36,108628,47],{"class":42},[36,108630,108450],{"class":50},[36,108632,103484],{"class":42},[19,108634,108565],{},[650,108636,108637,108646,108652,108658],{},[653,108638,108639,108642,108643,108645],{},[33,108640,108641],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,108644,108179],{}," 的关节上。",[653,108647,108648,108651],{},[33,108649,108650],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[653,108653,108654,108657],{},[33,108655,108656],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[653,108659,108660,108663],{},[33,108661,108662],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108665,108666],{},"简单理解：",[26,108668,108671],{"className":108669,"code":108670,"language":7570,"meta":31},[7568],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,108672,108670],{"__ignoreMap":31},[19,108674,108675],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108677,103593],{"id":103592},[26,108679,108681],{"className":28,"code":108680,"language":30,"meta":31,"style":31},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,108682,108683,108690,108694,108700,108710,108714,108718,108726,108731,108736,108740,108744,108749,108754,108758,108763,108768,108773,108778,108782,108786,108790,108795,108800,108805,108809,108813,108817,108821,108833,108845,108853,108857,108867,108877,108887,108891,108904,108917,108921,108938,108952,108987,108991,108995,109006,109021,109036,109048,109052,109056,109068],{"__ignoreMap":31},[36,108684,108685,108687],{"class":38,"line":39},[36,108686,1943],{"class":46},[36,108688,108689],{"class":42}," math\n",[36,108691,108692],{"class":38,"line":54},[36,108693,70],{"emptyLinePlaceholder":69},[36,108695,108696,108698],{"class":38,"line":66},[36,108697,1943],{"class":46},[36,108699,103641],{"class":42},[36,108701,108702,108704,108706,108708],{"class":38,"line":73},[36,108703,1943],{"class":46},[36,108705,33734],{"class":42},[36,108707,33737],{"class":46},[36,108709,33740],{"class":42},[36,108711,108712],{"class":38,"line":86},[36,108713,70],{"emptyLinePlaceholder":69},[36,108715,108716],{"class":38,"line":126},[36,108717,70],{"emptyLinePlaceholder":69},[36,108719,108720,108722,108724],{"class":38,"line":131},[36,108721,103654],{"class":62},[36,108723,15941],{"class":46},[36,108725,103659],{"class":50},[36,108727,108728],{"class":38,"line":225},[36,108729,108730],{"class":50},"\u003Cmujoco model=\"one_link_motor\">\n",[36,108732,108733],{"class":38,"line":235},[36,108734,108735],{"class":50},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,108737,108738],{"class":38,"line":377},[36,108739,70],{"emptyLinePlaceholder":69},[36,108741,108742],{"class":38,"line":617},[36,108743,103678],{"class":50},[36,108745,108746],{"class":38,"line":643},[36,108747,108748],{"class":50},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,108750,108751],{"class":38,"line":921},[36,108752,108753],{"class":50},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,108755,108756],{"class":38,"line":934},[36,108757,70],{"emptyLinePlaceholder":69},[36,108759,108760],{"class":38,"line":939},[36,108761,108762],{"class":50},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,108764,108765],{"class":38,"line":949},[36,108766,108767],{"class":50},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,108769,108770],{"class":38,"line":962},[36,108771,108772],{"class":50},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[36,108774,108775],{"class":38,"line":974},[36,108776,108777],{"class":50},"      \u003C\u002Fbody>\n",[36,108779,108780],{"class":38,"line":979},[36,108781,103707],{"class":50},[36,108783,108784],{"class":38,"line":994},[36,108785,103712],{"class":50},[36,108787,108788],{"class":38,"line":1006},[36,108789,70],{"emptyLinePlaceholder":69},[36,108791,108792],{"class":38,"line":1011},[36,108793,108794],{"class":50},"  \u003Cactuator>\n",[36,108796,108797],{"class":38,"line":1023},[36,108798,108799],{"class":50},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,108801,108802],{"class":38,"line":1028},[36,108803,108804],{"class":50},"  \u003C\u002Factuator>\n",[36,108806,108807],{"class":38,"line":1033},[36,108808,103717],{"class":50},[36,108810,108811],{"class":38,"line":1053},[36,108812,98039],{"class":50},[36,108814,108815],{"class":38,"line":1064},[36,108816,70],{"emptyLinePlaceholder":69},[36,108818,108819],{"class":38,"line":1075},[36,108820,70],{"emptyLinePlaceholder":69},[36,108822,108823,108825,108827,108829,108831],{"class":38,"line":2291},[36,108824,76],{"class":46},[36,108826,4366],{"class":79},[36,108828,103738],{"class":42},[36,108830,98027],{"class":62},[36,108832,153],{"class":42},[36,108834,108835,108837,108839,108841,108843],{"class":38,"line":2329},[36,108836,103747],{"class":42},[36,108838,47],{"class":46},[36,108840,103752],{"class":42},[36,108842,103654],{"class":62},[36,108844,123],{"class":42},[36,108846,108847,108849,108851],{"class":38,"line":2334},[36,108848,103761],{"class":42},[36,108850,47],{"class":46},[36,108852,103766],{"class":42},[36,108854,108855],{"class":38,"line":2339},[36,108856,70],{"emptyLinePlaceholder":69},[36,108858,108859,108861,108863,108865],{"class":38,"line":2365},[36,108860,89],{"class":62},[36,108862,92],{"class":42},[36,108864,103779],{"class":50},[36,108866,103782],{"class":42},[36,108868,108869,108871,108873,108875],{"class":38,"line":2373},[36,108870,89],{"class":62},[36,108872,92],{"class":42},[36,108874,103791],{"class":50},[36,108876,103794],{"class":42},[36,108878,108879,108881,108883,108885],{"class":38,"line":5001},[36,108880,89],{"class":62},[36,108882,92],{"class":42},[36,108884,103803],{"class":50},[36,108886,103806],{"class":42},[36,108888,108889],{"class":38,"line":5006},[36,108890,70],{"emptyLinePlaceholder":69},[36,108892,108893,108895,108898,108900,108902],{"class":38,"line":10328},[36,108894,5486],{"class":46},[36,108896,108897],{"class":42}," model.nu ",[36,108899,23318],{"class":46},[36,108901,27489],{"class":62},[36,108903,153],{"class":42},[36,108905,108906,108908,108910,108912,108915],{"class":38,"line":10352},[36,108907,105772],{"class":46},[36,108909,105775],{"class":62},[36,108911,92],{"class":42},[36,108913,108914],{"class":50},"\"expected exactly one actuator\"",[36,108916,123],{"class":42},[36,108918,108919],{"class":38,"line":10357},[36,108920,70],{"emptyLinePlaceholder":69},[36,108922,108923,108925,108927,108929,108931,108933,108936],{"class":38,"line":10363},[36,108924,5586],{"class":46},[36,108926,33970],{"class":42},[36,108928,28413],{"class":46},[36,108930,34796],{"class":62},[36,108932,92],{"class":42},[36,108934,108935],{"class":62},"2000",[36,108937,1147],{"class":42},[36,108939,108940,108943,108945,108947,108949],{"class":38,"line":10390},[36,108941,108942],{"class":42},"        t ",[36,108944,47],{"class":46},[36,108946,33970],{"class":42},[36,108948,3011],{"class":46},[36,108950,108951],{"class":42}," model.opt.timestep\n",[36,108953,108954,108957,108959,108961,108963,108966,108968,108971,108973,108975,108978,108980,108982,108984],{"class":38,"line":10395},[36,108955,108956],{"class":42},"        data.ctrl[",[36,108958,2751],{"class":62},[36,108960,6826],{"class":42},[36,108962,47],{"class":46},[36,108964,108965],{"class":62}," 1.5",[36,108967,8899],{"class":46},[36,108969,108970],{"class":42}," math.sin(",[36,108972,107599],{"class":62},[36,108974,8899],{"class":46},[36,108976,108977],{"class":42}," math.pi ",[36,108979,3011],{"class":46},[36,108981,64215],{"class":62},[36,108983,8899],{"class":46},[36,108985,108986],{"class":42}," t)\n",[36,108988,108989],{"class":38,"line":10401},[36,108990,103856],{"class":42},[36,108992,108993],{"class":38,"line":10413},[36,108994,70],{"emptyLinePlaceholder":69},[36,108996,108997,108999,109001,109004],{"class":38,"line":10425},[36,108998,89],{"class":62},[36,109000,92],{"class":42},[36,109002,109003],{"class":50},"\"time:\"",[36,109005,103818],{"class":42},[36,109007,109008,109010,109012,109015,109017,109019],{"class":38,"line":10437},[36,109009,89],{"class":62},[36,109011,92],{"class":42},[36,109013,109014],{"class":50},"\"joint qpos:\"",[36,109016,107269],{"class":42},[36,109018,2850],{"class":62},[36,109020,1914],{"class":42},[36,109022,109023,109025,109027,109030,109032,109034],{"class":38,"line":12095},[36,109024,89],{"class":62},[36,109026,92],{"class":42},[36,109028,109029],{"class":50},"\"joint qvel:\"",[36,109031,107285],{"class":42},[36,109033,2850],{"class":62},[36,109035,1914],{"class":42},[36,109037,109038,109040,109042,109045],{"class":38,"line":12120},[36,109039,89],{"class":62},[36,109041,92],{"class":42},[36,109043,109044],{"class":50},"\"last ctrl:\"",[36,109046,109047],{"class":42},", data.ctrl.copy())\n",[36,109049,109050],{"class":38,"line":12143},[36,109051,70],{"emptyLinePlaceholder":69},[36,109053,109054],{"class":38,"line":12167},[36,109055,70],{"emptyLinePlaceholder":69},[36,109057,109058,109060,109062,109064,109066],{"class":38,"line":12172},[36,109059,3948],{"class":46},[36,109061,33575],{"class":62},[36,109063,103899],{"class":46},[36,109065,103902],{"class":50},[36,109067,153],{"class":42},[36,109069,109070],{"class":38,"line":12177},[36,109071,103909],{"class":42},[19,109073,105910],{},[26,109075,109077],{"className":26192,"code":109076,"language":26194,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,109078,109079],{"__ignoreMap":31},[36,109080,109081,109083],{"class":38,"line":39},[36,109082,103623],{"class":79},[36,109084,109085],{"class":50}," ch4_joint_motor.py\n",[19,109087,104641],{},[26,109089,109091],{"className":26192,"code":109090,"language":26194,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,109092,109093],{"__ignoreMap":31},[36,109094,109095,109097],{"class":38,"line":39},[36,109096,30],{"class":79},[36,109098,109085],{"class":50},[1752,109100,103912],{"id":103912},[19,109102,109103],{},"检查 actuator 数量：",[26,109105,109107],{"className":28,"code":109106,"language":30,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,109108,109109,109121],{"__ignoreMap":31},[36,109110,109111,109113,109115,109117,109119],{"class":38,"line":39},[36,109112,3948],{"class":46},[36,109114,108897],{"class":42},[36,109116,23318],{"class":46},[36,109118,27489],{"class":62},[36,109120,153],{"class":42},[36,109122,109123,109125,109127,109129,109131],{"class":38,"line":54},[36,109124,106235],{"class":46},[36,109126,105775],{"class":62},[36,109128,92],{"class":42},[36,109130,108914],{"class":50},[36,109132,123],{"class":42},[19,109134,109135,109137,109138,109140],{},[33,109136,104498],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,109139,103416],{}," 长度应该是 1。",[19,109142,109143],{},"产生正弦控制信号：",[26,109145,109147],{"className":28,"code":109146,"language":30,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,109148,109149],{"__ignoreMap":31},[36,109150,109151,109153,109155,109157,109159,109161,109163,109165,109167,109169,109171,109173,109175,109177],{"class":38,"line":39},[36,109152,108210],{"class":42},[36,109154,2751],{"class":62},[36,109156,6826],{"class":42},[36,109158,47],{"class":46},[36,109160,108965],{"class":62},[36,109162,8899],{"class":46},[36,109164,108970],{"class":42},[36,109166,107599],{"class":62},[36,109168,8899],{"class":46},[36,109170,108977],{"class":42},[36,109172,3011],{"class":46},[36,109174,64215],{"class":62},[36,109176,8899],{"class":46},[36,109178,108986],{"class":42},[19,109180,109181],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109183,104013],{},[26,109185,109186],{"className":28,"code":106844,"language":30,"meta":31,"style":31},[33,109187,109188],{"__ignoreMap":31},[36,109189,109190],{"class":38,"line":39},[36,109191,106844],{"class":42},[19,109193,109194],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1752,109196,104048],{"id":104048},[26,109198,109200],{"className":28,"code":109199,"language":30,"meta":31,"style":31},"import math\n",[33,109201,109202],{"__ignoreMap":31},[36,109203,109204,109206],{"class":38,"line":39},[36,109205,1943],{"class":46},[36,109207,108689],{"class":42},[19,109209,109210,109211,302,109214,109217],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,109212,109213],{},"math.sin",[33,109215,109216],{},"math.pi"," 生成周期变化的控制信号。",[26,109219,109220],{"className":28,"code":106026,"language":30,"meta":31,"style":31},[33,109221,109222,109228],{"__ignoreMap":31},[36,109223,109224,109226],{"class":38,"line":39},[36,109225,1943],{"class":46},[36,109227,103641],{"class":42},[36,109229,109230,109232,109234,109236],{"class":38,"line":54},[36,109231,1943],{"class":46},[36,109233,33734],{"class":42},[36,109235,33737],{"class":46},[36,109237,33740],{"class":42},[19,109239,109240],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,109242,109243],{"className":55415,"code":108526,"language":55417,"meta":31,"style":31},[33,109244,109245],{"__ignoreMap":31},[36,109246,109247,109249,109251,109253,109255,109257,109259,109261,109263,109265,109267,109269,109271,109273,109275],{"class":38,"line":39},[36,109248,3463],{"class":42},[36,109250,105296],{"class":53649},[36,109252,17295],{"class":79},[36,109254,47],{"class":42},[36,109256,108358],{"class":50},[36,109258,56172],{"class":79},[36,109260,47],{"class":42},[36,109262,108358],{"class":50},[36,109264,108367],{"class":79},[36,109266,47],{"class":42},[36,109268,108372],{"class":50},[36,109270,108555],{"class":79},[36,109272,47],{"class":42},[36,109274,108560],{"class":50},[36,109276,103484],{"class":42},[19,109278,109279,109280,109282,109283,109285,109286,109288],{},"这行定义关节。",[33,109281,108179],{}," 表示旋转关节。",[33,109284,108578],{}," 表示绕 y 轴旋转。",[33,109287,108584],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,109290,109292],{"className":55415,"code":109291,"language":55417,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,109293,109294],{"__ignoreMap":31},[36,109295,109296,109298,109300,109302,109304,109307,109309,109311,109314,109317,109319,109322,109324,109326,109328,109330,109332,109335],{"class":38,"line":39},[36,109297,3463],{"class":42},[36,109299,103460],{"class":53649},[36,109301,17295],{"class":79},[36,109303,47],{"class":42},[36,109305,109306],{"class":50},"\"link_geom\"",[36,109308,56172],{"class":79},[36,109310,47],{"class":42},[36,109312,109313],{"class":50},"\"capsule\"",[36,109315,109316],{"class":79}," fromto",[36,109318,47],{"class":42},[36,109320,109321],{"class":50},"\"0 0 0 0 0 0.5\"",[36,109323,103476],{"class":79},[36,109325,47],{"class":42},[36,109327,106118],{"class":50},[36,109329,104341],{"class":79},[36,109331,47],{"class":42},[36,109333,109334],{"class":50},"\"0.5\"",[36,109336,103484],{"class":42},[19,109338,109339,109340,109342,109343,109345,109346,109349,109350,676,109353,109355],{},"这行定义摆杆的形状。",[33,109341,105505],{}," 是胶囊体，适合表示杆子。",[33,109344,105516],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,109347,109348],{},"(0,0,0)"," 延伸到 ",[33,109351,109352],{},"(0,0,0.5)",[33,109354,105510],{}," 是半径。",[26,109357,109358],{"className":55415,"code":108592,"language":55417,"meta":31,"style":31},[33,109359,109360],{"__ignoreMap":31},[36,109361,109362,109364,109366,109368,109370,109372,109374,109376,109378,109380,109382,109384,109386,109388,109390,109392,109394,109396],{"class":38,"line":39},[36,109363,3463],{"class":42},[36,109365,108413],{"class":53649},[36,109367,17295],{"class":79},[36,109369,47],{"class":42},[36,109371,108420],{"class":50},[36,109373,108423],{"class":79},[36,109375,47],{"class":42},[36,109377,108358],{"class":50},[36,109379,108430],{"class":79},[36,109381,47],{"class":42},[36,109383,6063],{"class":50},[36,109385,108437],{"class":79},[36,109387,47],{"class":42},[36,109389,108442],{"class":50},[36,109391,108445],{"class":79},[36,109393,47],{"class":42},[36,109395,108450],{"class":50},[36,109397,103484],{"class":42},[19,109399,109400,109401,109403,109404,109407,109408,109410],{},"这行定义电机。它作用在 ",[33,109402,108179],{}," 关节上。",[33,109405,109406],{},"gear"," 可以理解成放大倍数。",[33,109409,108194],{}," 限制控制输入范围。",[26,109412,109413],{"className":28,"code":109106,"language":30,"meta":31,"style":31},[33,109414,109415,109427],{"__ignoreMap":31},[36,109416,109417,109419,109421,109423,109425],{"class":38,"line":39},[36,109418,3948],{"class":46},[36,109420,108897],{"class":42},[36,109422,23318],{"class":46},[36,109424,27489],{"class":62},[36,109426,153],{"class":42},[36,109428,109429,109431,109433,109435,109437],{"class":38,"line":54},[36,109430,106235],{"class":46},[36,109432,105775],{"class":62},[36,109434,92],{"class":42},[36,109436,108914],{"class":50},[36,109438,123],{"class":42},[19,109440,109441,109443],{},[33,109442,104498],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,109445,109447],{"className":28,"code":109446,"language":30,"meta":31,"style":31},"for step in range(2000):\n",[33,109448,109449],{"__ignoreMap":31},[36,109450,109451,109453,109455,109457,109459,109461,109463],{"class":38,"line":39},[36,109452,5410],{"class":46},[36,109454,33970],{"class":42},[36,109456,28413],{"class":46},[36,109458,34796],{"class":62},[36,109460,92],{"class":42},[36,109462,108935],{"class":62},[36,109464,1147],{"class":42},[19,109466,109467,109468,109470,109471,109474],{},"循环 2000 步。这里没有用 ",[33,109469,3542],{},"，而是用 ",[33,109472,109473],{},"step","，因为后面要用当前步数计算时间。",[26,109476,109478],{"className":28,"code":109477,"language":30,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,109479,109480],{"__ignoreMap":31},[36,109481,109482,109485,109487,109489,109491],{"class":38,"line":39},[36,109483,109484],{"class":42},"t ",[36,109486,47],{"class":46},[36,109488,33970],{"class":42},[36,109490,3011],{"class":46},[36,109492,108951],{"class":42},[19,109494,109495],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,109497,109498],{"className":28,"code":109146,"language":30,"meta":31,"style":31},[33,109499,109500],{"__ignoreMap":31},[36,109501,109502,109504,109506,109508,109510,109512,109514,109516,109518,109520,109522,109524,109526,109528],{"class":38,"line":39},[36,109503,108210],{"class":42},[36,109505,2751],{"class":62},[36,109507,6826],{"class":42},[36,109509,47],{"class":46},[36,109511,108965],{"class":62},[36,109513,8899],{"class":46},[36,109515,108970],{"class":42},[36,109517,107599],{"class":62},[36,109519,8899],{"class":46},[36,109521,108977],{"class":42},[36,109523,3011],{"class":46},[36,109525,64215],{"class":62},[36,109527,8899],{"class":46},[36,109529,108986],{"class":42},[19,109531,109532],{},"这行给电机输入一个正弦波。拆开看：",[650,109534,109535,109541,109547],{},[653,109536,109537,109540],{},[33,109538,109539],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[653,109542,109543,109546],{},[33,109544,109545],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[653,109548,109549,109552],{},[33,109550,109551],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109554,109555],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,109557,109559],{"className":28,"code":109558,"language":30,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,109560,109561],{"__ignoreMap":31},[36,109562,109563,109565,109567,109569,109571,109573],{"class":38,"line":39},[36,109564,371],{"class":62},[36,109566,92],{"class":42},[36,109568,109014],{"class":50},[36,109570,107269],{"class":42},[36,109572,2850],{"class":62},[36,109574,1914],{"class":42},[19,109576,109577,109578,109580],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,109579,103410],{}," 只有一个数。",[14,109582,104656],{"id":104655},[19,109584,109585],{},"输出类似:",[26,109587,109590],{"className":109588,"code":109589,"language":7570,"meta":31},[7568],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,109591,109589],{"__ignoreMap":31},[19,109593,109594,109595,109597],{},"这里 ",[33,109596,108465],{}," 是电机输入。",[19,109599,109600,109603,109604,109607],{},[33,109601,109602],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,109605,109606],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109609,109610],{},"角度单位提示：",[26,109612,109615],{"className":109613,"code":109614,"language":7570,"meta":31},[7568],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,109616,109614],{"__ignoreMap":31},[19,109618,109619,109620,109622,109623,109625],{},"如果你看到 ",[33,109621,106370],{}," 是 ",[33,109624,37680],{},"，大约就是 28.6 度。",[14,109627,104688],{"id":104687},[650,109629,109630,109637,109640,109647,109650,109658,109666],{},[653,109631,104751,109632,104754,109634,676],{},[33,109633,108650],{},[33,109635,109636],{},"gear=\"5\"",[653,109638,109639],{},"重新运行，观察关节运动是否更剧烈。",[653,109641,104751,109642,104754,109644,676],{},[33,109643,108194],{},[33,109645,109646],{},"-0.2 0.2",[653,109648,109649],{},"重新运行，观察控制能力是否变弱。",[653,109651,109652,109653,109655,109656,676],{},"去掉 actuator，确认 ",[33,109654,104498],{}," 变成 ",[33,109657,2751],{},[653,109659,104751,109660,104754,109662,109665],{},[33,109661,108584],{},[33,109663,109664],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[653,109667,104751,109668,104754,109670,109673],{},[33,109669,108578],{},[33,109671,109672],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109675,104793],{"id":104792},[1752,109677,109679],{"id":109678},"indexerror-index-0-is-out-of-bounds",[33,109680,109681],{},"IndexError: index 0 is out of bounds",[19,109683,109684,109685,109687],{},"原因是 ",[33,109686,108331],{},"，没有 actuator。",[1752,109689,109690],{"id":109690},"关节几乎不动",[19,109692,109693],{},"可能原因:",[650,109695,109696,109701,109705,109711],{},[653,109697,109698,109700],{},[33,109699,109406],{}," 太小",[653,109702,109703,109700],{},[33,109704,108194],{},[653,109706,109707,109710],{},[33,109708,109709],{},"damping"," 太大",[653,109712,109713],{},"重力方向导致运动不明显",[1752,109715,109716],{"id":109716},"模型编译失败",[19,109718,109719,109720,109722],{},"检查 actuator 引用的 ",[33,109721,108641],{}," 是否存在，joint 名称是否拼写一致。",[1752,109724,109726,109728],{"id":109725},"datactrl0-写了但没有效果",[33,109727,108465],{}," 写了但没有效果",[19,109730,104915],{},[650,109732,109733,109738,109741,109746,109751],{},[653,109734,109735,109737],{},[33,109736,104498],{}," 是否大于 0。",[653,109739,109740],{},"motor 是否引用了正确 joint。",[653,109742,109743,109745],{},[33,109744,109406],{}," 是否太小。",[653,109747,109748,109750],{},[33,109749,108194],{}," 是否把输入限制得太小。",[653,109752,109753],{},"body 是否真的有可动 joint。",[1752,109755,109756],{"id":109756},"控制输入超过范围会怎样",[19,109758,109759],{},"如果设置了：",[26,109761,109763],{"className":55415,"code":109762,"language":55417,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,109764,109765],{"__ignoreMap":31},[36,109766,109767],{"class":38,"line":39},[36,109768,109762],{"class":42},[19,109770,109771],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,109773,109775],{"className":28,"code":109774,"language":30,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,109776,109777,109797],{"__ignoreMap":31},[36,109778,109779,109782,109784,109787,109789,109791,109793,109795],{"class":38,"line":39},[36,109780,109781],{"class":42},"action ",[36,109783,47],{"class":46},[36,109785,109786],{"class":42}," np.clip(action, ",[36,109788,3087],{"class":46},[36,109790,107599],{"class":62},[36,109792,630],{"class":42},[36,109794,107599],{"class":62},[36,109796,123],{"class":42},[36,109798,109799,109801,109803,109805,109807],{"class":38,"line":54},[36,109800,108210],{"class":42},[36,109802,2751],{"class":62},[36,109804,6826],{"class":42},[36,109806,47],{"class":46},[36,109808,109809],{"class":42}," action\n",[14,109811,104947],{"id":104946},[19,109813,109814],{},"这一章建立了控制任务的基本形式：",[26,109816,109819],{"className":109817,"code":109818,"language":7570,"meta":31},[7568],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,109820,109818],{"__ignoreMap":31},[19,109822,109823],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2467,109825,109826],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":109828},[109829,109830,109831,109836,109840,109841,109842,109850],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":109832},[109833,109834,109835],{"id":108472,"depth":66,"text":108473},{"id":108522,"depth":66,"text":108523},{"id":108588,"depth":66,"text":108589},{"id":103592,"depth":54,"text":103593,"children":109837},[109838,109839],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":109843},[109844,109845,109846,109847,109849],{"id":109678,"depth":66,"text":109681},{"id":109690,"depth":66,"text":109690},{"id":109716,"depth":66,"text":109716},{"id":109725,"depth":66,"text":109848},"data.ctrl[0] 写了但没有效果",{"id":109756,"depth":66,"text":109756},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108160,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109857,"title":109858,"body":109859,"description":31,"extension":2494,"meta":111768,"navigation":69,"path":111769,"seo":111770,"stem":111771,"__hash__":111772},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109860,"toc":111744},[109861,109864,109866,109869,109877,109880,109897,109900,109925,109928,109974,109976,109978,110033,110035,110054,110056,110099,110102,110119,110122,110138,110148,110155,110157,110160,110163,110197,110200,110248,110252,110255,110269,110278,110282,110285,110310,110313,110317,110330,110333,110339,110342,110357,110359,110362,110622,110624,110636,110639,110951,110953,110965,110967,110970,110985,110990,110993,111015,111018,111021,111055,111058,111062,111073,111076,111093,111096,111110,111117,111137,111144,111158,111161,111173,111188,111208,111211,111233,111236,111240,111255,111266,111281,111284,111314,111330,111359,111367,111391,111394,111412,111422,111434,111441,111450,111456,111465,111468,111470,111479,111482,111497,111499,111502,111513,111516,111527,111530,111548,111550,111567,111570,111598,111600,111604,111607,111637,111643,111646,111650,111658,111661,111663,111684,111687,111690,111706,111709,111725,111727,111730,111741],[10,109862,109858],{"id":109863},"_5viewer-可视化与-renderer-离屏渲染",[14,109865,102988],{"id":102987},[19,109867,109868],{},"本章掌握两类可视化方式:",[650,109870,109871,109874],{},[653,109872,109873],{},"交互式 viewer: 适合人工观察仿真",[653,109875,109876],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109878,109879],{},"使用官方接口:",[26,109881,109883],{"className":28,"code":109882,"language":30,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,109884,109885,109892],{"__ignoreMap":31},[36,109886,109887,109889],{"class":38,"line":39},[36,109888,1943],{"class":46},[36,109890,109891],{"class":42}," mujoco.viewer\n",[36,109893,109894],{"class":38,"line":54},[36,109895,109896],{"class":42},"mujoco.viewer.launch_passive(model, data)\n",[19,109898,109899],{},"以及:",[26,109901,109903],{"className":28,"code":109902,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,109904,109905,109915],{"__ignoreMap":31},[36,109906,109907,109910,109912],{"class":38,"line":39},[36,109908,109909],{"class":42},"renderer ",[36,109911,47],{"class":46},[36,109913,109914],{"class":42}," mujoco.Renderer(model)\n",[36,109916,109917,109920,109922],{"class":38,"line":54},[36,109918,109919],{"class":42},"image ",[36,109921,47],{"class":46},[36,109923,109924],{"class":42}," renderer.render()\n",[19,109926,109927],{},"新手建议先理解二者区别：",[2698,109929,109930,109946],{},[2701,109931,109932],{},[2704,109933,109934,109937,109940,109943],{},[2707,109935,109936],{"align":26106},"工具",[2707,109938,109939],{"align":26106},"用途",[2707,109941,109942],{"align":26106},"是否打开窗口",[2707,109944,109945],{"align":26106},"常见场景",[2744,109947,109948,109961],{},[2704,109949,109950,109953,109956,109958],{},[2749,109951,109952],{"align":26106},"Viewer",[2749,109954,109955],{"align":26106},"人眼实时观察仿真",[2749,109957,107004],{"align":26106},[2749,109959,109960],{"align":26106},"调试模型、看控制效果",[2704,109962,109963,109966,109969,109971],{},[2749,109964,109965],{"align":26106},"Renderer",[2749,109967,109968],{"align":26106},"生成图像数组",[2749,109970,107017],{"align":26106},[2749,109972,109973],{"align":26106},"保存图片、训练视觉策略、服务器批量采集",[14,109975,103111],{"id":103110},[19,109977,103114],{},[26,109979,109981],{"className":26192,"code":109980,"language":26194,"meta":31,"style":31},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[33,109982,109983,109995,110005,110013,110021],{"__ignoreMap":31},[36,109984,109985,109987,109989,109991,109993],{"class":38,"line":39},[36,109986,26947],{"class":79},[36,109988,28685],{"class":50},[36,109990,26204],{"class":50},[36,109992,28770],{"class":62},[36,109994,27049],{"class":62},[36,109996,109997,109999,110001,110003],{"class":38,"line":54},[36,109998,103149],{"class":50},[36,110000,103152],{"class":50},[36,110002,103155],{"class":50},[36,110004,27049],{"class":62},[36,110006,110007,110009,110011],{"class":38,"line":66},[36,110008,103162],{"class":50},[36,110010,103165],{"class":50},[36,110012,27049],{"class":62},[36,110014,110015,110017,110019],{"class":38,"line":73},[36,110016,103172],{"class":50},[36,110018,103175],{"class":50},[36,110020,27049],{"class":62},[36,110022,110023,110025,110027,110029,110031],{"class":38,"line":86},[36,110024,103182],{"class":50},[36,110026,103185],{"class":50},[36,110028,103188],{"class":50},[36,110030,103191],{"class":50},[36,110032,104856],{"class":50},[19,110034,105159],{},[26,110036,110038],{"className":26192,"code":110037,"language":26194,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,110039,110040],{"__ignoreMap":31},[36,110041,110042,110044,110046,110048,110051],{"class":38,"line":39},[36,110043,26201],{"class":79},[36,110045,26204],{"class":50},[36,110047,103271],{"class":50},[36,110049,110050],{"class":50}," numpy",[36,110052,110053],{"class":50}," pillow\n",[19,110055,105176],{},[26,110057,110059],{"className":26192,"code":110058,"language":26194,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,110060,110061,110078,110087],{"__ignoreMap":31},[36,110062,110063,110065,110067,110069,110072,110074,110076],{"class":38,"line":39},[36,110064,32699],{"class":79},[36,110066,31545],{"class":50},[36,110068,27486],{"class":62},[36,110070,110071],{"class":50}," mujoco-render",[36,110073,103316],{"class":50},[36,110075,103319],{"class":62},[36,110077,103322],{"class":62},[36,110079,110080,110082,110084],{"class":38,"line":54},[36,110081,32699],{"class":79},[36,110083,103329],{"class":50},[36,110085,110086],{"class":50}," mujoco-render\n",[36,110088,110089,110091,110093,110095,110097],{"class":38,"line":66},[36,110090,26201],{"class":79},[36,110092,26204],{"class":50},[36,110094,103271],{"class":50},[36,110096,110050],{"class":50},[36,110098,110053],{"class":50},[19,110100,110101],{},"离屏渲染后端:",[26,110103,110105],{"className":26192,"code":110104,"language":26194,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,110106,110107],{"__ignoreMap":31},[36,110108,110109,110111,110114,110116],{"class":38,"line":39},[36,110110,27413],{"class":46},[36,110112,110113],{"class":42}," MUJOCO_GL",[36,110115,47],{"class":46},[36,110117,110118],{"class":42},"egl\n",[19,110120,110121],{},"或:",[26,110123,110125],{"className":26192,"code":110124,"language":26194,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,110126,110127],{"__ignoreMap":31},[36,110128,110129,110131,110133,110135],{"class":38,"line":39},[36,110130,27413],{"class":46},[36,110132,110113],{"class":42},[36,110134,47],{"class":46},[36,110136,110137],{"class":42},"osmesa\n",[19,110139,110140,110141,110144,110145,676],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,110142,110143],{},"egl"," 失败，再尝试 ",[33,110146,110147],{},"osmesa",[19,110149,110150,110151,110154],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,110152,110153],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110156,103385],{"id":103384},[19,110158,110159],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110161,110162],{},"典型 viewer 流程:",[26,110164,110166],{"className":28,"code":110165,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,110167,110168,110181,110188,110192],{"__ignoreMap":31},[36,110169,110170,110173,110176,110178],{"class":38,"line":39},[36,110171,110172],{"class":46},"with",[36,110174,110175],{"class":42}," mujoco.viewer.launch_passive(model, data) ",[36,110177,33737],{"class":46},[36,110179,110180],{"class":42}," viewer:\n",[36,110182,110183,110185],{"class":38,"line":54},[36,110184,4644],{"class":46},[36,110186,110187],{"class":42}," viewer.is_running():\n",[36,110189,110190],{"class":38,"line":66},[36,110191,103856],{"class":42},[36,110193,110194],{"class":38,"line":73},[36,110195,110196],{"class":42},"        viewer.sync()\n",[19,110198,110199],{},"典型 renderer 流程:",[26,110201,110203],{"className":28,"code":110202,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,110204,110205,110231,110235,110240],{"__ignoreMap":31},[36,110206,110207,110209,110211,110214,110216,110218,110220,110222,110224,110226,110229],{"class":38,"line":39},[36,110208,109909],{"class":42},[36,110210,47],{"class":46},[36,110212,110213],{"class":42}," mujoco.Renderer(model, ",[36,110215,27352],{"class":7598},[36,110217,47],{"class":46},[36,110219,44691],{"class":62},[36,110221,630],{"class":42},[36,110223,27348],{"class":7598},[36,110225,47],{"class":46},[36,110227,110228],{"class":62},"640",[36,110230,123],{"class":42},[36,110232,110233],{"class":38,"line":54},[36,110234,106844],{"class":42},[36,110236,110237],{"class":38,"line":66},[36,110238,110239],{"class":42},"renderer.update_scene(data)\n",[36,110241,110242,110244,110246],{"class":38,"line":73},[36,110243,109919],{"class":42},[36,110245,47],{"class":46},[36,110247,109924],{"class":42},[1752,110249,110251],{"id":110250},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110253,110254],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,110256,110258],{"className":28,"code":110257,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,110259,110260,110264],{"__ignoreMap":31},[36,110261,110262],{"class":38,"line":39},[36,110263,106844],{"class":42},[36,110265,110266],{"class":38,"line":54},[36,110267,110268],{"class":42},"viewer.sync()\n",[19,110270,110271,110273,110274,110277],{},[33,110272,103555],{}," 负责算物理，",[33,110275,110276],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1752,110279,110281],{"id":110280},"为什么要-sleep","为什么要 sleep",[19,110283,110284],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,110286,110288],{"className":28,"code":110287,"language":30,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,110289,110290],{"__ignoreMap":31},[36,110291,110292,110295,110297,110300,110302,110305,110307],{"class":38,"line":39},[36,110293,110294],{"class":42},"sleep_time ",[36,110296,47],{"class":46},[36,110298,110299],{"class":42}," model.opt.timestep ",[36,110301,3087],{"class":46},[36,110303,110304],{"class":42}," (time.time() ",[36,110306,3087],{"class":46},[36,110308,110309],{"class":42}," step_start)\n",[19,110311,110312],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1752,110314,110316],{"id":110315},"renderer-输出是什么","renderer 输出是什么",[26,110318,110320],{"className":28,"code":110319,"language":30,"meta":31,"style":31},"image = renderer.render()\n",[33,110321,110322],{"__ignoreMap":31},[36,110323,110324,110326,110328],{"class":38,"line":39},[36,110325,109919],{"class":42},[36,110327,47],{"class":46},[36,110329,109924],{"class":42},[19,110331,110332],{},"得到的是 NumPy 数组，形状通常是：",[26,110334,110337],{"className":110335,"code":110336,"language":7570,"meta":31},[7568],"(height, width, 3)\n",[33,110338,110336],{"__ignoreMap":31},[19,110340,110341],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,110343,110345],{"className":28,"code":110344,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,110346,110347],{"__ignoreMap":31},[36,110348,110349,110352,110355],{"class":38,"line":39},[36,110350,110351],{"class":42},"Image.fromarray(image).save(",[36,110353,110354],{"class":50},"\"render_output.png\"",[36,110356,123],{"class":42},[14,110358,103593],{"id":103592},[19,110360,110361],{},"交互式 Viewer:",[26,110363,110365],{"className":28,"code":110364,"language":30,"meta":31,"style":31},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,110366,110367,110373,110377,110383,110389,110393,110397,110405,110410,110414,110418,110422,110427,110432,110436,110440,110444,110449,110453,110457,110461,110465,110469,110473,110485,110497,110505,110509,110519,110539,110549,110554,110559,110563,110580,110593,110598,110602,110606,110618],{"__ignoreMap":31},[36,110368,110369,110371],{"class":38,"line":39},[36,110370,1943],{"class":46},[36,110372,34183],{"class":42},[36,110374,110375],{"class":38,"line":54},[36,110376,70],{"emptyLinePlaceholder":69},[36,110378,110379,110381],{"class":38,"line":66},[36,110380,1943],{"class":46},[36,110382,103641],{"class":42},[36,110384,110385,110387],{"class":38,"line":73},[36,110386,1943],{"class":46},[36,110388,109891],{"class":42},[36,110390,110391],{"class":38,"line":86},[36,110392,70],{"emptyLinePlaceholder":69},[36,110394,110395],{"class":38,"line":126},[36,110396,70],{"emptyLinePlaceholder":69},[36,110398,110399,110401,110403],{"class":38,"line":131},[36,110400,103654],{"class":62},[36,110402,15941],{"class":46},[36,110404,103659],{"class":50},[36,110406,110407],{"class":38,"line":225},[36,110408,110409],{"class":50},"\u003Cmujoco model=\"viewer_demo\">\n",[36,110411,110412],{"class":38,"line":235},[36,110413,103669],{"class":50},[36,110415,110416],{"class":38,"line":377},[36,110417,70],{"emptyLinePlaceholder":69},[36,110419,110420],{"class":38,"line":617},[36,110421,103678],{"class":50},[36,110423,110424],{"class":38,"line":643},[36,110425,110426],{"class":50},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,110428,110429],{"class":38,"line":921},[36,110430,110431],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,110433,110434],{"class":38,"line":934},[36,110435,70],{"emptyLinePlaceholder":69},[36,110437,110438],{"class":38,"line":939},[36,110439,103692],{"class":50},[36,110441,110442],{"class":38,"line":949},[36,110443,103697],{"class":50},[36,110445,110446],{"class":38,"line":962},[36,110447,110448],{"class":50},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,110450,110451],{"class":38,"line":974},[36,110452,103707],{"class":50},[36,110454,110455],{"class":38,"line":979},[36,110456,103712],{"class":50},[36,110458,110459],{"class":38,"line":994},[36,110460,103717],{"class":50},[36,110462,110463],{"class":38,"line":1006},[36,110464,98039],{"class":50},[36,110466,110467],{"class":38,"line":1011},[36,110468,70],{"emptyLinePlaceholder":69},[36,110470,110471],{"class":38,"line":1023},[36,110472,70],{"emptyLinePlaceholder":69},[36,110474,110475,110477,110479,110481,110483],{"class":38,"line":1028},[36,110476,76],{"class":46},[36,110478,4366],{"class":79},[36,110480,103738],{"class":42},[36,110482,98027],{"class":62},[36,110484,153],{"class":42},[36,110486,110487,110489,110491,110493,110495],{"class":38,"line":1033},[36,110488,103747],{"class":42},[36,110490,47],{"class":46},[36,110492,103752],{"class":42},[36,110494,103654],{"class":62},[36,110496,123],{"class":42},[36,110498,110499,110501,110503],{"class":38,"line":1053},[36,110500,103761],{"class":42},[36,110502,47],{"class":46},[36,110504,103766],{"class":42},[36,110506,110507],{"class":38,"line":1064},[36,110508,70],{"emptyLinePlaceholder":69},[36,110510,110511,110513,110515,110517],{"class":38,"line":1075},[36,110512,36530],{"class":46},[36,110514,110175],{"class":42},[36,110516,33737],{"class":46},[36,110518,110180],{"class":42},[36,110520,110521,110524,110527,110529,110532,110534,110537],{"class":38,"line":2291},[36,110522,110523],{"class":46},"        while",[36,110525,110526],{"class":42}," viewer.is_running() ",[36,110528,32827],{"class":46},[36,110530,110531],{"class":42}," data.time ",[36,110533,3463],{"class":46},[36,110535,110536],{"class":62}," 5.0",[36,110538,153],{"class":42},[36,110540,110541,110544,110546],{"class":38,"line":2329},[36,110542,110543],{"class":42},"            step_start ",[36,110545,47],{"class":46},[36,110547,110548],{"class":42}," time.time()\n",[36,110550,110551],{"class":38,"line":2334},[36,110552,110553],{"class":42},"            mujoco.mj_step(model, data)\n",[36,110555,110556],{"class":38,"line":2339},[36,110557,110558],{"class":42},"            viewer.sync()\n",[36,110560,110561],{"class":38,"line":2365},[36,110562,70],{"emptyLinePlaceholder":69},[36,110564,110565,110568,110570,110572,110574,110576,110578],{"class":38,"line":2373},[36,110566,110567],{"class":42},"            sleep_time ",[36,110569,47],{"class":46},[36,110571,110299],{"class":42},[36,110573,3087],{"class":46},[36,110575,110304],{"class":42},[36,110577,3087],{"class":46},[36,110579,110309],{"class":42},[36,110581,110582,110584,110587,110589,110591],{"class":38,"line":5001},[36,110583,7025],{"class":46},[36,110585,110586],{"class":42}," sleep_time ",[36,110588,986],{"class":46},[36,110590,899],{"class":62},[36,110592,153],{"class":42},[36,110594,110595],{"class":38,"line":5006},[36,110596,110597],{"class":42},"                time.sleep(sleep_time)\n",[36,110599,110600],{"class":38,"line":10328},[36,110601,70],{"emptyLinePlaceholder":69},[36,110603,110604],{"class":38,"line":10352},[36,110605,70],{"emptyLinePlaceholder":69},[36,110607,110608,110610,110612,110614,110616],{"class":38,"line":10357},[36,110609,3948],{"class":46},[36,110611,33575],{"class":62},[36,110613,103899],{"class":46},[36,110615,103902],{"class":50},[36,110617,153],{"class":42},[36,110619,110620],{"class":38,"line":10363},[36,110621,103909],{"class":42},[19,110623,105910],{},[26,110625,110627],{"className":26192,"code":110626,"language":26194,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,110628,110629],{"__ignoreMap":31},[36,110630,110631,110633],{"class":38,"line":39},[36,110632,103623],{"class":79},[36,110634,110635],{"class":50}," ch5_viewer.py\n",[19,110637,110638],{},"离屏 Renderer 保存图片:",[26,110640,110642],{"className":28,"code":110641,"language":30,"meta":31,"style":31},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,110643,110644,110656,110660,110666,110676,110680,110684,110692,110697,110701,110705,110709,110713,110718,110722,110726,110730,110734,110738,110742,110746,110750,110754,110758,110762,110774,110786,110794,110819,110823,110839,110843,110847,110862,110871,110875,110889,110894,110899,110903,110915,110927,110931,110935,110947],{"__ignoreMap":31},[36,110645,110646,110648,110651,110653],{"class":38,"line":39},[36,110647,1937],{"class":46},[36,110649,110650],{"class":42}," pathlib ",[36,110652,1943],{"class":46},[36,110654,110655],{"class":42}," Path\n",[36,110657,110658],{"class":38,"line":54},[36,110659,70],{"emptyLinePlaceholder":69},[36,110661,110662,110664],{"class":38,"line":66},[36,110663,1943],{"class":46},[36,110665,103641],{"class":42},[36,110667,110668,110670,110672,110674],{"class":38,"line":73},[36,110669,1937],{"class":46},[36,110671,49612],{"class":62},[36,110673,49615],{"class":46},[36,110675,49618],{"class":42},[36,110677,110678],{"class":38,"line":86},[36,110679,70],{"emptyLinePlaceholder":69},[36,110681,110682],{"class":38,"line":126},[36,110683,70],{"emptyLinePlaceholder":69},[36,110685,110686,110688,110690],{"class":38,"line":131},[36,110687,103654],{"class":62},[36,110689,15941],{"class":46},[36,110691,103659],{"class":50},[36,110693,110694],{"class":38,"line":225},[36,110695,110696],{"class":50},"\u003Cmujoco model=\"renderer_demo\">\n",[36,110698,110699],{"class":38,"line":235},[36,110700,103669],{"class":50},[36,110702,110703],{"class":38,"line":377},[36,110704,70],{"emptyLinePlaceholder":69},[36,110706,110707],{"class":38,"line":617},[36,110708,103678],{"class":50},[36,110710,110711],{"class":38,"line":643},[36,110712,110426],{"class":50},[36,110714,110715],{"class":38,"line":921},[36,110716,110717],{"class":50},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,110719,110720],{"class":38,"line":934},[36,110721,110431],{"class":50},[36,110723,110724],{"class":38,"line":939},[36,110725,70],{"emptyLinePlaceholder":69},[36,110727,110728],{"class":38,"line":949},[36,110729,103692],{"class":50},[36,110731,110732],{"class":38,"line":962},[36,110733,103697],{"class":50},[36,110735,110736],{"class":38,"line":974},[36,110737,110448],{"class":50},[36,110739,110740],{"class":38,"line":979},[36,110741,103707],{"class":50},[36,110743,110744],{"class":38,"line":994},[36,110745,103712],{"class":50},[36,110747,110748],{"class":38,"line":1006},[36,110749,103717],{"class":50},[36,110751,110752],{"class":38,"line":1011},[36,110753,98039],{"class":50},[36,110755,110756],{"class":38,"line":1023},[36,110757,70],{"emptyLinePlaceholder":69},[36,110759,110760],{"class":38,"line":1028},[36,110761,70],{"emptyLinePlaceholder":69},[36,110763,110764,110766,110768,110770,110772],{"class":38,"line":1033},[36,110765,76],{"class":46},[36,110767,4366],{"class":79},[36,110769,103738],{"class":42},[36,110771,98027],{"class":62},[36,110773,153],{"class":42},[36,110775,110776,110778,110780,110782,110784],{"class":38,"line":1053},[36,110777,103747],{"class":42},[36,110779,47],{"class":46},[36,110781,103752],{"class":42},[36,110783,103654],{"class":62},[36,110785,123],{"class":42},[36,110787,110788,110790,110792],{"class":38,"line":1064},[36,110789,103761],{"class":42},[36,110791,47],{"class":46},[36,110793,103766],{"class":42},[36,110795,110796,110799,110801,110803,110805,110807,110809,110811,110813,110815,110817],{"class":38,"line":1075},[36,110797,110798],{"class":42},"    renderer ",[36,110800,47],{"class":46},[36,110802,110213],{"class":42},[36,110804,27352],{"class":7598},[36,110806,47],{"class":46},[36,110808,44691],{"class":62},[36,110810,630],{"class":42},[36,110812,27348],{"class":7598},[36,110814,47],{"class":46},[36,110816,110228],{"class":62},[36,110818,123],{"class":42},[36,110820,110821],{"class":38,"line":2291},[36,110822,70],{"emptyLinePlaceholder":69},[36,110824,110825,110827,110829,110831,110833,110835,110837],{"class":38,"line":2329},[36,110826,5586],{"class":46},[36,110828,103841],{"class":42},[36,110830,28413],{"class":46},[36,110832,34796],{"class":62},[36,110834,92],{"class":42},[36,110836,1070],{"class":62},[36,110838,1147],{"class":42},[36,110840,110841],{"class":38,"line":2334},[36,110842,103856],{"class":42},[36,110844,110845],{"class":38,"line":2339},[36,110846,70],{"emptyLinePlaceholder":69},[36,110848,110849,110852,110855,110857,110860],{"class":38,"line":2365},[36,110850,110851],{"class":42},"    renderer.update_scene(data, ",[36,110853,110854],{"class":7598},"camera",[36,110856,47],{"class":46},[36,110858,110859],{"class":50},"\"fixed_camera\"",[36,110861,123],{"class":42},[36,110863,110864,110867,110869],{"class":38,"line":2373},[36,110865,110866],{"class":42},"    image ",[36,110868,47],{"class":46},[36,110870,109924],{"class":42},[36,110872,110873],{"class":38,"line":5001},[36,110874,70],{"emptyLinePlaceholder":69},[36,110876,110877,110880,110882,110885,110887],{"class":38,"line":5006},[36,110878,110879],{"class":42},"    output_path ",[36,110881,47],{"class":46},[36,110883,110884],{"class":42}," Path(",[36,110886,110354],{"class":50},[36,110888,123],{"class":42},[36,110890,110891],{"class":38,"line":10328},[36,110892,110893],{"class":42},"    Image.fromarray(image).save(output_path)\n",[36,110895,110896],{"class":38,"line":10352},[36,110897,110898],{"class":42},"    renderer.close()\n",[36,110900,110901],{"class":38,"line":10357},[36,110902,70],{"emptyLinePlaceholder":69},[36,110904,110905,110907,110909,110912],{"class":38,"line":10363},[36,110906,89],{"class":62},[36,110908,92],{"class":42},[36,110910,110911],{"class":50},"\"saved:\"",[36,110913,110914],{"class":42},", output_path.resolve())\n",[36,110916,110917,110919,110921,110924],{"class":38,"line":10390},[36,110918,89],{"class":62},[36,110920,92],{"class":42},[36,110922,110923],{"class":50},"\"image shape:\"",[36,110925,110926],{"class":42},", image.shape)\n",[36,110928,110929],{"class":38,"line":10395},[36,110930,70],{"emptyLinePlaceholder":69},[36,110932,110933],{"class":38,"line":10401},[36,110934,70],{"emptyLinePlaceholder":69},[36,110936,110937,110939,110941,110943,110945],{"class":38,"line":10413},[36,110938,3948],{"class":46},[36,110940,33575],{"class":62},[36,110942,103899],{"class":46},[36,110944,103902],{"class":50},[36,110946,153],{"class":42},[36,110948,110949],{"class":38,"line":10425},[36,110950,103909],{"class":42},[19,110952,105910],{},[26,110954,110956],{"className":26192,"code":110955,"language":26194,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,110957,110958],{"__ignoreMap":31},[36,110959,110960,110962],{"class":38,"line":39},[36,110961,103623],{"class":79},[36,110963,110964],{"class":50}," ch5_renderer.py\n",[1752,110966,103912],{"id":103912},[19,110968,110969],{},"viewer 上下文：",[26,110971,110973],{"className":28,"code":110972,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,110974,110975],{"__ignoreMap":31},[36,110976,110977,110979,110981,110983],{"class":38,"line":39},[36,110978,110172],{"class":46},[36,110980,110175],{"class":42},[36,110982,33737],{"class":46},[36,110984,110180],{"class":42},[19,110986,110987,110989],{},[33,110988,110172],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110991,110992],{},"窗口循环：",[26,110994,110996],{"className":28,"code":110995,"language":30,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,110997,110998],{"__ignoreMap":31},[36,110999,111000,111003,111005,111007,111009,111011,111013],{"class":38,"line":39},[36,111001,111002],{"class":46},"while",[36,111004,110526],{"class":42},[36,111006,32827],{"class":46},[36,111008,110531],{"class":42},[36,111010,3463],{"class":46},[36,111012,110536],{"class":62},[36,111014,153],{"class":42},[19,111016,111017],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111019,111020],{},"固定相机：",[26,111022,111024],{"className":55415,"code":111023,"language":55417,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,111025,111026],{"__ignoreMap":31},[36,111027,111028,111030,111032,111034,111036,111038,111040,111042,111045,111048,111050,111053],{"class":38,"line":39},[36,111029,3463],{"class":42},[36,111031,110854],{"class":53649},[36,111033,17295],{"class":79},[36,111035,47],{"class":42},[36,111037,110859],{"class":50},[36,111039,103446],{"class":79},[36,111041,47],{"class":42},[36,111043,111044],{"class":50},"\"1.5 -2.0 1.2\"",[36,111046,111047],{"class":79}," xyaxes",[36,111049,47],{"class":42},[36,111051,111052],{"class":50},"\"1 0.75 0 0 0 1\"",[36,111054,103484],{"class":42},[19,111056,111057],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1752,111059,111061],{"id":111060},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,111063,111065],{"className":28,"code":111064,"language":30,"meta":31,"style":31},"import time\n",[33,111066,111067],{"__ignoreMap":31},[36,111068,111069,111071],{"class":38,"line":39},[36,111070,1943],{"class":46},[36,111072,34183],{"class":42},[19,111074,111075],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,111077,111079],{"className":28,"code":111078,"language":30,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,111080,111081,111087],{"__ignoreMap":31},[36,111082,111083,111085],{"class":38,"line":39},[36,111084,1943],{"class":46},[36,111086,103641],{"class":42},[36,111088,111089,111091],{"class":38,"line":54},[36,111090,1943],{"class":46},[36,111092,109891],{"class":42},[19,111094,111095],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,111097,111098],{"className":28,"code":110972,"language":30,"meta":31,"style":31},[33,111099,111100],{"__ignoreMap":31},[36,111101,111102,111104,111106,111108],{"class":38,"line":39},[36,111103,110172],{"class":46},[36,111105,110175],{"class":42},[36,111107,33737],{"class":46},[36,111109,110180],{"class":42},[19,111111,111112,111113,111116],{},"打开一个 viewer 窗口。",[33,111114,111115],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,111118,111119],{"className":28,"code":110995,"language":30,"meta":31,"style":31},[33,111120,111121],{"__ignoreMap":31},[36,111122,111123,111125,111127,111129,111131,111133,111135],{"class":38,"line":39},[36,111124,111002],{"class":46},[36,111126,110526],{"class":42},[36,111128,32827],{"class":46},[36,111130,110531],{"class":42},[36,111132,3463],{"class":46},[36,111134,110536],{"class":62},[36,111136,153],{"class":42},[19,111138,111139,111140,111143],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,111141,111142],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,111145,111147],{"className":28,"code":111146,"language":30,"meta":31,"style":31},"step_start = time.time()\n",[33,111148,111149],{"__ignoreMap":31},[36,111150,111151,111154,111156],{"class":38,"line":39},[36,111152,111153],{"class":42},"step_start ",[36,111155,47],{"class":46},[36,111157,110548],{"class":42},[19,111159,111160],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,111162,111163],{"className":28,"code":110257,"language":30,"meta":31,"style":31},[33,111164,111165,111169],{"__ignoreMap":31},[36,111166,111167],{"class":38,"line":39},[36,111168,106844],{"class":42},[36,111170,111171],{"class":38,"line":54},[36,111172,110268],{"class":42},[19,111174,111175,111177,111178,111180,111181,111183,111184,111187],{},[33,111176,103555],{}," 推进物理仿真。",[33,111179,110276],{}," 把最新的 ",[33,111182,35753],{}," 同步到窗口里显示。没有 ",[33,111185,111186],{},"sync()","，窗口可能看不到最新状态。",[26,111189,111190],{"className":28,"code":110287,"language":30,"meta":31,"style":31},[33,111191,111192],{"__ignoreMap":31},[36,111193,111194,111196,111198,111200,111202,111204,111206],{"class":38,"line":39},[36,111195,110294],{"class":42},[36,111197,47],{"class":46},[36,111199,110299],{"class":42},[36,111201,3087],{"class":46},[36,111203,110304],{"class":42},[36,111205,3087],{"class":46},[36,111207,110309],{"class":42},[19,111209,111210],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,111212,111214],{"className":28,"code":111213,"language":30,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,111215,111216,111228],{"__ignoreMap":31},[36,111217,111218,111220,111222,111224,111226],{"class":38,"line":39},[36,111219,3948],{"class":46},[36,111221,110586],{"class":42},[36,111223,986],{"class":46},[36,111225,899],{"class":62},[36,111227,153],{"class":42},[36,111229,111230],{"class":38,"line":54},[36,111231,111232],{"class":42},"    time.sleep(sleep_time)\n",[19,111234,111235],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1752,111237,111239],{"id":111238},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,111241,111243],{"className":28,"code":111242,"language":30,"meta":31,"style":31},"from pathlib import Path\n",[33,111244,111245],{"__ignoreMap":31},[36,111246,111247,111249,111251,111253],{"class":38,"line":39},[36,111248,1937],{"class":46},[36,111250,110650],{"class":42},[36,111252,1943],{"class":46},[36,111254,110655],{"class":42},[19,111256,111257,111258,111261,111262,111265],{},"导入 ",[33,111259,111260],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,111263,111264],{},"Path(\"render_output.png\")"," 更清晰。",[26,111267,111269],{"className":28,"code":111268,"language":30,"meta":31,"style":31},"from PIL import Image\n",[33,111270,111271],{"__ignoreMap":31},[36,111272,111273,111275,111277,111279],{"class":38,"line":39},[36,111274,1937],{"class":46},[36,111276,49612],{"class":62},[36,111278,49615],{"class":46},[36,111280,49618],{"class":42},[19,111282,111283],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,111285,111286],{"className":55415,"code":111023,"language":55417,"meta":31,"style":31},[33,111287,111288],{"__ignoreMap":31},[36,111289,111290,111292,111294,111296,111298,111300,111302,111304,111306,111308,111310,111312],{"class":38,"line":39},[36,111291,3463],{"class":42},[36,111293,110854],{"class":53649},[36,111295,17295],{"class":79},[36,111297,47],{"class":42},[36,111299,110859],{"class":50},[36,111301,103446],{"class":79},[36,111303,47],{"class":42},[36,111305,111044],{"class":50},[36,111307,111047],{"class":79},[36,111309,47],{"class":42},[36,111311,111052],{"class":50},[36,111313,103484],{"class":42},[19,111315,111316,111317,111319,111320,111322,111323,111326,111327,111329],{},"定义一个相机。",[33,111318,104],{}," 是相机名字。",[33,111321,106486],{}," 是相机在世界里的位置。",[33,111324,111325],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,111328,106486],{}," 来调视角。",[26,111331,111333],{"className":28,"code":111332,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,111334,111335],{"__ignoreMap":31},[36,111336,111337,111339,111341,111343,111345,111347,111349,111351,111353,111355,111357],{"class":38,"line":39},[36,111338,109909],{"class":42},[36,111340,47],{"class":46},[36,111342,110213],{"class":42},[36,111344,27352],{"class":7598},[36,111346,47],{"class":46},[36,111348,44691],{"class":62},[36,111350,630],{"class":42},[36,111352,27348],{"class":7598},[36,111354,47],{"class":46},[36,111356,110228],{"class":62},[36,111358,123],{"class":42},[19,111360,111361,111362,302,111364,111366],{},"创建离屏渲染器。",[33,111363,27352],{},[33,111365,27348],{}," 决定输出图片大小。",[26,111368,111369],{"className":28,"code":104016,"language":30,"meta":31,"style":31},[33,111370,111371,111387],{"__ignoreMap":31},[36,111372,111373,111375,111377,111379,111381,111383,111385],{"class":38,"line":39},[36,111374,5410],{"class":46},[36,111376,103841],{"class":42},[36,111378,28413],{"class":46},[36,111380,34796],{"class":62},[36,111382,92],{"class":42},[36,111384,1070],{"class":62},[36,111386,1147],{"class":42},[36,111388,111389],{"class":38,"line":54},[36,111390,104039],{"class":42},[19,111392,111393],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,111395,111397],{"className":28,"code":111396,"language":30,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,111398,111399],{"__ignoreMap":31},[36,111400,111401,111404,111406,111408,111410],{"class":38,"line":39},[36,111402,111403],{"class":42},"renderer.update_scene(data, ",[36,111405,110854],{"class":7598},[36,111407,47],{"class":46},[36,111409,110859],{"class":50},[36,111411,123],{"class":42},[19,111413,111414,111415,111417,111418,111421],{},"告诉 renderer：用当前 ",[33,111416,35753],{}," 的状态更新画面，并使用名为 ",[33,111419,111420],{},"fixed_camera"," 的相机视角。",[26,111423,111424],{"className":28,"code":110319,"language":30,"meta":31,"style":31},[33,111425,111426],{"__ignoreMap":31},[36,111427,111428,111430,111432],{"class":38,"line":39},[36,111429,109919],{"class":42},[36,111431,47],{"class":46},[36,111433,109924],{"class":42},[19,111435,111436,111437,111440],{},"真正渲染出图像。",[33,111438,111439],{},"image"," 是一个 NumPy 数组，不是文件。",[26,111442,111444],{"className":28,"code":111443,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,111445,111446],{"__ignoreMap":31},[36,111447,111448],{"class":38,"line":39},[36,111449,111443],{"class":42},[19,111451,111452,111453,676],{},"把数组转换成图片，并保存到 ",[33,111454,111455],{},"render_output.png",[26,111457,111459],{"className":28,"code":111458,"language":30,"meta":31,"style":31},"renderer.close()\n",[33,111460,111461],{"__ignoreMap":31},[36,111462,111463],{"class":38,"line":39},[36,111464,111458],{"class":42},[19,111466,111467],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111469,104656],{"id":104655},[19,111471,111472,111473,111475,111476,676],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,111474,111455],{},"，并输出图像数组形状，例如 ",[33,111477,111478],{},"(480, 640, 3)",[19,111480,111481],{},"如果图片里看不到方块，先检查：",[650,111483,111484,111487,111490],{},[653,111485,111486],{},"方块是否掉到相机视野外。",[653,111488,111489],{},"camera 位置是否合理。",[653,111491,111492,111493,111496],{},"是否在 ",[33,111494,111495],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111498,104688],{"id":104687},[19,111500,111501],{},"运行 viewer:",[26,111503,111505],{"className":26192,"code":111504,"language":26194,"meta":31,"style":31},"python ch5_viewer.py\n",[33,111506,111507],{"__ignoreMap":31},[36,111508,111509,111511],{"class":38,"line":39},[36,111510,30],{"class":79},[36,111512,110635],{"class":50},[19,111514,111515],{},"运行 renderer:",[26,111517,111519],{"className":26192,"code":111518,"language":26194,"meta":31,"style":31},"python ch5_renderer.py\n",[33,111520,111521],{"__ignoreMap":31},[36,111522,111523,111525],{"class":38,"line":39},[36,111524,30],{"class":79},[36,111526,110964],{"class":50},[19,111528,111529],{},"如果在服务器上运行:",[26,111531,111533],{"className":26192,"code":111532,"language":26194,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,111534,111535],{"__ignoreMap":31},[36,111536,111537,111539,111541,111543,111546],{"class":38,"line":39},[36,111538,110153],{"class":42},[36,111540,47],{"class":46},[36,111542,110143],{"class":50},[36,111544,111545],{"class":79}," python",[36,111547,110964],{"class":50},[19,111549,110121],{},[26,111551,111553],{"className":26192,"code":111552,"language":26194,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,111554,111555],{"__ignoreMap":31},[36,111556,111557,111559,111561,111563,111565],{"class":38,"line":39},[36,111558,110153],{"class":42},[36,111560,47],{"class":46},[36,111562,110147],{"class":50},[36,111564,111545],{"class":79},[36,111566,110964],{"class":50},[19,111568,111569],{},"再做几个练习：",[650,111571,111572,111579,111582,111588],{},[653,111573,111574,111575,111578],{},"把 renderer 分辨率改成 ",[33,111576,111577],{},"height=240, width=320","，观察输出 shape。",[653,111580,111581],{},"把方块颜色改成蓝色，重新保存图片。",[653,111583,111584,111585,111587],{},"把相机 ",[33,111586,106486],{}," 改远一点，观察画面中物体是否变小。",[653,111589,111590,111591,104754,111594,111597],{},"把 viewer 示例中的 ",[33,111592,111593],{},"data.time \u003C 5.0",[33,111595,111596],{},"data.time \u003C 20.0","，观察更长时间。",[14,111599,104793],{"id":104792},[1752,111601,111603],{"id":111602},"viewer-窗口打不开","viewer 窗口打不开",[19,111605,111606],{},"安装:",[26,111608,111610],{"className":26192,"code":111609,"language":26194,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,111611,111612],{"__ignoreMap":31},[36,111613,111614,111616,111618,111620,111622,111624,111626,111628,111630,111632,111634],{"class":38,"line":39},[36,111615,26947],{"class":79},[36,111617,28685],{"class":50},[36,111619,26204],{"class":50},[36,111621,28770],{"class":62},[36,111623,104846],{"class":50},[36,111625,103175],{"class":50},[36,111627,104851],{"class":50},[36,111629,103188],{"class":50},[36,111631,103194],{"class":50},[36,111633,103185],{"class":50},[36,111635,111636],{"class":50}," libXinerama\n",[1752,111638,111640],{"id":111639},"glfwerror",[33,111641,111642],{},"GLFWError",[19,111644,111645],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1752,111647,111649],{"id":111648},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111651,111652,111653,84881,111655,111657],{},"尝试 ",[33,111654,103377],{},[33,111656,103380],{},"。可能存在版本差异。",[1752,111659,111660],{"id":111660},"保存图片是黑的",[19,111662,104915],{},[650,111664,111665,111668,111671,111681],{},[653,111666,111667],{},"XML 里是否有 light。",[653,111669,111670],{},"相机是否对着模型。",[653,111672,111673,111674,111677,111678,676],{},"是否先 ",[33,111675,111676],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,111679,111680],{},"renderer.render()",[653,111682,111683],{},"物体是否已经掉出视野。",[1752,111685,111686],{"id":111686},"远程服务器没有显示器",[19,111688,111689],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,111691,111692],{"className":26192,"code":111532,"language":26194,"meta":31,"style":31},[33,111693,111694],{"__ignoreMap":31},[36,111695,111696,111698,111700,111702,111704],{"class":38,"line":39},[36,111697,110153],{"class":42},[36,111699,47],{"class":46},[36,111701,110143],{"class":50},[36,111703,111545],{"class":79},[36,111705,110964],{"class":50},[19,111707,111708],{},"如果 EGL 不可用，再尝试：",[26,111710,111711],{"className":26192,"code":111552,"language":26194,"meta":31,"style":31},[33,111712,111713],{"__ignoreMap":31},[36,111714,111715,111717,111719,111721,111723],{"class":38,"line":39},[36,111716,110153],{"class":42},[36,111718,47],{"class":46},[36,111720,110147],{"class":50},[36,111722,111545],{"class":79},[36,111724,110964],{"class":50},[14,111726,104947],{"id":104946},[19,111728,111729],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[650,111731,111732,111735,111738],{},[653,111733,111734],{},"先用 viewer 看模型和控制是否正常。",[653,111736,111737],{},"再用 renderer 保存图片或构造视觉观测。",[653,111739,111740],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2467,111742,111743],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":111745},[111746,111747,111748,111753,111758,111759,111760,111767],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":111749},[111750,111751,111752],{"id":110250,"depth":66,"text":110251},{"id":110280,"depth":66,"text":110281},{"id":110315,"depth":66,"text":110316},{"id":103592,"depth":54,"text":103593,"children":111754},[111755,111756,111757],{"id":103912,"depth":66,"text":103912},{"id":111060,"depth":66,"text":111061},{"id":111238,"depth":66,"text":111239},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":111761},[111762,111763,111764,111765,111766],{"id":111602,"depth":66,"text":111603},{"id":111639,"depth":66,"text":111642},{"id":111648,"depth":66,"text":111649},{"id":111660,"depth":66,"text":111660},{"id":111686,"depth":66,"text":111686},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109858,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111774,"title":111775,"body":111776,"description":31,"extension":2494,"meta":113687,"navigation":69,"path":113688,"seo":113689,"stem":113690,"__hash__":113691},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111777,"toc":113663},[111778,111781,111783,111786,111788,111807,111810,111816,111819,111821,111823,111847,111849,111863,111865,111906,111908,111919,111921,111924,111930,111933,111967,111970,112002,112005,112037,112041,112044,112084,112087,112093,112096,112102,112106,112109,112115,112118,112122,112125,112165,112167,112180,112183,112185,112767,112769,112781,112784,112795,112797,112800,112819,112831,112834,112855,112858,112861,112904,112907,112910,112930,112937,112939,112957,112972,112975,112981,112984,112990,113007,113014,113045,113056,113090,113101,113118,113127,113135,113140,113154,113157,113178,113184,113198,113203,113233,113243,113268,113276,113299,113302,113318,113321,113329,113335,113357,113370,113391,113400,113439,113450,113452,113455,113461,113464,113467,113473,113476,113496,113499,113501,113540,113542,113545,113553,113556,113559,113586,113589,113599,113605,113608,113614,113616,113622,113626,113629,113631,113634,113658,113661],[10,111779,111775],{"id":111780},"_6控制任务cartpole",[14,111782,102988],{"id":102987},[19,111784,111785],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111787,106671],{},[650,111789,111790,111793,111795,111798,111801,111804],{},[653,111791,111792],{},"slide joint",[653,111794,108523],{},[653,111796,111797],{},"cart force actuator",[653,111799,111800],{},"状态观测",[653,111802,111803],{},"简单控制循环",[653,111805,111806],{},"reward 设计雏形",[19,111808,111809],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,111811,111814],{"className":111812,"code":111813,"language":7570,"meta":31},[7568],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,111815,111813],{"__ignoreMap":31},[19,111817,111818],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111820,103111],{"id":103110},[19,111822,103114],{},[26,111824,111825],{"className":26192,"code":106727,"language":26194,"meta":31,"style":31},[33,111826,111827],{"__ignoreMap":31},[36,111828,111829,111831,111833,111835,111837,111839,111841,111843,111845],{"class":38,"line":39},[36,111830,26947],{"class":79},[36,111832,28685],{"class":50},[36,111834,26204],{"class":50},[36,111836,28770],{"class":62},[36,111838,106742],{"class":50},[36,111840,103139],{"class":50},[36,111842,104841],{"class":50},[36,111844,103155],{"class":50},[36,111846,106751],{"class":50},[19,111848,105159],{},[26,111850,111851],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},[33,111852,111853],{"__ignoreMap":31},[36,111854,111855,111857,111859,111861],{"class":38,"line":39},[36,111856,26201],{"class":79},[36,111858,26204],{"class":50},[36,111860,103271],{"class":50},[36,111862,103274],{"class":50},[19,111864,105176],{},[26,111866,111868],{"className":26192,"code":111867,"language":26194,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,111869,111870,111887,111896],{"__ignoreMap":31},[36,111871,111872,111874,111876,111878,111881,111883,111885],{"class":38,"line":39},[36,111873,32699],{"class":79},[36,111875,31545],{"class":50},[36,111877,27486],{"class":62},[36,111879,111880],{"class":50}," mujoco-cartpole",[36,111882,103316],{"class":50},[36,111884,103319],{"class":62},[36,111886,103322],{"class":62},[36,111888,111889,111891,111893],{"class":38,"line":54},[36,111890,32699],{"class":79},[36,111892,103329],{"class":50},[36,111894,111895],{"class":50}," mujoco-cartpole\n",[36,111897,111898,111900,111902,111904],{"class":38,"line":66},[36,111899,26201],{"class":79},[36,111901,26204],{"class":50},[36,111903,103271],{"class":50},[36,111905,103274],{"class":50},[19,111907,103345],{},[650,111909,111910,111913,111916],{},[653,111911,111912],{},"本章不依赖 Gymnasium。",[653,111914,111915],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[653,111917,111918],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111920,103385],{"id":103384},[19,111922,111923],{},"Cartpole 的模型结构:",[26,111925,111928],{"className":111926,"code":111927,"language":7570,"meta":31},[7568],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,111929,111927],{"__ignoreMap":31},[19,111931,111932],{},"小车通过 slide joint 左右移动:",[26,111934,111936],{"className":55415,"code":111935,"language":55417,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,111937,111938],{"__ignoreMap":31},[36,111939,111940,111942,111944,111946,111948,111951,111953,111955,111958,111960,111962,111965],{"class":38,"line":39},[36,111941,3463],{"class":42},[36,111943,105296],{"class":53649},[36,111945,17295],{"class":79},[36,111947,47],{"class":42},[36,111949,111950],{"class":50},"\"cart_x\"",[36,111952,56172],{"class":79},[36,111954,47],{"class":42},[36,111956,111957],{"class":50},"\"slide\"",[36,111959,108367],{"class":79},[36,111961,47],{"class":42},[36,111963,111964],{"class":50},"\"1 0 0\"",[36,111966,103484],{"class":42},[19,111968,111969],{},"杆子通过 hinge joint 旋转:",[26,111971,111973],{"className":55415,"code":111972,"language":55417,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,111974,111975],{"__ignoreMap":31},[36,111976,111977,111979,111981,111983,111985,111988,111990,111992,111994,111996,111998,112000],{"class":38,"line":39},[36,111978,3463],{"class":42},[36,111980,105296],{"class":53649},[36,111982,17295],{"class":79},[36,111984,47],{"class":42},[36,111986,111987],{"class":50},"\"pole_hinge\"",[36,111989,56172],{"class":79},[36,111991,47],{"class":42},[36,111993,108358],{"class":50},[36,111995,108367],{"class":79},[36,111997,47],{"class":42},[36,111999,108372],{"class":50},[36,112001,103484],{"class":42},[19,112003,112004],{},"控制力作用在小车 slide joint 上:",[26,112006,112008],{"className":55415,"code":112007,"language":55417,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,112009,112010],{"__ignoreMap":31},[36,112011,112012,112014,112016,112018,112020,112023,112025,112027,112029,112031,112033,112035],{"class":38,"line":39},[36,112013,3463],{"class":42},[36,112015,108413],{"class":53649},[36,112017,17295],{"class":79},[36,112019,47],{"class":42},[36,112021,112022],{"class":50},"\"cart_motor\"",[36,112024,108423],{"class":79},[36,112026,47],{"class":42},[36,112028,111950],{"class":50},[36,112030,108430],{"class":79},[36,112032,47],{"class":42},[36,112034,56664],{"class":50},[36,112036,103484],{"class":42},[1752,112038,112040],{"id":112039},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112042,112043],{},"这个简化模型有两个关节：",[2698,112045,112046,112057],{},[2701,112047,112048],{},[2704,112049,112050,112052,112054],{},[2707,112051,105099],{"align":26106},[2707,112053,26107],{"align":26106},[2707,112055,112056],{"align":26106},"对应状态",[2744,112058,112059,112072],{},[2704,112060,112061,112066,112069],{},[2749,112062,112063],{"align":26106},[33,112064,112065],{},"cart_x",[2749,112067,112068],{"align":26106},"slide",[2749,112070,112071],{"align":26106},"小车 x 位置",[2704,112073,112074,112079,112081],{},[2749,112075,112076],{"align":26106},[33,112077,112078],{},"pole_hinge",[2749,112080,108179],{"align":26106},[2749,112082,112083],{"align":26106},"杆子角度",[19,112085,112086],{},"所以：",[26,112088,112091],{"className":112089,"code":112090,"language":7570,"meta":31},[7568],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,112092,112090],{"__ignoreMap":31},[19,112094,112095],{},"把它们拼起来就是观测：",[26,112097,112100],{"className":112098,"code":112099,"language":7570,"meta":31},[7568],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,112101,112099],{"__ignoreMap":31},[1752,112103,112105],{"id":112104},"action-是什么","action 是什么",[19,112107,112108],{},"本章只有一个 actuator：",[26,112110,112113],{"className":112111,"code":112112,"language":7570,"meta":31},[7568],"data.ctrl[0] = action\n",[33,112114,112112],{"__ignoreMap":31},[19,112116,112117],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1752,112119,112121],{"id":112120},"reward-是什么","reward 是什么",[19,112123,112124],{},"奖励函数：",[26,112126,112128],{"className":28,"code":112127,"language":30,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,112129,112130],{"__ignoreMap":31},[36,112131,112132,112134,112137,112139,112141,112143,112146,112148,112151,112153,112155,112157,112160,112162],{"class":38,"line":39},[36,112133,19419],{"class":46},[36,112135,112136],{"class":62}," float",[36,112138,92],{"class":42},[36,112140,104743],{"class":62},[36,112142,54619],{"class":46},[36,112144,112145],{"class":62}," 0.1",[36,112147,8899],{"class":46},[36,112149,112150],{"class":42}," cart_x ",[36,112152,3011],{"class":46},[36,112154,112150],{"class":42},[36,112156,3087],{"class":46},[36,112158,112159],{"class":42}," pole_angle ",[36,112161,3011],{"class":46},[36,112163,112164],{"class":42}," pole_angle)\n",[19,112166,108565],{},[650,112168,112169,112174,112177],{},[653,112170,112171,112172,676],{},"基础奖励是 ",[33,112173,104743],{},[653,112175,112176],{},"小车离中心越远，扣分越多。",[653,112178,112179],{},"杆子角度越大，扣分越多。",[19,112181,112182],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112184,103593],{"id":103592},[26,112186,112188],{"className":28,"code":112187,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,112189,112190,112196,112206,112210,112214,112222,112227,112231,112235,112239,112244,112248,112253,112258,112263,112267,112272,112277,112282,112286,112290,112294,112298,112302,112307,112311,112315,112319,112323,112327,112337,112344,112348,112352,112366,112380,112393,112423,112427,112431,112443,112455,112463,112467,112480,112484,112488,112497,112501,112517,112527,112540,112553,112557,112580,112598,112602,112614,112618,112622,112632,112642,112646,112662,112703,112707,112727,112743,112747,112751,112763],{"__ignoreMap":31},[36,112191,112192,112194],{"class":38,"line":39},[36,112193,1943],{"class":46},[36,112195,103641],{"class":42},[36,112197,112198,112200,112202,112204],{"class":38,"line":54},[36,112199,1943],{"class":46},[36,112201,33734],{"class":42},[36,112203,33737],{"class":46},[36,112205,33740],{"class":42},[36,112207,112208],{"class":38,"line":66},[36,112209,70],{"emptyLinePlaceholder":69},[36,112211,112212],{"class":38,"line":73},[36,112213,70],{"emptyLinePlaceholder":69},[36,112215,112216,112218,112220],{"class":38,"line":86},[36,112217,103654],{"class":62},[36,112219,15941],{"class":46},[36,112221,103659],{"class":50},[36,112223,112224],{"class":38,"line":126},[36,112225,112226],{"class":50},"\u003Cmujoco model=\"cartpole\">\n",[36,112228,112229],{"class":38,"line":131},[36,112230,103669],{"class":50},[36,112232,112233],{"class":38,"line":225},[36,112234,70],{"emptyLinePlaceholder":69},[36,112236,112237],{"class":38,"line":235},[36,112238,103678],{"class":50},[36,112240,112241],{"class":38,"line":377},[36,112242,112243],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,112245,112246],{"class":38,"line":617},[36,112247,70],{"emptyLinePlaceholder":69},[36,112249,112250],{"class":38,"line":643},[36,112251,112252],{"class":50},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,112254,112255],{"class":38,"line":921},[36,112256,112257],{"class":50},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,112259,112260],{"class":38,"line":934},[36,112261,112262],{"class":50},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,112264,112265],{"class":38,"line":939},[36,112266,70],{"emptyLinePlaceholder":69},[36,112268,112269],{"class":38,"line":949},[36,112270,112271],{"class":50},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,112273,112274],{"class":38,"line":962},[36,112275,112276],{"class":50},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,112278,112279],{"class":38,"line":974},[36,112280,112281],{"class":50},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[36,112283,112284],{"class":38,"line":979},[36,112285,108777],{"class":50},[36,112287,112288],{"class":38,"line":994},[36,112289,103707],{"class":50},[36,112291,112292],{"class":38,"line":1006},[36,112293,103712],{"class":50},[36,112295,112296],{"class":38,"line":1011},[36,112297,70],{"emptyLinePlaceholder":69},[36,112299,112300],{"class":38,"line":1023},[36,112301,108794],{"class":50},[36,112303,112304],{"class":38,"line":1028},[36,112305,112306],{"class":50},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112308,112309],{"class":38,"line":1033},[36,112310,108804],{"class":50},[36,112312,112313],{"class":38,"line":1053},[36,112314,103717],{"class":50},[36,112316,112317],{"class":38,"line":1064},[36,112318,98039],{"class":50},[36,112320,112321],{"class":38,"line":1075},[36,112322,70],{"emptyLinePlaceholder":69},[36,112324,112325],{"class":38,"line":2291},[36,112326,70],{"emptyLinePlaceholder":69},[36,112328,112329,112331,112334],{"class":38,"line":2329},[36,112330,76],{"class":46},[36,112332,112333],{"class":79}," get_observation",[36,112335,112336],{"class":42},"(data: mujoco.MjData) -> np.ndarray:\n",[36,112338,112339,112341],{"class":38,"line":2334},[36,112340,6474],{"class":46},[36,112342,112343],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,112345,112346],{"class":38,"line":2339},[36,112347,70],{"emptyLinePlaceholder":69},[36,112349,112350],{"class":38,"line":2365},[36,112351,70],{"emptyLinePlaceholder":69},[36,112353,112354,112356,112359,112362,112364],{"class":38,"line":2373},[36,112355,76],{"class":46},[36,112357,112358],{"class":79}," compute_reward",[36,112360,112361],{"class":42},"(obs: np.ndarray) -> ",[36,112363,2605],{"class":62},[36,112365,153],{"class":42},[36,112367,112368,112371,112373,112376,112378],{"class":38,"line":5001},[36,112369,112370],{"class":42},"    cart_x ",[36,112372,47],{"class":46},[36,112374,112375],{"class":42}," obs[",[36,112377,2751],{"class":62},[36,112379,35598],{"class":42},[36,112381,112382,112385,112387,112389,112391],{"class":38,"line":5006},[36,112383,112384],{"class":42},"    pole_angle ",[36,112386,47],{"class":46},[36,112388,112375],{"class":42},[36,112390,1906],{"class":62},[36,112392,35598],{"class":42},[36,112394,112395,112397,112399,112401,112403,112405,112407,112409,112411,112413,112415,112417,112419,112421],{"class":38,"line":10328},[36,112396,6474],{"class":46},[36,112398,112136],{"class":62},[36,112400,92],{"class":42},[36,112402,104743],{"class":62},[36,112404,54619],{"class":46},[36,112406,112145],{"class":62},[36,112408,8899],{"class":46},[36,112410,112150],{"class":42},[36,112412,3011],{"class":46},[36,112414,112150],{"class":42},[36,112416,3087],{"class":46},[36,112418,112159],{"class":42},[36,112420,3011],{"class":46},[36,112422,112164],{"class":42},[36,112424,112425],{"class":38,"line":10352},[36,112426,70],{"emptyLinePlaceholder":69},[36,112428,112429],{"class":38,"line":10357},[36,112430,70],{"emptyLinePlaceholder":69},[36,112432,112433,112435,112437,112439,112441],{"class":38,"line":10363},[36,112434,76],{"class":46},[36,112436,4366],{"class":79},[36,112438,103738],{"class":42},[36,112440,98027],{"class":62},[36,112442,153],{"class":42},[36,112444,112445,112447,112449,112451,112453],{"class":38,"line":10390},[36,112446,103747],{"class":42},[36,112448,47],{"class":46},[36,112450,103752],{"class":42},[36,112452,103654],{"class":62},[36,112454,123],{"class":42},[36,112456,112457,112459,112461],{"class":38,"line":10395},[36,112458,103761],{"class":42},[36,112460,47],{"class":46},[36,112462,103766],{"class":42},[36,112464,112465],{"class":38,"line":10401},[36,112466,70],{"emptyLinePlaceholder":69},[36,112468,112469,112471,112473,112475,112477],{"class":38,"line":10413},[36,112470,107408],{"class":42},[36,112472,1906],{"class":62},[36,112474,6826],{"class":42},[36,112476,47],{"class":46},[36,112478,112479],{"class":62}," 0.1\n",[36,112481,112482],{"class":38,"line":10425},[36,112483,107421],{"class":42},[36,112485,112486],{"class":38,"line":10437},[36,112487,70],{"emptyLinePlaceholder":69},[36,112489,112490,112493,112495],{"class":38,"line":12095},[36,112491,112492],{"class":42},"    total_reward ",[36,112494,47],{"class":46},[36,112496,107100],{"class":62},[36,112498,112499],{"class":38,"line":12120},[36,112500,70],{"emptyLinePlaceholder":69},[36,112502,112503,112505,112507,112509,112511,112513,112515],{"class":38,"line":12143},[36,112504,5586],{"class":46},[36,112506,33970],{"class":42},[36,112508,28413],{"class":46},[36,112510,34796],{"class":62},[36,112512,92],{"class":42},[36,112514,1048],{"class":62},[36,112516,1147],{"class":42},[36,112518,112519,112522,112524],{"class":38,"line":12167},[36,112520,112521],{"class":42},"        obs ",[36,112523,47],{"class":46},[36,112525,112526],{"class":42}," get_observation(data)\n",[36,112528,112529,112532,112534,112536,112538],{"class":38,"line":12172},[36,112530,112531],{"class":42},"        pole_angle ",[36,112533,47],{"class":46},[36,112535,112375],{"class":42},[36,112537,1906],{"class":62},[36,112539,35598],{"class":42},[36,112541,112542,112545,112547,112549,112551],{"class":38,"line":12177},[36,112543,112544],{"class":42},"        pole_angular_velocity ",[36,112546,47],{"class":46},[36,112548,112375],{"class":42},[36,112550,2634],{"class":62},[36,112552,35598],{"class":42},[36,112554,112555],{"class":38,"line":12182},[36,112556,70],{"emptyLinePlaceholder":69},[36,112558,112559,112562,112564,112567,112569,112571,112573,112575,112577],{"class":38,"line":12191},[36,112560,112561],{"class":42},"        action ",[36,112563,47],{"class":46},[36,112565,112566],{"class":62}," 2.0",[36,112568,8899],{"class":46},[36,112570,112159],{"class":42},[36,112572,1885],{"class":46},[36,112574,64215],{"class":62},[36,112576,8899],{"class":46},[36,112578,112579],{"class":42}," pole_angular_velocity\n",[36,112581,112582,112584,112586,112588,112590,112592,112594,112596],{"class":38,"line":12196},[36,112583,112561],{"class":42},[36,112585,47],{"class":46},[36,112587,109786],{"class":42},[36,112589,3087],{"class":46},[36,112591,104743],{"class":62},[36,112593,630],{"class":42},[36,112595,104743],{"class":62},[36,112597,123],{"class":42},[36,112599,112600],{"class":38,"line":12202},[36,112601,70],{"emptyLinePlaceholder":69},[36,112603,112604,112606,112608,112610,112612],{"class":38,"line":12223},[36,112605,108956],{"class":42},[36,112607,2751],{"class":62},[36,112609,6826],{"class":42},[36,112611,47],{"class":46},[36,112613,109809],{"class":42},[36,112615,112616],{"class":38,"line":12229},[36,112617,103856],{"class":42},[36,112619,112620],{"class":38,"line":12243},[36,112621,70],{"emptyLinePlaceholder":69},[36,112623,112624,112627,112629],{"class":38,"line":12249},[36,112625,112626],{"class":42},"        reward ",[36,112628,47],{"class":46},[36,112630,112631],{"class":42}," compute_reward(get_observation(data))\n",[36,112633,112634,112637,112639],{"class":38,"line":12276},[36,112635,112636],{"class":42},"        total_reward ",[36,112638,928],{"class":46},[36,112640,112641],{"class":42}," reward\n",[36,112643,112644],{"class":38,"line":12285},[36,112645,70],{"emptyLinePlaceholder":69},[36,112647,112648,112650,112652,112654,112656,112658,112660],{"class":38,"line":12291},[36,112649,890],{"class":46},[36,112651,33970],{"class":42},[36,112653,2884],{"class":46},[36,112655,8136],{"class":62},[36,112657,103899],{"class":46},[36,112659,899],{"class":62},[36,112661,153],{"class":42},[36,112663,112664,112666,112668,112671,112674,112677,112680,112682,112685,112688,112690,112692,112694,112696,112699,112701],{"class":38,"line":12299},[36,112665,906],{"class":62},[36,112667,92],{"class":42},[36,112669,112670],{"class":50},"\"step:\"",[36,112672,112673],{"class":42},", step, ",[36,112675,112676],{"class":50},"\"obs:\"",[36,112678,112679],{"class":42},", np.round(obs, ",[36,112681,2634],{"class":62},[36,112683,112684],{"class":42},"), ",[36,112686,112687],{"class":50},"\"action:\"",[36,112689,630],{"class":42},[36,112691,34371],{"class":62},[36,112693,92],{"class":42},[36,112695,2605],{"class":62},[36,112697,112698],{"class":42},"(action), ",[36,112700,2634],{"class":62},[36,112702,1914],{"class":42},[36,112704,112705],{"class":38,"line":12304},[36,112706,70],{"emptyLinePlaceholder":69},[36,112708,112709,112711,112713,112716,112718,112720,112723,112725],{"class":38,"line":18977},[36,112710,89],{"class":62},[36,112712,92],{"class":42},[36,112714,112715],{"class":50},"\"total_reward:\"",[36,112717,630],{"class":42},[36,112719,34371],{"class":62},[36,112721,112722],{"class":42},"(total_reward, ",[36,112724,2634],{"class":62},[36,112726,1914],{"class":42},[36,112728,112729,112731,112733,112736,112739,112741],{"class":38,"line":18983},[36,112730,89],{"class":62},[36,112732,92],{"class":42},[36,112734,112735],{"class":50},"\"final obs:\"",[36,112737,112738],{"class":42},", np.round(get_observation(data), ",[36,112740,2634],{"class":62},[36,112742,1914],{"class":42},[36,112744,112745],{"class":38,"line":19006},[36,112746,70],{"emptyLinePlaceholder":69},[36,112748,112749],{"class":38,"line":19012},[36,112750,70],{"emptyLinePlaceholder":69},[36,112752,112753,112755,112757,112759,112761],{"class":38,"line":19035},[36,112754,3948],{"class":46},[36,112756,33575],{"class":62},[36,112758,103899],{"class":46},[36,112760,103902],{"class":50},[36,112762,153],{"class":42},[36,112764,112765],{"class":38,"line":19049},[36,112766,103909],{"class":42},[19,112768,105910],{},[26,112770,112772],{"className":26192,"code":112771,"language":26194,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,112773,112774],{"__ignoreMap":31},[36,112775,112776,112778],{"class":38,"line":39},[36,112777,103623],{"class":79},[36,112779,112780],{"class":50}," ch6_cartpole.py\n",[19,112782,112783],{},"运行：",[26,112785,112787],{"className":26192,"code":112786,"language":26194,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,112788,112789],{"__ignoreMap":31},[36,112790,112791,112793],{"class":38,"line":39},[36,112792,30],{"class":79},[36,112794,112780],{"class":50},[1752,112796,103912],{"id":103912},[19,112798,112799],{},"构造观测：",[26,112801,112803],{"className":28,"code":112802,"language":30,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,112804,112805,112813],{"__ignoreMap":31},[36,112806,112807,112809,112811],{"class":38,"line":39},[36,112808,76],{"class":46},[36,112810,112333],{"class":79},[36,112812,112336],{"class":42},[36,112814,112815,112817],{"class":38,"line":54},[36,112816,6474],{"class":46},[36,112818,112343],{"class":42},[19,112820,112821,112824,112825,112827,112828,112830],{},[33,112822,112823],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,112826,106370],{}," 2 维，",[33,112829,106700],{}," 2 维，所以 obs 是 4 维。",[19,112832,112833],{},"设置初始角度：",[26,112835,112837],{"className":28,"code":112836,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,112838,112839,112851],{"__ignoreMap":31},[36,112840,112841,112843,112845,112847,112849],{"class":38,"line":39},[36,112842,107038],{"class":42},[36,112844,1906],{"class":62},[36,112846,6826],{"class":42},[36,112848,47],{"class":46},[36,112850,112479],{"class":62},[36,112852,112853],{"class":38,"line":54},[36,112854,106882],{"class":42},[19,112856,112857],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112859,112860],{},"简单反馈控制：",[26,112862,112864],{"className":28,"code":112863,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,112865,112866,112886],{"__ignoreMap":31},[36,112867,112868,112870,112872,112874,112876,112878,112880,112882,112884],{"class":38,"line":39},[36,112869,109781],{"class":42},[36,112871,47],{"class":46},[36,112873,112566],{"class":62},[36,112875,8899],{"class":46},[36,112877,112159],{"class":42},[36,112879,1885],{"class":46},[36,112881,64215],{"class":62},[36,112883,8899],{"class":46},[36,112885,112579],{"class":42},[36,112887,112888,112890,112892,112894,112896,112898,112900,112902],{"class":38,"line":54},[36,112889,109781],{"class":42},[36,112891,47],{"class":46},[36,112893,109786],{"class":42},[36,112895,3087],{"class":46},[36,112897,104743],{"class":62},[36,112899,630],{"class":42},[36,112901,104743],{"class":62},[36,112903,123],{"class":42},[19,112905,112906],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112908,112909],{},"限制动作：",[26,112911,112913],{"className":28,"code":112912,"language":30,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,112914,112915],{"__ignoreMap":31},[36,112916,112917,112920,112922,112924,112926,112928],{"class":38,"line":39},[36,112918,112919],{"class":42},"np.clip(action, ",[36,112921,3087],{"class":46},[36,112923,104743],{"class":62},[36,112925,630],{"class":42},[36,112927,104743],{"class":62},[36,112929,123],{"class":42},[19,112931,112932,112933,112936],{},"因为 XML 里 ",[33,112934,112935],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1752,112938,104048],{"id":104048},[26,112940,112941],{"className":28,"code":112802,"language":30,"meta":31,"style":31},[33,112942,112943,112951],{"__ignoreMap":31},[36,112944,112945,112947,112949],{"class":38,"line":39},[36,112946,76],{"class":46},[36,112948,112333],{"class":79},[36,112950,112336],{"class":42},[36,112952,112953,112955],{"class":38,"line":54},[36,112954,6474],{"class":46},[36,112956,112343],{"class":42},[19,112958,112959,112960,112963,112964,112967,112968,112971],{},"这段定义了一个函数，用来获取当前观测。",[33,112961,112962],{},"data.qpos.copy()"," 是位置数组副本，",[33,112965,112966],{},"data.qvel.copy()"," 是速度数组副本。",[33,112969,112970],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112973,112974],{},"在本章模型里：",[26,112976,112979],{"className":112977,"code":112978,"language":7570,"meta":31},[7568],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,112980,112978],{"__ignoreMap":31},[19,112982,112983],{},"所以返回的 obs 是：",[26,112985,112988],{"className":112986,"code":112987,"language":7570,"meta":31},[7568],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,112989,112987],{"__ignoreMap":31},[26,112991,112993],{"className":28,"code":112992,"language":30,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,112994,112995],{"__ignoreMap":31},[36,112996,112997,112999,113001,113003,113005],{"class":38,"line":39},[36,112998,76],{"class":46},[36,113000,112358],{"class":79},[36,113002,112361],{"class":42},[36,113004,2605],{"class":62},[36,113006,153],{"class":42},[19,113008,113009,113010,113013],{},"这行定义奖励函数。输入是观测 ",[33,113011,113012],{},"obs","，输出是一个浮点数奖励。",[26,113015,113017],{"className":28,"code":113016,"language":30,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,113018,113019,113032],{"__ignoreMap":31},[36,113020,113021,113024,113026,113028,113030],{"class":38,"line":39},[36,113022,113023],{"class":42},"cart_x ",[36,113025,47],{"class":46},[36,113027,112375],{"class":42},[36,113029,2751],{"class":62},[36,113031,35598],{"class":42},[36,113033,113034,113037,113039,113041,113043],{"class":38,"line":54},[36,113035,113036],{"class":42},"pole_angle ",[36,113038,47],{"class":46},[36,113040,112375],{"class":42},[36,113042,1906],{"class":62},[36,113044,35598],{"class":42},[19,113046,113047,113048,113051,113052,113055],{},"数组索引从 0 开始。",[33,113049,113050],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,113053,113054],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,113057,113058],{"className":28,"code":112127,"language":30,"meta":31,"style":31},[33,113059,113060],{"__ignoreMap":31},[36,113061,113062,113064,113066,113068,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088],{"class":38,"line":39},[36,113063,19419],{"class":46},[36,113065,112136],{"class":62},[36,113067,92],{"class":42},[36,113069,104743],{"class":62},[36,113071,54619],{"class":46},[36,113073,112145],{"class":62},[36,113075,8899],{"class":46},[36,113077,112150],{"class":42},[36,113079,3011],{"class":46},[36,113081,112150],{"class":42},[36,113083,3087],{"class":46},[36,113085,112159],{"class":42},[36,113087,3011],{"class":46},[36,113089,112164],{"class":42},[19,113091,113092,113093,113096,113097,113100],{},"这行计算奖励。",[33,113094,113095],{},"cart_x * cart_x"," 是小车位置的平方，",[33,113098,113099],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,113102,113104],{"className":28,"code":113103,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,113105,113106],{"__ignoreMap":31},[36,113107,113108,113110,113112,113114,113116],{"class":38,"line":39},[36,113109,107038],{"class":42},[36,113111,1906],{"class":62},[36,113113,6826],{"class":42},[36,113115,47],{"class":46},[36,113117,112479],{"class":62},[19,113119,113120,113121,113123,113124,113126],{},"手动设置杆子的初始角度。因为 ",[33,113122,107795],{}," 是小车位置，",[33,113125,107798],{}," 是杆子角度，所以这里改的是杆子。",[26,113128,113129],{"className":28,"code":106882,"language":30,"meta":31,"style":31},[33,113130,113131],{"__ignoreMap":31},[36,113132,113133],{"class":38,"line":39},[36,113134,106882],{"class":42},[19,113136,107841,113137,113139],{},[33,113138,106370],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,113141,113143],{"className":28,"code":113142,"language":30,"meta":31,"style":31},"total_reward = 0.0\n",[33,113144,113145],{"__ignoreMap":31},[36,113146,113147,113150,113152],{"class":38,"line":39},[36,113148,113149],{"class":42},"total_reward ",[36,113151,47],{"class":46},[36,113153,107100],{"class":62},[19,113155,113156],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,113158,113160],{"className":28,"code":113159,"language":30,"meta":31,"style":31},"for step in range(1000):\n",[33,113161,113162],{"__ignoreMap":31},[36,113163,113164,113166,113168,113170,113172,113174,113176],{"class":38,"line":39},[36,113165,5410],{"class":46},[36,113167,33970],{"class":42},[36,113169,28413],{"class":46},[36,113171,34796],{"class":62},[36,113173,92],{"class":42},[36,113175,1048],{"class":62},[36,113177,1147],{"class":42},[19,113179,113180,113181,113183],{},"循环 1000 步。",[33,113182,109473],{}," 是当前步数，从 0 到 999。",[26,113185,113187],{"className":28,"code":113186,"language":30,"meta":31,"style":31},"obs = get_observation(data)\n",[33,113188,113189],{"__ignoreMap":31},[36,113190,113191,113194,113196],{"class":38,"line":39},[36,113192,113193],{"class":42},"obs ",[36,113195,47],{"class":46},[36,113197,112526],{"class":42},[19,113199,113200,113201,676],{},"读取当前状态，保存到 ",[33,113202,113012],{},[26,113204,113206],{"className":28,"code":113205,"language":30,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,113207,113208,113220],{"__ignoreMap":31},[36,113209,113210,113212,113214,113216,113218],{"class":38,"line":39},[36,113211,113036],{"class":42},[36,113213,47],{"class":46},[36,113215,112375],{"class":42},[36,113217,1906],{"class":62},[36,113219,35598],{"class":42},[36,113221,113222,113225,113227,113229,113231],{"class":38,"line":54},[36,113223,113224],{"class":42},"pole_angular_velocity ",[36,113226,47],{"class":46},[36,113228,112375],{"class":42},[36,113230,2634],{"class":62},[36,113232,35598],{"class":42},[19,113234,113235,113236,113239,113240,676],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,113237,113238],{},"obs[3]","？因为 obs 的顺序是 ",[33,113241,113242],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,113244,113246],{"className":28,"code":113245,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,113247,113248],{"__ignoreMap":31},[36,113249,113250,113252,113254,113256,113258,113260,113262,113264,113266],{"class":38,"line":39},[36,113251,109781],{"class":42},[36,113253,47],{"class":46},[36,113255,112566],{"class":62},[36,113257,8899],{"class":46},[36,113259,112159],{"class":42},[36,113261,1885],{"class":46},[36,113263,64215],{"class":62},[36,113265,8899],{"class":46},[36,113267,112579],{"class":42},[19,113269,113270,113271,302,113273,113275],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,113272,107599],{},[33,113274,37680],{}," 是人为设置的系数，不是固定公式。",[26,113277,113279],{"className":28,"code":113278,"language":30,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,113280,113281],{"__ignoreMap":31},[36,113282,113283,113285,113287,113289,113291,113293,113295,113297],{"class":38,"line":39},[36,113284,109781],{"class":42},[36,113286,47],{"class":46},[36,113288,109786],{"class":42},[36,113290,3087],{"class":46},[36,113292,104743],{"class":62},[36,113294,630],{"class":42},[36,113296,104743],{"class":62},[36,113298,123],{"class":42},[19,113300,113301],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,113303,113304],{"className":28,"code":112112,"language":30,"meta":31,"style":31},[33,113305,113306],{"__ignoreMap":31},[36,113307,113308,113310,113312,113314,113316],{"class":38,"line":39},[36,113309,108210],{"class":42},[36,113311,2751],{"class":62},[36,113313,6826],{"class":42},[36,113315,47],{"class":46},[36,113317,109809],{"class":42},[19,113319,113320],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,113322,113323],{"className":28,"code":106844,"language":30,"meta":31,"style":31},[33,113324,113325],{"__ignoreMap":31},[36,113326,113327],{"class":38,"line":39},[36,113328,106844],{"class":42},[19,113330,113331,113332,113334],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,113333,108465],{}," 计算小车和杆子的下一刻状态。",[26,113336,113338],{"className":28,"code":113337,"language":30,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,113339,113340,113349],{"__ignoreMap":31},[36,113341,113342,113345,113347],{"class":38,"line":39},[36,113343,113344],{"class":42},"reward ",[36,113346,47],{"class":46},[36,113348,112631],{"class":42},[36,113350,113351,113353,113355],{"class":38,"line":54},[36,113352,113149],{"class":42},[36,113354,928],{"class":46},[36,113356,112641],{"class":42},[19,113358,113359,113360,113362,113363,113366,113367,676],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,113361,928],{}," 是简写，",[33,113364,113365],{},"total_reward += reward"," 等价于 ",[33,113368,113369],{},"total_reward = total_reward + reward",[26,113371,113373],{"className":28,"code":113372,"language":30,"meta":31,"style":31},"if step % 100 == 0:\n",[33,113374,113375],{"__ignoreMap":31},[36,113376,113377,113379,113381,113383,113385,113387,113389],{"class":38,"line":39},[36,113378,3948],{"class":46},[36,113380,33970],{"class":42},[36,113382,2884],{"class":46},[36,113384,8136],{"class":62},[36,113386,103899],{"class":46},[36,113388,899],{"class":62},[36,113390,153],{"class":42},[19,113392,113393,113395,113396,113399],{},[33,113394,2884],{}," 是取余数。",[33,113397,113398],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,113401,113403],{"className":28,"code":113402,"language":30,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,113404,113405],{"__ignoreMap":31},[36,113406,113407,113409,113411,113413,113415,113417,113419,113421,113423,113425,113427,113429,113431,113433,113435,113437],{"class":38,"line":39},[36,113408,371],{"class":62},[36,113410,92],{"class":42},[36,113412,112670],{"class":50},[36,113414,112673],{"class":42},[36,113416,112676],{"class":50},[36,113418,112679],{"class":42},[36,113420,2634],{"class":62},[36,113422,112684],{"class":42},[36,113424,112687],{"class":50},[36,113426,630],{"class":42},[36,113428,34371],{"class":62},[36,113430,92],{"class":42},[36,113432,2605],{"class":62},[36,113434,112698],{"class":42},[36,113436,2634],{"class":62},[36,113438,1914],{"class":42},[19,113440,113441,113442,113445,113446,113449],{},"打印当前步数、观测和动作。",[33,113443,113444],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,113447,113448],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113451,104656],{"id":104655},[19,113453,113454],{},"观测向量:",[26,113456,113459],{"className":113457,"code":113458,"language":7570,"meta":31},[7568],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,113460,113458],{"__ignoreMap":31},[19,113462,113463],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113465,113466],{},"每隔 100 步会打印一次：",[26,113468,113471],{"className":113469,"code":113470,"language":7570,"meta":31},[7568],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,113472,113470],{"__ignoreMap":31},[19,113474,113475],{},"重点观察：",[650,113477,113478,113484,113489],{},[653,113479,113480,113483],{},[33,113481,113482],{},"pole_angle"," 是否越来越大。",[653,113485,113486,113488],{},[33,113487,112065],{}," 是否跑得太远。",[653,113490,113491,113492,84881,113494,676],{},"action 是否经常被 clip 到 ",[33,113493,106255],{},[33,113495,1906],{},[19,113497,113498],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113500,104688],{"id":104687},[650,113502,113503,113509,113512,113518,113528,113534,113537],{},[653,113504,113505,113506,676],{},"把初始角度改为 ",[33,113507,113508],{},"data.qpos[1] = 0.3",[653,113510,113511],{},"重新运行，观察控制是否变差。",[653,113513,113514,113515,113517],{},"把 actuator ",[33,113516,109406],{}," 改小。",[653,113519,113520,113521,113524,113525,676],{},"打印 ",[33,113522,113523],{},"model.nq, model.nv, model.nu","，应为 ",[33,113526,113527],{},"2 2 1",[653,113529,113530,113531,113533],{},"把 reward 里的 ",[33,113532,113099],{}," 系数改大，观察总奖励变化。",[653,113535,113536],{},"把控制器改成反号，观察杆子是否更容易倒。",[653,113538,113539],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113541,104793],{"id":104792},[1752,113543,113544],{"id":113544},"杆子方向和预期不一致",[19,113546,104736,113547,113549,113550,113552],{},[33,113548,108578],{}," 和 capsule 的 ",[33,113551,105516],{},"，必要时用 viewer 可视化确认。",[1752,113554,113555],{"id":113555},"控制器越控越倒",[19,113557,113558],{},"说明反馈符号可能反了，尝试:",[26,113560,113562],{"className":28,"code":113561,"language":30,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,113563,113564],{"__ignoreMap":31},[36,113565,113566,113568,113570,113572,113574,113576,113578,113580,113582,113584],{"class":38,"line":39},[36,113567,109781],{"class":42},[36,113569,47],{"class":46},[36,113571,54619],{"class":46},[36,113573,107599],{"class":62},[36,113575,8899],{"class":46},[36,113577,112159],{"class":42},[36,113579,3087],{"class":46},[36,113581,64215],{"class":62},[36,113583,8899],{"class":46},[36,113585,112579],{"class":42},[1752,113587,113588],{"id":113588},"小车飞走",[19,113590,113591,113592,113594,113595,113598],{},"降低 ",[33,113593,109406],{}," 或缩小 ",[33,113596,113597],{},"action"," 的 clip 范围。",[1752,113600,113602,113604],{"id":113601},"obs3-为什么是杆子角速度",[33,113603,113238],{}," 为什么是杆子角速度",[19,113606,113607],{},"因为这个模型里：",[26,113609,113612],{"className":113610,"code":113611,"language":7570,"meta":31},[7568],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,113613,113611],{"__ignoreMap":31},[19,113615,112086],{},[26,113617,113620],{"className":113618,"code":113619,"language":7570,"meta":31},[7568],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,113621,113619],{"__ignoreMap":31},[1752,113623,113625],{"id":113624},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113627,113628],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113630,104947],{"id":104946},[19,113632,113633],{},"一个控制任务通常包含：",[650,113635,113636,113639,113647,113652,113655],{},[653,113637,113638],{},"模型：Cartpole 的 body、joint、actuator。",[653,113640,113641,113642,2031,113644,113646],{},"观测：从 ",[33,113643,106370],{},[33,113645,106700],{}," 里取状态。",[653,113648,113649,113650,676],{},"动作：写入 ",[33,113651,103416],{},[653,113653,113654],{},"奖励：根据任务目标打分。",[653,113656,113657],{},"循环：obs -> action -> step -> reward。",[19,113659,113660],{},"这就是后面 Gymnasium 环境的基本骨架。",[2467,113662,106626],{},{"title":31,"searchDepth":54,"depth":54,"links":113664},[113665,113666,113667,113672,113676,113677,113678,113686],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":113668},[113669,113670,113671],{"id":112039,"depth":66,"text":112040},{"id":112104,"depth":66,"text":112105},{"id":112120,"depth":66,"text":112121},{"id":103592,"depth":54,"text":103593,"children":113673},[113674,113675],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":113679},[113680,113681,113682,113683,113685],{"id":113544,"depth":66,"text":113544},{"id":113555,"depth":66,"text":113555},{"id":113588,"depth":66,"text":113588},{"id":113601,"depth":66,"text":113684},"obs[3] 为什么是杆子角速度",{"id":113624,"depth":66,"text":113625},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111775,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113693,"title":113694,"body":113695,"description":31,"extension":2494,"meta":115709,"navigation":69,"path":115710,"seo":115711,"stem":115712,"__hash__":115713},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113696,"toc":115685},[113697,113700,113702,113705,113707,113724,113727,113730,113736,113739,113741,113743,113767,113769,113783,113785,113826,113828,113846,113848,113851,113857,113860,113888,113892,113898,113923,113926,113957,113964,113967,113970,113976,113979,113985,113988,113994,113998,114001,114026,114029,114031,114791,114793,114805,114807,114818,114820,114823,114840,114843,114845,114856,114859,114861,114907,114910,114923,114926,115008,115011,115013,115029,115039,115052,115055,115094,115104,115115,115125,115138,115141,115170,115173,115183,115186,115192,115209,115220,115222,115228,115245,115256,115277,115280,115292,115295,115316,115319,115327,115335,115352,115355,115424,115431,115439,115442,115455,115462,115464,115467,115473,115476,115479,115485,115491,115493,115533,115535,115541,115550,115553,115555,115575,115578,115581,115587,115591,115593,115620,115623,115626,115653,115659,115662,115665,115667,115670,115673,115679,115682],[10,113698,113694],{"id":113699},"_7控制任务reacher-机械臂到达目标",[14,113701,102988],{"id":102987},[19,113703,113704],{},"本章搭建一个二维两关节 reacher 任务。",[19,113706,106671],{},[650,113708,113709,113712,113715,113718,113721],{},[653,113710,113711],{},"两个 hinge joint",[653,113713,113714],{},"两个 motor actuator",[653,113716,113717],{},"site 作为末端点和目标点",[653,113719,113720],{},"根据末端和目标距离设计 reward",[653,113722,113723],{},"构造机械臂任务的基本形式",[19,113725,113726],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113728,113729],{},"Reacher 任务可以理解为：",[26,113731,113734],{"className":113732,"code":113733,"language":7570,"meta":31},[7568],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,113735,113733],{"__ignoreMap":31},[19,113737,113738],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113740,103111],{"id":103110},[19,113742,103114],{},[26,113744,113745],{"className":26192,"code":106727,"language":26194,"meta":31,"style":31},[33,113746,113747],{"__ignoreMap":31},[36,113748,113749,113751,113753,113755,113757,113759,113761,113763,113765],{"class":38,"line":39},[36,113750,26947],{"class":79},[36,113752,28685],{"class":50},[36,113754,26204],{"class":50},[36,113756,28770],{"class":62},[36,113758,106742],{"class":50},[36,113760,103139],{"class":50},[36,113762,104841],{"class":50},[36,113764,103155],{"class":50},[36,113766,106751],{"class":50},[19,113768,105159],{},[26,113770,113771],{"className":26192,"code":103260,"language":26194,"meta":31,"style":31},[33,113772,113773],{"__ignoreMap":31},[36,113774,113775,113777,113779,113781],{"class":38,"line":39},[36,113776,26201],{"class":79},[36,113778,26204],{"class":50},[36,113780,103271],{"class":50},[36,113782,103274],{"class":50},[19,113784,105176],{},[26,113786,113788],{"className":26192,"code":113787,"language":26194,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,113789,113790,113807,113816],{"__ignoreMap":31},[36,113791,113792,113794,113796,113798,113801,113803,113805],{"class":38,"line":39},[36,113793,32699],{"class":79},[36,113795,31545],{"class":50},[36,113797,27486],{"class":62},[36,113799,113800],{"class":50}," mujoco-reacher",[36,113802,103316],{"class":50},[36,113804,103319],{"class":62},[36,113806,103322],{"class":62},[36,113808,113809,113811,113813],{"class":38,"line":54},[36,113810,32699],{"class":79},[36,113812,103329],{"class":50},[36,113814,113815],{"class":50}," mujoco-reacher\n",[36,113817,113818,113820,113822,113824],{"class":38,"line":66},[36,113819,26201],{"class":79},[36,113821,26204],{"class":50},[36,113823,103271],{"class":50},[36,113825,103274],{"class":50},[19,113827,103345],{},[650,113829,113830,113833,113836],{},[653,113831,113832],{},"本章使用低维状态，不使用图像输入。",[653,113834,113835],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[653,113837,113838,113839,2031,113841,2031,113843,113845],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,113840,106370],{},[33,113842,106700],{},[33,113844,106020],{}," 的方法一致。",[14,113847,103385],{"id":103384},[19,113849,113850],{},"Reacher 任务核心:",[26,113852,113855],{"className":113853,"code":113854,"language":7570,"meta":31},[7568],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,113856,113854],{"__ignoreMap":31},[19,113858,113859],{},"读取 site 世界坐标:",[26,113861,113863],{"className":28,"code":113862,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,113864,113865,113878],{"__ignoreMap":31},[36,113866,113867,113869,113871,113873,113876],{"class":38,"line":39},[36,113868,105974],{"class":42},[36,113870,47],{"class":46},[36,113872,105745],{"class":42},[36,113874,113875],{"class":50},"\"tip\"",[36,113877,123],{"class":42},[36,113879,113880,113883,113885],{"class":38,"line":54},[36,113881,113882],{"class":42},"tip_pos ",[36,113884,47],{"class":46},[36,113886,113887],{"class":42}," data.site_xpos[site_id]\n",[1752,113889,113891],{"id":113890},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113893,113894,113895,113897],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,113896,106370],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,113899,113901],{"className":28,"code":113900,"language":30,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,113902,113903,113913],{"__ignoreMap":31},[36,113904,113905,113908,113910],{"class":38,"line":39},[36,113906,113907],{"class":42},"tip ",[36,113909,47],{"class":46},[36,113911,113912],{"class":42}," data.site_xpos[tip_site_id]\n",[36,113914,113915,113918,113920],{"class":38,"line":54},[36,113916,113917],{"class":42},"target ",[36,113919,47],{"class":46},[36,113921,113922],{"class":42}," data.site_xpos[target_site_id]\n",[19,113924,113925],{},"这样 reward 就很容易写：",[26,113927,113929],{"className":28,"code":113928,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,113930,113931,113946],{"__ignoreMap":31},[36,113932,113933,113936,113938,113941,113943],{"class":38,"line":39},[36,113934,113935],{"class":42},"dist ",[36,113937,47],{"class":46},[36,113939,113940],{"class":42}," np.linalg.norm(tip ",[36,113942,3087],{"class":46},[36,113944,113945],{"class":42}," target)\n",[36,113947,113948,113950,113952,113954],{"class":38,"line":54},[36,113949,113344],{"class":42},[36,113951,47],{"class":46},[36,113953,54619],{"class":46},[36,113955,113956],{"class":42},"dist\n",[19,113958,113959,113960,113963],{},"距离越小，",[33,113961,113962],{},"-dist"," 越接近 0，奖励越高。",[1752,113965,113966],{"id":113966},"两关节机械臂的状态",[19,113968,113969],{},"这个模型有两个 hinge joint：",[26,113971,113974],{"className":113972,"code":113973,"language":7570,"meta":31},[7568],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,113975,113973],{"__ignoreMap":31},[19,113977,113978],{},"再加上末端和目标位置：",[26,113980,113983],{"className":113981,"code":113982,"language":7570,"meta":31},[7568],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,113984,113982],{"__ignoreMap":31},[19,113986,113987],{},"总维度：",[26,113989,113992],{"className":113990,"code":113991,"language":7570,"meta":31},[7568],"2 + 2 + 3 + 3 = 10\n",[33,113993,113991],{"__ignoreMap":31},[1752,113995,113997],{"id":113996},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113999,114000],{},"本章把重力设为：",[26,114002,114004],{"className":55415,"code":114003,"language":55417,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,114005,114006],{"__ignoreMap":31},[36,114007,114008,114010,114012,114014,114016,114018,114020,114022,114024],{"class":38,"line":39},[36,114009,3463],{"class":42},[36,114011,71512],{"class":53649},[36,114013,103534],{"class":79},[36,114015,47],{"class":42},[36,114017,103539],{"class":50},[36,114019,103542],{"class":79},[36,114021,47],{"class":42},[36,114023,106111],{"class":50},[36,114025,103484],{"class":42},[19,114027,114028],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114030,103593],{"id":103592},[26,114032,114034],{"className":28,"code":114033,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,114035,114036,114042,114052,114056,114060,114068,114073,114078,114082,114086,114091,114096,114100,114105,114110,114115,114119,114124,114129,114134,114139,114143,114147,114151,114155,114159,114164,114169,114173,114177,114181,114185,114189,114204,114213,114225,114248,114255,114259,114263,114273,114287,114301,114308,114312,114316,114330,114342,114354,114367,114382,114399,114403,114407,114419,114431,114439,114447,114451,114467,114472,114485,114498,114513,114517,114552,114584,114588,114592,114601,114605,114621,114631,114642,114658,114674,114690,114706,114710,114728,114748,114767,114771,114775,114787],{"__ignoreMap":31},[36,114037,114038,114040],{"class":38,"line":39},[36,114039,1943],{"class":46},[36,114041,103641],{"class":42},[36,114043,114044,114046,114048,114050],{"class":38,"line":54},[36,114045,1943],{"class":46},[36,114047,33734],{"class":42},[36,114049,33737],{"class":46},[36,114051,33740],{"class":42},[36,114053,114054],{"class":38,"line":66},[36,114055,70],{"emptyLinePlaceholder":69},[36,114057,114058],{"class":38,"line":73},[36,114059,70],{"emptyLinePlaceholder":69},[36,114061,114062,114064,114066],{"class":38,"line":86},[36,114063,103654],{"class":62},[36,114065,15941],{"class":46},[36,114067,103659],{"class":50},[36,114069,114070],{"class":38,"line":126},[36,114071,114072],{"class":50},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,114074,114075],{"class":38,"line":131},[36,114076,114077],{"class":50},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,114079,114080],{"class":38,"line":225},[36,114081,70],{"emptyLinePlaceholder":69},[36,114083,114084],{"class":38,"line":235},[36,114085,103678],{"class":50},[36,114087,114088],{"class":38,"line":377},[36,114089,114090],{"class":50},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,114092,114093],{"class":38,"line":617},[36,114094,114095],{"class":50},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,114097,114098],{"class":38,"line":643},[36,114099,70],{"emptyLinePlaceholder":69},[36,114101,114102],{"class":38,"line":921},[36,114103,114104],{"class":50},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,114106,114107],{"class":38,"line":934},[36,114108,114109],{"class":50},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,114111,114112],{"class":38,"line":939},[36,114113,114114],{"class":50},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,114116,114117],{"class":38,"line":949},[36,114118,70],{"emptyLinePlaceholder":69},[36,114120,114121],{"class":38,"line":962},[36,114122,114123],{"class":50},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,114125,114126],{"class":38,"line":974},[36,114127,114128],{"class":50},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,114130,114131],{"class":38,"line":979},[36,114132,114133],{"class":50},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[36,114135,114136],{"class":38,"line":994},[36,114137,114138],{"class":50},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,114140,114141],{"class":38,"line":1006},[36,114142,108777],{"class":50},[36,114144,114145],{"class":38,"line":1011},[36,114146,103707],{"class":50},[36,114148,114149],{"class":38,"line":1023},[36,114150,103712],{"class":50},[36,114152,114153],{"class":38,"line":1028},[36,114154,70],{"emptyLinePlaceholder":69},[36,114156,114157],{"class":38,"line":1033},[36,114158,108794],{"class":50},[36,114160,114161],{"class":38,"line":1053},[36,114162,114163],{"class":50},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,114165,114166],{"class":38,"line":1064},[36,114167,114168],{"class":50},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,114170,114171],{"class":38,"line":1075},[36,114172,108804],{"class":50},[36,114174,114175],{"class":38,"line":2291},[36,114176,103717],{"class":50},[36,114178,114179],{"class":38,"line":2329},[36,114180,98039],{"class":50},[36,114182,114183],{"class":38,"line":2334},[36,114184,70],{"emptyLinePlaceholder":69},[36,114186,114187],{"class":38,"line":2339},[36,114188,70],{"emptyLinePlaceholder":69},[36,114190,114191,114193,114196,114199,114201],{"class":38,"line":2365},[36,114192,76],{"class":46},[36,114194,114195],{"class":79}," site_position",[36,114197,114198],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,114200,669],{"class":62},[36,114202,114203],{"class":42},") -> np.ndarray:\n",[36,114205,114206,114208,114210],{"class":38,"line":2373},[36,114207,105740],{"class":42},[36,114209,47],{"class":46},[36,114211,114212],{"class":42}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,114214,114215,114217,114219,114221,114223],{"class":38,"line":5001},[36,114216,5486],{"class":46},[36,114218,105789],{"class":42},[36,114220,3463],{"class":46},[36,114222,899],{"class":62},[36,114224,153],{"class":42},[36,114226,114227,114229,114231,114233,114235,114238,114240,114242,114244,114246],{"class":38,"line":5006},[36,114228,105772],{"class":46},[36,114230,105775],{"class":62},[36,114232,92],{"class":42},[36,114234,95],{"class":46},[36,114236,114237],{"class":50},"\"site not found: ",[36,114239,101],{"class":62},[36,114241,104],{"class":42},[36,114243,107],{"class":62},[36,114245,604],{"class":50},[36,114247,123],{"class":42},[36,114249,114250,114252],{"class":38,"line":10328},[36,114251,6474],{"class":46},[36,114253,114254],{"class":42}," data.site_xpos[site_id].copy()\n",[36,114256,114257],{"class":38,"line":10352},[36,114258,70],{"emptyLinePlaceholder":69},[36,114260,114261],{"class":38,"line":10357},[36,114262,70],{"emptyLinePlaceholder":69},[36,114264,114265,114267,114270],{"class":38,"line":10363},[36,114266,76],{"class":46},[36,114268,114269],{"class":79}," get_obs",[36,114271,114272],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,114274,114275,114278,114280,114283,114285],{"class":38,"line":10390},[36,114276,114277],{"class":42},"    tip ",[36,114279,47],{"class":46},[36,114281,114282],{"class":42}," site_position(model, data, ",[36,114284,113875],{"class":50},[36,114286,123],{"class":42},[36,114288,114289,114292,114294,114296,114299],{"class":38,"line":10395},[36,114290,114291],{"class":42},"    target ",[36,114293,47],{"class":46},[36,114295,114282],{"class":42},[36,114297,114298],{"class":50},"\"target\"",[36,114300,123],{"class":42},[36,114302,114303,114305],{"class":38,"line":10401},[36,114304,6474],{"class":46},[36,114306,114307],{"class":42}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,114309,114310],{"class":38,"line":10413},[36,114311,70],{"emptyLinePlaceholder":69},[36,114313,114314],{"class":38,"line":10425},[36,114315,70],{"emptyLinePlaceholder":69},[36,114317,114318,114320,114323,114326,114328],{"class":38,"line":10437},[36,114319,76],{"class":46},[36,114321,114322],{"class":79}," reward",[36,114324,114325],{"class":42},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,114327,2605],{"class":62},[36,114329,153],{"class":42},[36,114331,114332,114334,114336,114338,114340],{"class":38,"line":12095},[36,114333,114277],{"class":42},[36,114335,47],{"class":46},[36,114337,114282],{"class":42},[36,114339,113875],{"class":50},[36,114341,123],{"class":42},[36,114343,114344,114346,114348,114350,114352],{"class":38,"line":12120},[36,114345,114291],{"class":42},[36,114347,47],{"class":46},[36,114349,114282],{"class":42},[36,114351,114298],{"class":50},[36,114353,123],{"class":42},[36,114355,114356,114359,114361,114363,114365],{"class":38,"line":12143},[36,114357,114358],{"class":42},"    dist ",[36,114360,47],{"class":46},[36,114362,113940],{"class":42},[36,114364,3087],{"class":46},[36,114366,113945],{"class":42},[36,114368,114369,114372,114374,114377,114379],{"class":38,"line":12167},[36,114370,114371],{"class":42},"    control_cost ",[36,114373,47],{"class":46},[36,114375,114376],{"class":62}," 0.01",[36,114378,8899],{"class":46},[36,114380,114381],{"class":42}," np.sum(np.square(data.ctrl))\n",[36,114383,114384,114386,114388,114390,114392,114394,114396],{"class":38,"line":12172},[36,114385,6474],{"class":46},[36,114387,112136],{"class":62},[36,114389,92],{"class":42},[36,114391,3087],{"class":46},[36,114393,113935],{"class":42},[36,114395,3087],{"class":46},[36,114397,114398],{"class":42}," control_cost)\n",[36,114400,114401],{"class":38,"line":12177},[36,114402,70],{"emptyLinePlaceholder":69},[36,114404,114405],{"class":38,"line":12182},[36,114406,70],{"emptyLinePlaceholder":69},[36,114408,114409,114411,114413,114415,114417],{"class":38,"line":12191},[36,114410,76],{"class":46},[36,114412,4366],{"class":79},[36,114414,103738],{"class":42},[36,114416,98027],{"class":62},[36,114418,153],{"class":42},[36,114420,114421,114423,114425,114427,114429],{"class":38,"line":12196},[36,114422,103747],{"class":42},[36,114424,47],{"class":46},[36,114426,103752],{"class":42},[36,114428,103654],{"class":62},[36,114430,123],{"class":42},[36,114432,114433,114435,114437],{"class":38,"line":12202},[36,114434,103761],{"class":42},[36,114436,47],{"class":46},[36,114438,103766],{"class":42},[36,114440,114441,114443,114445],{"class":38,"line":12223},[36,114442,112492],{"class":42},[36,114444,47],{"class":46},[36,114446,107100],{"class":62},[36,114448,114449],{"class":38,"line":12229},[36,114450,70],{"emptyLinePlaceholder":69},[36,114452,114453,114455,114457,114459,114461,114463,114465],{"class":38,"line":12243},[36,114454,5586],{"class":46},[36,114456,33970],{"class":42},[36,114458,28413],{"class":46},[36,114460,34796],{"class":62},[36,114462,92],{"class":42},[36,114464,67421],{"class":62},[36,114466,1147],{"class":42},[36,114468,114469],{"class":38,"line":12249},[36,114470,114471],{"class":42},"        mujoco.mj_forward(model, data)\n",[36,114473,114474,114477,114479,114481,114483],{"class":38,"line":12276},[36,114475,114476],{"class":42},"        tip ",[36,114478,47],{"class":46},[36,114480,114282],{"class":42},[36,114482,113875],{"class":50},[36,114484,123],{"class":42},[36,114486,114487,114490,114492,114494,114496],{"class":38,"line":12285},[36,114488,114489],{"class":42},"        target ",[36,114491,47],{"class":46},[36,114493,114282],{"class":42},[36,114495,114298],{"class":50},[36,114497,123],{"class":42},[36,114499,114500,114503,114505,114508,114510],{"class":38,"line":12291},[36,114501,114502],{"class":42},"        error ",[36,114504,47],{"class":46},[36,114506,114507],{"class":42}," target ",[36,114509,3087],{"class":46},[36,114511,114512],{"class":42}," tip\n",[36,114514,114515],{"class":38,"line":12299},[36,114516,70],{"emptyLinePlaceholder":69},[36,114518,114519,114521,114523,114525,114527,114530,114532,114534,114537,114539,114542,114544,114546,114548,114550],{"class":38,"line":12304},[36,114520,108956],{"class":42},[36,114522,2751],{"class":62},[36,114524,6826],{"class":42},[36,114526,47],{"class":46},[36,114528,114529],{"class":42}," np.clip(",[36,114531,107599],{"class":62},[36,114533,8899],{"class":46},[36,114535,114536],{"class":42}," error[",[36,114538,1911],{"class":62},[36,114540,114541],{"class":42},"], ",[36,114543,3087],{"class":46},[36,114545,104743],{"class":62},[36,114547,630],{"class":42},[36,114549,104743],{"class":62},[36,114551,123],{"class":42},[36,114553,114554,114556,114558,114560,114562,114564,114566,114568,114570,114572,114574,114576,114578,114580,114582],{"class":38,"line":18977},[36,114555,108956],{"class":42},[36,114557,1906],{"class":62},[36,114559,6826],{"class":42},[36,114561,47],{"class":46},[36,114563,114529],{"class":42},[36,114565,107599],{"class":62},[36,114567,8899],{"class":46},[36,114569,114536],{"class":42},[36,114571,2751],{"class":62},[36,114573,114541],{"class":42},[36,114575,3087],{"class":46},[36,114577,104743],{"class":62},[36,114579,630],{"class":42},[36,114581,104743],{"class":62},[36,114583,123],{"class":42},[36,114585,114586],{"class":38,"line":18983},[36,114587,70],{"emptyLinePlaceholder":69},[36,114589,114590],{"class":38,"line":19006},[36,114591,103856],{"class":42},[36,114593,114594,114596,114598],{"class":38,"line":19012},[36,114595,112636],{"class":42},[36,114597,928],{"class":46},[36,114599,114600],{"class":42}," reward(model, data)\n",[36,114602,114603],{"class":38,"line":19035},[36,114604,70],{"emptyLinePlaceholder":69},[36,114606,114607,114609,114611,114613,114615,114617,114619],{"class":38,"line":19049},[36,114608,890],{"class":46},[36,114610,33970],{"class":42},[36,114612,2884],{"class":46},[36,114614,8136],{"class":62},[36,114616,103899],{"class":46},[36,114618,899],{"class":62},[36,114620,153],{"class":42},[36,114622,114623,114626,114628],{"class":38,"line":19069},[36,114624,114625],{"class":42},"            obs ",[36,114627,47],{"class":46},[36,114629,114630],{"class":42}," get_obs(model, data)\n",[36,114632,114633,114635,114637,114639],{"class":38,"line":19075},[36,114634,906],{"class":62},[36,114636,92],{"class":42},[36,114638,112670],{"class":50},[36,114640,114641],{"class":42},", step)\n",[36,114643,114644,114646,114648,114651,114654,114656],{"class":38,"line":19086},[36,114645,906],{"class":62},[36,114647,92],{"class":42},[36,114649,114650],{"class":50},"\"  tip:\"",[36,114652,114653],{"class":42},", np.round(tip, ",[36,114655,2634],{"class":62},[36,114657,1914],{"class":42},[36,114659,114660,114662,114664,114667,114670,114672],{"class":38,"line":19109},[36,114661,906],{"class":62},[36,114663,92],{"class":42},[36,114665,114666],{"class":50},"\"  target:\"",[36,114668,114669],{"class":42},", np.round(target, ",[36,114671,2634],{"class":62},[36,114673,1914],{"class":42},[36,114675,114676,114678,114680,114683,114686,114688],{"class":38,"line":19131},[36,114677,906],{"class":62},[36,114679,92],{"class":42},[36,114681,114682],{"class":50},"\"  ctrl:\"",[36,114684,114685],{"class":42},", np.round(data.ctrl.copy(), ",[36,114687,2634],{"class":62},[36,114689,1914],{"class":42},[36,114691,114692,114694,114696,114699,114702,114704],{"class":38,"line":19136},[36,114693,906],{"class":62},[36,114695,92],{"class":42},[36,114697,114698],{"class":50},"\"  obs_dim:\"",[36,114700,114701],{"class":42},", obs.shape[",[36,114703,2751],{"class":62},[36,114705,7040],{"class":42},[36,114707,114708],{"class":38,"line":19142},[36,114709,70],{"emptyLinePlaceholder":69},[36,114711,114712,114714,114716,114718,114720,114722,114724,114726],{"class":38,"line":19156},[36,114713,89],{"class":62},[36,114715,92],{"class":42},[36,114717,112715],{"class":50},[36,114719,630],{"class":42},[36,114721,34371],{"class":62},[36,114723,112722],{"class":42},[36,114725,2634],{"class":62},[36,114727,1914],{"class":42},[36,114729,114730,114732,114734,114737,114740,114742,114744,114746],{"class":38,"line":19169},[36,114731,89],{"class":62},[36,114733,92],{"class":42},[36,114735,114736],{"class":50},"\"final tip:\"",[36,114738,114739],{"class":42},", np.round(site_position(model, data, ",[36,114741,113875],{"class":50},[36,114743,112684],{"class":42},[36,114745,2634],{"class":62},[36,114747,1914],{"class":42},[36,114749,114750,114752,114754,114757,114759,114761,114763,114765],{"class":38,"line":19174},[36,114751,89],{"class":62},[36,114753,92],{"class":42},[36,114755,114756],{"class":50},"\"target:\"",[36,114758,114739],{"class":42},[36,114760,114298],{"class":50},[36,114762,112684],{"class":42},[36,114764,2634],{"class":62},[36,114766,1914],{"class":42},[36,114768,114769],{"class":38,"line":19188},[36,114770,70],{"emptyLinePlaceholder":69},[36,114772,114773],{"class":38,"line":19193},[36,114774,70],{"emptyLinePlaceholder":69},[36,114776,114777,114779,114781,114783,114785],{"class":38,"line":19199},[36,114778,3948],{"class":46},[36,114780,33575],{"class":62},[36,114782,103899],{"class":46},[36,114784,103902],{"class":50},[36,114786,153],{"class":42},[36,114788,114789],{"class":38,"line":19204},[36,114790,103909],{"class":42},[19,114792,105910],{},[26,114794,114796],{"className":26192,"code":114795,"language":26194,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,114797,114798],{"__ignoreMap":31},[36,114799,114800,114802],{"class":38,"line":39},[36,114801,103623],{"class":79},[36,114803,114804],{"class":50}," ch7_reacher.py\n",[19,114806,112783],{},[26,114808,114810],{"className":26192,"code":114809,"language":26194,"meta":31,"style":31},"python ch7_reacher.py\n",[33,114811,114812],{"__ignoreMap":31},[36,114813,114814,114816],{"class":38,"line":39},[36,114815,30],{"class":79},[36,114817,114804],{"class":50},[1752,114819,103912],{"id":103912},[19,114821,114822],{},"读取 site 坐标：",[26,114824,114826],{"className":28,"code":114825,"language":30,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,114827,114828],{"__ignoreMap":31},[36,114829,114830,114832,114834,114836,114838],{"class":38,"line":39},[36,114831,76],{"class":46},[36,114833,114195],{"class":79},[36,114835,114198],{"class":42},[36,114837,669],{"class":62},[36,114839,114203],{"class":42},[19,114841,114842],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114844,112799],{},[26,114846,114848],{"className":28,"code":114847,"language":30,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,114849,114850],{"__ignoreMap":31},[36,114851,114852,114854],{"class":38,"line":39},[36,114853,19419],{"class":46},[36,114855,114307],{"class":42},[19,114857,114858],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114860,112124],{},[26,114862,114864],{"className":28,"code":114863,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,114865,114866,114878,114891],{"__ignoreMap":31},[36,114867,114868,114870,114872,114874,114876],{"class":38,"line":39},[36,114869,113935],{"class":42},[36,114871,47],{"class":46},[36,114873,113940],{"class":42},[36,114875,3087],{"class":46},[36,114877,113945],{"class":42},[36,114879,114880,114883,114885,114887,114889],{"class":38,"line":54},[36,114881,114882],{"class":42},"control_cost ",[36,114884,47],{"class":46},[36,114886,114376],{"class":62},[36,114888,8899],{"class":46},[36,114890,114381],{"class":42},[36,114892,114893,114895,114897,114899,114901,114903,114905],{"class":38,"line":66},[36,114894,19419],{"class":46},[36,114896,112136],{"class":62},[36,114898,92],{"class":42},[36,114900,3087],{"class":46},[36,114902,113935],{"class":42},[36,114904,3087],{"class":46},[36,114906,114398],{"class":42},[19,114908,114909],{},"奖励由两部分组成：",[650,114911,114912,114917],{},[653,114913,114914,114916],{},[33,114915,113962],{},"：末端离目标越远，奖励越低。",[653,114918,114919,114922],{},[33,114920,114921],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114924,114925],{},"简单控制器：",[26,114927,114929],{"className":28,"code":114928,"language":30,"meta":31,"style":31},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[33,114930,114931,114944,114976],{"__ignoreMap":31},[36,114932,114933,114936,114938,114940,114942],{"class":38,"line":39},[36,114934,114935],{"class":42},"error ",[36,114937,47],{"class":46},[36,114939,114507],{"class":42},[36,114941,3087],{"class":46},[36,114943,114512],{"class":42},[36,114945,114946,114948,114950,114952,114954,114956,114958,114960,114962,114964,114966,114968,114970,114972,114974],{"class":38,"line":54},[36,114947,108210],{"class":42},[36,114949,2751],{"class":62},[36,114951,6826],{"class":42},[36,114953,47],{"class":46},[36,114955,114529],{"class":42},[36,114957,107599],{"class":62},[36,114959,8899],{"class":46},[36,114961,114536],{"class":42},[36,114963,1911],{"class":62},[36,114965,114541],{"class":42},[36,114967,3087],{"class":46},[36,114969,104743],{"class":62},[36,114971,630],{"class":42},[36,114973,104743],{"class":62},[36,114975,123],{"class":42},[36,114977,114978,114980,114982,114984,114986,114988,114990,114992,114994,114996,114998,115000,115002,115004,115006],{"class":38,"line":66},[36,114979,108210],{"class":42},[36,114981,1906],{"class":62},[36,114983,6826],{"class":42},[36,114985,47],{"class":46},[36,114987,114529],{"class":42},[36,114989,107599],{"class":62},[36,114991,8899],{"class":46},[36,114993,114536],{"class":42},[36,114995,2751],{"class":62},[36,114997,114541],{"class":42},[36,114999,3087],{"class":46},[36,115001,104743],{"class":62},[36,115003,630],{"class":42},[36,115005,104743],{"class":62},[36,115007,123],{"class":42},[19,115009,115010],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1752,115012,104048],{"id":104048},[26,115014,115015],{"className":28,"code":114825,"language":30,"meta":31,"style":31},[33,115016,115017],{"__ignoreMap":31},[36,115018,115019,115021,115023,115025,115027],{"class":38,"line":39},[36,115020,76],{"class":46},[36,115022,114195],{"class":79},[36,115024,114198],{"class":42},[36,115026,669],{"class":62},[36,115028,114203],{"class":42},[19,115030,115031,115032,115034,115035,84881,115037,676],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,115033,104],{}," 是 site 的名字，比如 ",[33,115036,113875],{},[33,115038,114298],{},[26,115040,115042],{"className":28,"code":115041,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,115043,115044],{"__ignoreMap":31},[36,115045,115046,115048,115050],{"class":38,"line":39},[36,115047,105974],{"class":42},[36,115049,47],{"class":46},[36,115051,114212],{"class":42},[19,115053,115054],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,115056,115058],{"className":28,"code":115057,"language":30,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,115059,115060,115072],{"__ignoreMap":31},[36,115061,115062,115064,115066,115068,115070],{"class":38,"line":39},[36,115063,3948],{"class":46},[36,115065,105789],{"class":42},[36,115067,3463],{"class":46},[36,115069,899],{"class":62},[36,115071,153],{"class":42},[36,115073,115074,115076,115078,115080,115082,115084,115086,115088,115090,115092],{"class":38,"line":54},[36,115075,106235],{"class":46},[36,115077,105775],{"class":62},[36,115079,92],{"class":42},[36,115081,95],{"class":46},[36,115083,114237],{"class":50},[36,115085,101],{"class":62},[36,115087,104],{"class":42},[36,115089,107],{"class":62},[36,115091,604],{"class":50},[36,115093,123],{"class":42},[19,115095,115096,115097,115100,115101,115103],{},"如果 site 没找到，就主动报错。",[33,115098,115099],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,115102,104],{}," 的值放进字符串里。",[26,115105,115107],{"className":28,"code":115106,"language":30,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,115108,115109],{"__ignoreMap":31},[36,115110,115111,115113],{"class":38,"line":39},[36,115112,19419],{"class":46},[36,115114,114254],{"class":42},[19,115116,115117,115118,115120,115121,115124],{},"返回这个 site 的世界坐标。",[33,115119,106020],{}," 里的每一行都是一个 site 的 ",[33,115122,115123],{},"(x, y, z)"," 坐标。",[26,115126,115128],{"className":28,"code":115127,"language":30,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,115129,115130],{"__ignoreMap":31},[36,115131,115132,115134,115136],{"class":38,"line":39},[36,115133,76],{"class":46},[36,115135,114269],{"class":79},[36,115137,114272],{"class":42},[19,115139,115140],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,115142,115144],{"className":28,"code":115143,"language":30,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,115145,115146,115158],{"__ignoreMap":31},[36,115147,115148,115150,115152,115154,115156],{"class":38,"line":39},[36,115149,113907],{"class":42},[36,115151,47],{"class":46},[36,115153,114282],{"class":42},[36,115155,113875],{"class":50},[36,115157,123],{"class":42},[36,115159,115160,115162,115164,115166,115168],{"class":38,"line":54},[36,115161,113917],{"class":42},[36,115163,47],{"class":46},[36,115165,114282],{"class":42},[36,115167,114298],{"class":50},[36,115169,123],{"class":42},[19,115171,115172],{},"分别读取末端点和目标点的世界坐标。",[26,115174,115175],{"className":28,"code":114847,"language":30,"meta":31,"style":31},[33,115176,115177],{"__ignoreMap":31},[36,115178,115179,115181],{"class":38,"line":39},[36,115180,19419],{"class":46},[36,115182,114307],{"class":42},[19,115184,115185],{},"把四部分拼成一个观测数组：",[26,115187,115190],{"className":115188,"code":115189,"language":7570,"meta":31},[7568],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,115191,115189],{"__ignoreMap":31},[26,115193,115195],{"className":28,"code":115194,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,115196,115197],{"__ignoreMap":31},[36,115198,115199,115201,115203,115205,115207],{"class":38,"line":39},[36,115200,113935],{"class":42},[36,115202,47],{"class":46},[36,115204,113940],{"class":42},[36,115206,3087],{"class":46},[36,115208,113945],{"class":42},[19,115210,115211,115212,115215,115216,115219],{},"计算 tip 到 target 的距离。",[33,115213,115214],{},"tip - target"," 得到一个三维向量，",[33,115217,115218],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115221,17010],{},[26,115223,115226],{"className":115224,"code":115225,"language":7570,"meta":31},[7568],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[33,115227,115225],{"__ignoreMap":31},[26,115229,115231],{"className":28,"code":115230,"language":30,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,115232,115233],{"__ignoreMap":31},[36,115234,115235,115237,115239,115241,115243],{"class":38,"line":39},[36,115236,114882],{"class":42},[36,115238,47],{"class":46},[36,115240,114376],{"class":62},[36,115242,8899],{"class":46},[36,115244,114381],{"class":42},[19,115246,115247,115248,115251,115252,115255],{},"计算动作惩罚。",[33,115249,115250],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,115253,115254],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,115257,115259],{"className":28,"code":115258,"language":30,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,115260,115261],{"__ignoreMap":31},[36,115262,115263,115265,115267,115269,115271,115273,115275],{"class":38,"line":39},[36,115264,19419],{"class":46},[36,115266,112136],{"class":62},[36,115268,92],{"class":42},[36,115270,3087],{"class":46},[36,115272,113935],{"class":42},[36,115274,3087],{"class":46},[36,115276,114398],{"class":42},[19,115278,115279],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,115281,115282],{"className":28,"code":113142,"language":30,"meta":31,"style":31},[33,115283,115284],{"__ignoreMap":31},[36,115285,115286,115288,115290],{"class":38,"line":39},[36,115287,113149],{"class":42},[36,115289,47],{"class":46},[36,115291,107100],{"class":62},[19,115293,115294],{},"累计奖励变量，记录整个运行过程的总分。",[26,115296,115298],{"className":28,"code":115297,"language":30,"meta":31,"style":31},"for step in range(500):\n",[33,115299,115300],{"__ignoreMap":31},[36,115301,115302,115304,115306,115308,115310,115312,115314],{"class":38,"line":39},[36,115303,5410],{"class":46},[36,115305,33970],{"class":42},[36,115307,28413],{"class":46},[36,115309,34796],{"class":62},[36,115311,92],{"class":42},[36,115313,67421],{"class":62},[36,115315,1147],{"class":42},[19,115317,115318],{},"运行 500 个控制步。",[26,115320,115321],{"className":28,"code":106882,"language":30,"meta":31,"style":31},[33,115322,115323],{"__ignoreMap":31},[36,115324,115325],{"class":38,"line":39},[36,115326,106882],{"class":42},[19,115328,115329,115330,302,115332,115334],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,115331,105571],{},[33,115333,105574],{}," 是当前状态下的坐标。",[26,115336,115338],{"className":28,"code":115337,"language":30,"meta":31,"style":31},"error = target - tip\n",[33,115339,115340],{"__ignoreMap":31},[36,115341,115342,115344,115346,115348,115350],{"class":38,"line":39},[36,115343,114935],{"class":42},[36,115345,47],{"class":46},[36,115347,114507],{"class":42},[36,115349,3087],{"class":46},[36,115351,114512],{"class":42},[19,115353,115354],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,115356,115358],{"className":28,"code":115357,"language":30,"meta":31,"style":31},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[33,115359,115360,115392],{"__ignoreMap":31},[36,115361,115362,115364,115366,115368,115370,115372,115374,115376,115378,115380,115382,115384,115386,115388,115390],{"class":38,"line":39},[36,115363,108210],{"class":42},[36,115365,2751],{"class":62},[36,115367,6826],{"class":42},[36,115369,47],{"class":46},[36,115371,114529],{"class":42},[36,115373,107599],{"class":62},[36,115375,8899],{"class":46},[36,115377,114536],{"class":42},[36,115379,1911],{"class":62},[36,115381,114541],{"class":42},[36,115383,3087],{"class":46},[36,115385,104743],{"class":62},[36,115387,630],{"class":42},[36,115389,104743],{"class":62},[36,115391,123],{"class":42},[36,115393,115394,115396,115398,115400,115402,115404,115406,115408,115410,115412,115414,115416,115418,115420,115422],{"class":38,"line":54},[36,115395,108210],{"class":42},[36,115397,1906],{"class":62},[36,115399,6826],{"class":42},[36,115401,47],{"class":46},[36,115403,114529],{"class":42},[36,115405,107599],{"class":62},[36,115407,8899],{"class":46},[36,115409,114536],{"class":42},[36,115411,2751],{"class":62},[36,115413,114541],{"class":42},[36,115415,3087],{"class":46},[36,115417,104743],{"class":62},[36,115419,630],{"class":42},[36,115421,104743],{"class":62},[36,115423,123],{"class":42},[19,115425,115426,115427,115430],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,115428,115429],{},"error -> ctrl -> step"," 的流程。",[26,115432,115433],{"className":28,"code":106844,"language":30,"meta":31,"style":31},[33,115434,115435],{"__ignoreMap":31},[36,115436,115437],{"class":38,"line":39},[36,115438,106844],{"class":42},[19,115440,115441],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,115443,115445],{"className":28,"code":115444,"language":30,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,115446,115447],{"__ignoreMap":31},[36,115448,115449,115451,115453],{"class":38,"line":39},[36,115450,113193],{"class":42},[36,115452,47],{"class":46},[36,115454,114630],{"class":42},[19,115456,115457,115458,115461],{},"读取最新观测。后面打印 ",[33,115459,115460],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115463,104656],{"id":104655},[19,115465,115466],{},"观测维度为:",[26,115468,115471],{"className":115469,"code":115470,"language":7570,"meta":31},[7568],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,115472,115470],{"__ignoreMap":31},[19,115474,115475],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115477,115478],{},"程序每 100 步打印：",[26,115480,115483],{"className":115481,"code":115482,"language":7570,"meta":31},[7568],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,115484,115482],{"__ignoreMap":31},[19,115486,115487,115488,115490],{},"如果控制有效，你应该看到最终 ",[33,115489,105571],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115492,104688],{"id":104687},[650,115494,115495,115498,115501,115507,115513,115520,115530],{},[653,115496,115497],{},"修改目标点位置。",[653,115499,115500],{},"重新运行，观察最终 tip 是否变化。",[653,115502,115503,115504,115506],{},"把 gravity 改成 ",[33,115505,104929],{},"，观察控制是否变差。",[653,115508,113520,115509,113524,115511,676],{},[33,115510,104498],{},[33,115512,1911],{},[653,115514,104751,115515,104754,115517,115519],{},[33,115516,112935],{},[33,115518,109646],{},"，观察机械臂是否更难移动。",[653,115521,104751,115522,84872,115524,104754,115526,115529],{},[33,115523,105574],{},[33,115525,106486],{},[33,115527,115528],{},"0.2 0 0.6","，观察 reward 和 final tip。",[653,115531,115532],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115534,104793],{"id":104792},[1752,115536,115538],{"id":115537},"site-not-found",[33,115539,115540],{},"site not found",[19,115542,115543,115544,302,115547,676],{},"检查 XML 中是否有 ",[33,115545,115546],{},"site name=\"tip\"",[33,115548,115549],{},"site name=\"target\"",[1752,115551,115552],{"id":115552},"机械臂完全不动",[19,115554,104863],{},[650,115556,115557,115562,115565,115570],{},[653,115558,115559,115561],{},[33,115560,104498],{}," 是否为 2",[653,115563,115564],{},"actuator 是否引用正确 joint",[653,115566,115567,115569],{},[33,115568,103416],{}," 是否被赋值",[653,115571,115572,115573],{},"是否执行了 ",[33,115574,103026],{},[1752,115576,115577],{"id":115577},"控制效果不好",[19,115579,115580],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,115582,115585],{"className":115583,"code":115584,"language":7570,"meta":31},[7568],"obs → action → mj_step → reward → next_obs\n",[33,115586,115584],{"__ignoreMap":31},[1752,115588,115590],{"id":115589},"tip-坐标不变化","tip 坐标不变化",[19,115592,104915],{},[650,115594,115595,115600,115608,115617],{},[653,115596,115597,115598,676],{},"是否每步调用了 ",[33,115599,103026],{},[653,115601,115602,115603,302,115605,676],{},"是否写入了 ",[33,115604,108465],{},[33,115606,115607],{},"data.ctrl[1]",[653,115609,115610,115611,2031,115614,676],{},"actuator 是否正确引用 ",[33,115612,115613],{},"joint1",[33,115615,115616],{},"joint2",[653,115618,115619],{},"控制输入是否太小。",[1752,115621,115622],{"id":115622},"目标点不会动",[19,115624,115625],{},"本章的 target 是固定 site：",[26,115627,115629],{"className":55415,"code":115628,"language":55417,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,115630,115631],{"__ignoreMap":31},[36,115632,115633,115635,115637,115639,115641,115643,115645,115647,115650],{"class":38,"line":39},[36,115634,3463],{"class":42},[36,115636,105550],{"class":53649},[36,115638,17295],{"class":79},[36,115640,47],{"class":42},[36,115642,114298],{"class":50},[36,115644,103446],{"class":79},[36,115646,47],{"class":42},[36,115648,115649],{"class":50},"\"0.5 0 0.4\"",[36,115651,115652],{"class":42}," ...\u002F>\n",[19,115654,115655,115656,115658],{},"它直接挂在 ",[33,115657,104181],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1752,115660,115661],{"id":115661},"机械臂不像真实机械臂",[19,115663,115664],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115666,104947],{"id":104946},[19,115668,115669],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115671,115672],{},"核心公式：",[26,115674,115677],{"className":115675,"code":115676,"language":7570,"meta":31},[7568],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,115678,115676],{"__ignoreMap":31},[19,115680,115681],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2467,115683,115684],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":115686},[115687,115688,115689,115694,115698,115699,115700,115708],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":115690},[115691,115692,115693],{"id":113890,"depth":66,"text":113891},{"id":113966,"depth":66,"text":113966},{"id":113996,"depth":66,"text":113997},{"id":103592,"depth":54,"text":103593,"children":115695},[115696,115697],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":115701},[115702,115703,115704,115705,115706,115707],{"id":115537,"depth":66,"text":115540},{"id":115552,"depth":66,"text":115552},{"id":115577,"depth":66,"text":115577},{"id":115589,"depth":66,"text":115590},{"id":115622,"depth":66,"text":115622},{"id":115661,"depth":66,"text":115661},{"id":104946,"depth":54,"text":104947},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113694,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115715,"title":115716,"body":115717,"description":31,"extension":2494,"meta":119179,"navigation":69,"path":119180,"seo":119181,"stem":119182,"__hash__":119183},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115718,"toc":119150},[115719,115722,115724,115727,115730,115755,115758,115764,115767,115773,115775,115777,115801,115803,115821,115823,115866,115868,115895,115897,115900,115952,115955,115961,115970,115973,116011,116014,116053,116056,116064,116071,116074,116080,116082,116136,116143,116188,116191,116195,116211,116221,116223,117484,117486,117498,117500,117511,117513,117516,117537,117540,117543,117576,117582,117585,117618,117621,117624,117665,117670,117684,117687,117700,117705,117728,117730,117745,117755,117770,117777,117797,117812,117830,117833,117850,117858,117874,117880,117912,117925,117957,117967,118002,118016,118062,118076,118118,118129,118142,118148,118181,118184,118211,118221,118261,118271,118288,118295,118313,118316,118357,118370,118385,118388,118411,118414,118426,118429,118448,118453,118474,118477,118492,118495,118529,118541,118556,118559,118584,118587,118606,118609,118641,118644,118668,118674,118704,118711,118724,118727,118729,118731,118737,118740,118743,118755,118758,118760,118814,118816,118820,118826,118835,118838,118845,118847,118870,118873,118877,118879,118897,118903,118905,118938,118941,118947,118951,118954,118974,118979,118983,118990,119010,119015,119019,119022,119042,119045,119131,119135,119138,119144,119147],[10,115720,115716],{"id":115721},"_8gymnasium-风格强化学习接口基础",[14,115723,102988],{"id":102987},[19,115725,115726],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115728,115729],{},"你将实现:",[26,115731,115733],{"className":28,"code":115732,"language":30,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,115734,115735,115745],{"__ignoreMap":31},[36,115736,115737,115740,115742],{"class":38,"line":39},[36,115738,115739],{"class":42},"obs, info ",[36,115741,47],{"class":46},[36,115743,115744],{"class":42}," env.reset()\n",[36,115746,115747,115750,115752],{"class":38,"line":54},[36,115748,115749],{"class":42},"obs, reward, terminated, truncated, info ",[36,115751,47],{"class":46},[36,115753,115754],{"class":42}," env.step(action)\n",[19,115756,115757],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115759,115760,115761,115763],{},"前面章节的代码都是“脚本式”的：在 ",[33,115762,104635],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115765,115766],{},"可以先记住 Gymnasium 环境的核心交互：",[26,115768,115771],{"className":115769,"code":115770,"language":7570,"meta":31},[7568],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,115772,115770],{"__ignoreMap":31},[14,115774,103111],{"id":103110},[19,115776,103114],{},[26,115778,115779],{"className":26192,"code":106727,"language":26194,"meta":31,"style":31},[33,115780,115781],{"__ignoreMap":31},[36,115782,115783,115785,115787,115789,115791,115793,115795,115797,115799],{"class":38,"line":39},[36,115784,26947],{"class":79},[36,115786,28685],{"class":50},[36,115788,26204],{"class":50},[36,115790,28770],{"class":62},[36,115792,106742],{"class":50},[36,115794,103139],{"class":50},[36,115796,104841],{"class":50},[36,115798,103155],{"class":50},[36,115800,106751],{"class":50},[19,115802,105159],{},[26,115804,115806],{"className":26192,"code":115805,"language":26194,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,115807,115808],{"__ignoreMap":31},[36,115809,115810,115812,115814,115816,115818],{"class":38,"line":39},[36,115811,26201],{"class":79},[36,115813,26204],{"class":50},[36,115815,103271],{"class":50},[36,115817,110050],{"class":50},[36,115819,115820],{"class":50}," gymnasium\n",[19,115822,105176],{},[26,115824,115826],{"className":26192,"code":115825,"language":26194,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,115827,115828,115845,115854],{"__ignoreMap":31},[36,115829,115830,115832,115834,115836,115839,115841,115843],{"class":38,"line":39},[36,115831,32699],{"class":79},[36,115833,31545],{"class":50},[36,115835,27486],{"class":62},[36,115837,115838],{"class":50}," mujoco-gym-api",[36,115840,103316],{"class":50},[36,115842,103319],{"class":62},[36,115844,103322],{"class":62},[36,115846,115847,115849,115851],{"class":38,"line":54},[36,115848,32699],{"class":79},[36,115850,103329],{"class":50},[36,115852,115853],{"class":50}," mujoco-gym-api\n",[36,115855,115856,115858,115860,115862,115864],{"class":38,"line":66},[36,115857,26201],{"class":79},[36,115859,26204],{"class":50},[36,115861,103271],{"class":50},[36,115863,110050],{"class":50},[36,115865,115820],{"class":50},[19,115867,103345],{},[650,115869,115870,115880,115883,115889],{},[653,115871,115872,115873,115876,115877,676],{},"本章使用 ",[33,115874,115875],{},"gymnasium","，不是旧版 ",[33,115878,115879],{},"gym",[653,115881,115882],{},"Gymnasium API 与旧 Gym API 有差异。",[653,115884,115885,115886,676],{},"旧 Gym 常见返回值是 4 个: ",[33,115887,115888],{},"obs, reward, done, info",[653,115890,115891,115892,676],{},"Gymnasium 返回值是 5 个: ",[33,115893,115894],{},"obs, reward, terminated, truncated, info",[14,115896,103385],{"id":103384},[19,115898,115899],{},"强化学习环境接口包含:",[2698,115901,115902,115911],{},[2701,115903,115904],{},[2704,115905,115906,115909],{},[2707,115907,115908],{"align":26106},"方法",[2707,115910,105036],{"align":26106},[2744,115912,115913,115923,115933,115943],{},[2704,115914,115915,115920],{},[2749,115916,115917],{"align":26106},[33,115918,115919],{},"reset()",[2749,115921,115922],{"align":26106},"重置环境",[2704,115924,115925,115930],{},[2749,115926,115927],{"align":26106},[33,115928,115929],{},"step(action)",[2749,115931,115932],{"align":26106},"执行动作",[2704,115934,115935,115940],{},[2749,115936,115937],{"align":26106},[33,115938,115939],{},"observation_space",[2749,115941,115942],{"align":26106},"观测空间",[2704,115944,115945,115950],{},[2749,115946,115947],{"align":26106},[33,115948,115949],{},"action_space",[2749,115951,26024],{"align":26106},[19,115953,115954],{},"一个最小环境需要完成:",[26,115956,115959],{"className":115957,"code":115958,"language":7570,"meta":31},[7568],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,115960,115958],{"__ignoreMap":31},[1752,115962,115964,302,115967,106977],{"id":115963},"terminated-和-truncated-的区别",[33,115965,115966],{},"terminated",[33,115968,115969],{},"truncated",[19,115971,115972],{},"Gymnasium 把“结束”拆成两个概念：",[2698,115974,115975,115985],{},[2701,115976,115977],{},[2704,115978,115979,115981,115983],{},[2707,115980,106913],{"align":26106},[2707,115982,103041],{"align":26106},[2707,115984,23557],{"align":26106},[2744,115986,115987,115999],{},[2704,115988,115989,115993,115996],{},[2749,115990,115991],{"align":26106},[33,115992,115966],{},[2749,115994,115995],{"align":26106},"任务自然结束",[2749,115997,115998],{"align":26106},"机械臂到达目标、机器人摔倒",[2704,116000,116001,116005,116008],{},[2749,116002,116003],{"align":26106},[33,116004,115969],{},[2749,116006,116007],{"align":26106},"因外部限制截断",[2749,116009,116010],{"align":26106},"达到最大步数、时间限制",[19,116012,116013],{},"本章中：",[26,116015,116017],{"className":28,"code":116016,"language":30,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,116018,116019,116034],{"__ignoreMap":31},[36,116020,116021,116024,116026,116029,116031],{"class":38,"line":39},[36,116022,116023],{"class":42},"terminated ",[36,116025,47],{"class":46},[36,116027,116028],{"class":42}," dist ",[36,116030,3463],{"class":46},[36,116032,116033],{"class":62}," 0.05\n",[36,116035,116036,116039,116041,116043,116046,116048,116050],{"class":38,"line":54},[36,116037,116038],{"class":42},"truncated ",[36,116040,47],{"class":46},[36,116042,868],{"class":62},[36,116044,116045],{"class":42},".steps ",[36,116047,2127],{"class":46},[36,116049,868],{"class":62},[36,116051,116052],{"class":42},".max_steps\n",[19,116054,116055],{},"也就是：",[650,116057,116058,116061],{},[653,116059,116060],{},"末端距离目标小于 0.05，任务成功结束。",[653,116062,116063],{},"步数超过上限，episode 被截断。",[1752,116065,116067,302,116069],{"id":116066},"observation_space-和-action_space",[33,116068,115939],{},[33,116070,115949],{},[19,116072,116073],{},"这两个对象告诉算法：",[26,116075,116078],{"className":116076,"code":116077,"language":7570,"meta":31},[7568],"观测长什么样\n动作允许多大\n",[33,116079,116077],{"__ignoreMap":31},[19,116081,17010],{},[26,116083,116085],{"className":28,"code":116084,"language":30,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,116086,116087],{"__ignoreMap":31},[36,116088,116089,116091,116094,116096,116099,116102,116105,116107,116109,116112,116114,116116,116118,116120,116122,116124,116126,116129,116131,116133],{"class":38,"line":39},[36,116090,481],{"class":62},[36,116092,116093],{"class":42},".action_space ",[36,116095,47],{"class":46},[36,116097,116098],{"class":42}," spaces.Box(",[36,116100,116101],{"class":7598},"low",[36,116103,116104],{"class":46},"=-",[36,116106,104743],{"class":62},[36,116108,630],{"class":42},[36,116110,116111],{"class":7598},"high",[36,116113,47],{"class":46},[36,116115,104743],{"class":62},[36,116117,630],{"class":42},[36,116119,98304],{"class":7598},[36,116121,47],{"class":46},[36,116123,92],{"class":42},[36,116125,1911],{"class":62},[36,116127,116128],{"class":42},",), ",[36,116130,95841],{"class":7598},[36,116132,47],{"class":46},[36,116134,116135],{"class":42},"np.float32)\n",[19,116137,116138,116139,116142],{},"表示动作是 2 维数组，每个值都在 ",[33,116140,116141],{},"[-1, 1]"," 范围内。",[26,116144,116146],{"className":28,"code":116145,"language":30,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,116147,116148],{"__ignoreMap":31},[36,116149,116150,116152,116155,116157,116159,116161,116163,116166,116168,116170,116172,116174,116176,116178,116180,116182,116184,116186],{"class":38,"line":39},[36,116151,481],{"class":62},[36,116153,116154],{"class":42},".observation_space ",[36,116156,47],{"class":46},[36,116158,116098],{"class":42},[36,116160,116101],{"class":7598},[36,116162,116104],{"class":46},[36,116164,116165],{"class":42},"np.inf, ",[36,116167,116111],{"class":7598},[36,116169,47],{"class":46},[36,116171,116165],{"class":42},[36,116173,98304],{"class":7598},[36,116175,47],{"class":46},[36,116177,92],{"class":42},[36,116179,3002],{"class":62},[36,116181,116128],{"class":42},[36,116183,95841],{"class":7598},[36,116185,47],{"class":46},[36,116187,116135],{"class":42},[19,116189,116190],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1752,116192,116194],{"id":116193},"frame_skip-是什么","frame_skip 是什么",[26,116196,116198],{"className":28,"code":116197,"language":30,"meta":31,"style":31},"self.frame_skip = 5\n",[33,116199,116200],{"__ignoreMap":31},[36,116201,116202,116204,116207,116209],{"class":38,"line":39},[36,116203,481],{"class":62},[36,116205,116206],{"class":42},".frame_skip ",[36,116208,47],{"class":46},[36,116210,56775],{"class":62},[19,116212,116213,116214,116217,116218,116220],{},"表示外部调用一次 ",[33,116215,116216],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,116219,103555],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116222,103593],{"id":103592},[26,116224,116226],{"className":28,"code":116225,"language":30,"meta":31,"style":31},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,116227,116228,116240,116246,116256,116267,116271,116275,116283,116288,116292,116296,116300,116304,116308,116312,116316,116321,116325,116329,116333,116338,116342,116346,116350,116354,116358,116362,116366,116370,116374,116378,116382,116386,116390,116408,116423,116427,116440,116450,116465,116482,116486,116507,116526,116551,116565,116569,116579,116591,116601,116605,116647,116685,116689,116699,116715,116730,116749,116756,116760,116773,116788,116803,116816,116835,116851,116855,116896,116911,116926,116930,116969,116980,116993,116997,117007,117016,117020,117030,117045,117063,117067,117078,117095,117108,117112,117122,117126,117137,117148,117152,117166,117180,117196,117200,117213,117230,117245,117252,117256,117260,117272,117282,117300,117312,117324,117328,117336,117352,117361,117370,117378,117420,117433,117438,117442,117460,117464,117468,117480],{"__ignoreMap":31},[36,116229,116230,116232,116235,116237],{"class":38,"line":39},[36,116231,1943],{"class":46},[36,116233,116234],{"class":42}," gymnasium ",[36,116236,33737],{"class":46},[36,116238,116239],{"class":42}," gym\n",[36,116241,116242,116244],{"class":38,"line":54},[36,116243,1943],{"class":46},[36,116245,103641],{"class":42},[36,116247,116248,116250,116252,116254],{"class":38,"line":66},[36,116249,1943],{"class":46},[36,116251,33734],{"class":42},[36,116253,33737],{"class":46},[36,116255,33740],{"class":42},[36,116257,116258,116260,116262,116264],{"class":38,"line":73},[36,116259,1937],{"class":46},[36,116261,116234],{"class":42},[36,116263,1943],{"class":46},[36,116265,116266],{"class":42}," spaces\n",[36,116268,116269],{"class":38,"line":86},[36,116270,70],{"emptyLinePlaceholder":69},[36,116272,116273],{"class":38,"line":126},[36,116274,70],{"emptyLinePlaceholder":69},[36,116276,116277,116279,116281],{"class":38,"line":131},[36,116278,103654],{"class":62},[36,116280,15941],{"class":46},[36,116282,103659],{"class":50},[36,116284,116285],{"class":38,"line":225},[36,116286,116287],{"class":50},"\u003Cmujoco model=\"gym_reacher\">\n",[36,116289,116290],{"class":38,"line":235},[36,116291,114077],{"class":50},[36,116293,116294],{"class":38,"line":377},[36,116295,70],{"emptyLinePlaceholder":69},[36,116297,116298],{"class":38,"line":617},[36,116299,103678],{"class":50},[36,116301,116302],{"class":38,"line":643},[36,116303,114095],{"class":50},[36,116305,116306],{"class":38,"line":921},[36,116307,70],{"emptyLinePlaceholder":69},[36,116309,116310],{"class":38,"line":934},[36,116311,114104],{"class":50},[36,116313,116314],{"class":38,"line":939},[36,116315,114109],{"class":50},[36,116317,116318],{"class":38,"line":949},[36,116319,116320],{"class":50},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,116322,116323],{"class":38,"line":962},[36,116324,70],{"emptyLinePlaceholder":69},[36,116326,116327],{"class":38,"line":974},[36,116328,114123],{"class":50},[36,116330,116331],{"class":38,"line":979},[36,116332,114128],{"class":50},[36,116334,116335],{"class":38,"line":994},[36,116336,116337],{"class":50},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,116339,116340],{"class":38,"line":1006},[36,116341,114138],{"class":50},[36,116343,116344],{"class":38,"line":1011},[36,116345,108777],{"class":50},[36,116347,116348],{"class":38,"line":1023},[36,116349,103707],{"class":50},[36,116351,116352],{"class":38,"line":1028},[36,116353,103712],{"class":50},[36,116355,116356],{"class":38,"line":1033},[36,116357,70],{"emptyLinePlaceholder":69},[36,116359,116360],{"class":38,"line":1053},[36,116361,108794],{"class":50},[36,116363,116364],{"class":38,"line":1064},[36,116365,114163],{"class":50},[36,116367,116368],{"class":38,"line":1075},[36,116369,114168],{"class":50},[36,116371,116372],{"class":38,"line":2291},[36,116373,108804],{"class":50},[36,116375,116376],{"class":38,"line":2329},[36,116377,103717],{"class":50},[36,116379,116380],{"class":38,"line":2334},[36,116381,98039],{"class":50},[36,116383,116384],{"class":38,"line":2339},[36,116385,70],{"emptyLinePlaceholder":69},[36,116387,116388],{"class":38,"line":2365},[36,116389,70],{"emptyLinePlaceholder":69},[36,116391,116392,116394,116397,116399,116401,116403,116406],{"class":38,"line":2373},[36,116393,147],{"class":46},[36,116395,116396],{"class":79}," ReacherEnv",[36,116398,92],{"class":42},[36,116400,115879],{"class":79},[36,116402,3113],{"class":42},[36,116404,116405],{"class":79},"Env",[36,116407,1147],{"class":42},[36,116409,116410,116413,116415,116417,116420],{"class":38,"line":5001},[36,116411,116412],{"class":42},"    metadata ",[36,116414,47],{"class":46},[36,116416,6831],{"class":42},[36,116418,116419],{"class":50},"\"render_modes\"",[36,116421,116422],{"class":42},": []}\n",[36,116424,116425],{"class":38,"line":5006},[36,116426,70],{"emptyLinePlaceholder":69},[36,116428,116429,116431,116433,116436,116438],{"class":38,"line":10328},[36,116430,158],{"class":46},[36,116432,515],{"class":62},[36,116434,116435],{"class":42},"(self) -> ",[36,116437,98027],{"class":62},[36,116439,153],{"class":42},[36,116441,116442,116444,116446,116448],{"class":38,"line":10352},[36,116443,1432],{"class":62},[36,116445,1435],{"class":42},[36,116447,494],{"class":62},[36,116449,4369],{"class":42},[36,116451,116452,116454,116457,116459,116461,116463],{"class":38,"line":10357},[36,116453,523],{"class":62},[36,116455,116456],{"class":42},".model ",[36,116458,47],{"class":46},[36,116460,103752],{"class":42},[36,116462,103654],{"class":62},[36,116464,123],{"class":42},[36,116466,116467,116469,116472,116474,116477,116479],{"class":38,"line":10363},[36,116468,523],{"class":62},[36,116470,116471],{"class":42},".data ",[36,116473,47],{"class":46},[36,116475,116476],{"class":42}," mujoco.MjData(",[36,116478,481],{"class":62},[36,116480,116481],{"class":42},".model)\n",[36,116483,116484],{"class":38,"line":10390},[36,116485,70],{"emptyLinePlaceholder":69},[36,116487,116488,116490,116493,116495,116498,116500,116503,116505],{"class":38,"line":10395},[36,116489,523],{"class":62},[36,116491,116492],{"class":42},".tip_site_id ",[36,116494,47],{"class":46},[36,116496,116497],{"class":42}," mujoco.mj_name2id(",[36,116499,481],{"class":62},[36,116501,116502],{"class":42},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,116504,113875],{"class":50},[36,116506,123],{"class":42},[36,116508,116509,116511,116514,116516,116518,116520,116522,116524],{"class":38,"line":10401},[36,116510,523],{"class":62},[36,116512,116513],{"class":42},".target_site_id ",[36,116515,47],{"class":46},[36,116517,116497],{"class":42},[36,116519,481],{"class":62},[36,116521,116502],{"class":42},[36,116523,114298],{"class":50},[36,116525,123],{"class":42},[36,116527,116528,116530,116532,116534,116536,116538,116541,116543,116545,116547,116549],{"class":38,"line":10413},[36,116529,890],{"class":46},[36,116531,868],{"class":62},[36,116533,116492],{"class":42},[36,116535,3463],{"class":46},[36,116537,899],{"class":62},[36,116539,116540],{"class":46}," or",[36,116542,868],{"class":62},[36,116544,116513],{"class":42},[36,116546,3463],{"class":46},[36,116548,899],{"class":62},[36,116550,153],{"class":42},[36,116552,116553,116556,116558,116560,116563],{"class":38,"line":10425},[36,116554,116555],{"class":46},"            raise",[36,116557,105775],{"class":62},[36,116559,92],{"class":42},[36,116561,116562],{"class":50},"\"required sites not found\"",[36,116564,123],{"class":42},[36,116566,116567],{"class":38,"line":10437},[36,116568,70],{"emptyLinePlaceholder":69},[36,116570,116571,116573,116575,116577],{"class":38,"line":12095},[36,116572,523],{"class":62},[36,116574,116206],{"class":42},[36,116576,47],{"class":46},[36,116578,56775],{"class":62},[36,116580,116581,116583,116586,116588],{"class":38,"line":12120},[36,116582,523],{"class":62},[36,116584,116585],{"class":42},".max_steps ",[36,116587,47],{"class":46},[36,116589,116590],{"class":62}," 200\n",[36,116592,116593,116595,116597,116599],{"class":38,"line":12143},[36,116594,523],{"class":62},[36,116596,116045],{"class":42},[36,116598,47],{"class":46},[36,116600,49682],{"class":62},[36,116602,116603],{"class":38,"line":12167},[36,116604,70],{"emptyLinePlaceholder":69},[36,116606,116607,116609,116611,116613,116615,116617,116619,116621,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645],{"class":38,"line":12172},[36,116608,523],{"class":62},[36,116610,116093],{"class":42},[36,116612,47],{"class":46},[36,116614,116098],{"class":42},[36,116616,116101],{"class":7598},[36,116618,116104],{"class":46},[36,116620,104743],{"class":62},[36,116622,630],{"class":42},[36,116624,116111],{"class":7598},[36,116626,47],{"class":46},[36,116628,104743],{"class":62},[36,116630,630],{"class":42},[36,116632,98304],{"class":7598},[36,116634,47],{"class":46},[36,116636,92],{"class":42},[36,116638,1911],{"class":62},[36,116640,116128],{"class":42},[36,116642,95841],{"class":7598},[36,116644,47],{"class":46},[36,116646,116135],{"class":42},[36,116648,116649,116651,116653,116655,116657,116659,116661,116663,116665,116667,116669,116671,116673,116675,116677,116679,116681,116683],{"class":38,"line":12177},[36,116650,523],{"class":62},[36,116652,116154],{"class":42},[36,116654,47],{"class":46},[36,116656,116098],{"class":42},[36,116658,116101],{"class":7598},[36,116660,116104],{"class":46},[36,116662,116165],{"class":42},[36,116664,116111],{"class":7598},[36,116666,47],{"class":46},[36,116668,116165],{"class":42},[36,116670,98304],{"class":7598},[36,116672,47],{"class":46},[36,116674,92],{"class":42},[36,116676,3002],{"class":62},[36,116678,116128],{"class":42},[36,116680,95841],{"class":7598},[36,116682,47],{"class":46},[36,116684,116135],{"class":42},[36,116686,116687],{"class":38,"line":12182},[36,116688,70],{"emptyLinePlaceholder":69},[36,116690,116691,116693,116696],{"class":38,"line":12191},[36,116692,158],{"class":46},[36,116694,116695],{"class":79}," _get_obs",[36,116697,116698],{"class":42},"(self) -> np.ndarray:\n",[36,116700,116701,116703,116705,116707,116710,116712],{"class":38,"line":12196},[36,116702,114476],{"class":42},[36,116704,47],{"class":46},[36,116706,868],{"class":62},[36,116708,116709],{"class":42},".data.site_xpos[",[36,116711,481],{"class":62},[36,116713,116714],{"class":42},".tip_site_id].copy()\n",[36,116716,116717,116719,116721,116723,116725,116727],{"class":38,"line":12202},[36,116718,114489],{"class":42},[36,116720,47],{"class":46},[36,116722,868],{"class":62},[36,116724,116709],{"class":42},[36,116726,481],{"class":62},[36,116728,116729],{"class":42},".target_site_id].copy()\n",[36,116731,116732,116734,116736,116739,116741,116744,116746],{"class":38,"line":12223},[36,116733,112521],{"class":42},[36,116735,47],{"class":46},[36,116737,116738],{"class":42}," np.concatenate([",[36,116740,481],{"class":62},[36,116742,116743],{"class":42},".data.qpos.copy(), ",[36,116745,481],{"class":62},[36,116747,116748],{"class":42},".data.qvel.copy(), tip, target])\n",[36,116750,116751,116753],{"class":38,"line":12229},[36,116752,736],{"class":46},[36,116754,116755],{"class":42}," obs.astype(np.float32)\n",[36,116757,116758],{"class":38,"line":12243},[36,116759,70],{"emptyLinePlaceholder":69},[36,116761,116762,116764,116767,116769,116771],{"class":38,"line":12249},[36,116763,158],{"class":46},[36,116765,116766],{"class":79}," _get_reward",[36,116768,116435],{"class":42},[36,116770,2605],{"class":62},[36,116772,153],{"class":42},[36,116774,116775,116777,116779,116781,116783,116785],{"class":38,"line":12276},[36,116776,114476],{"class":42},[36,116778,47],{"class":46},[36,116780,868],{"class":62},[36,116782,116709],{"class":42},[36,116784,481],{"class":62},[36,116786,116787],{"class":42},".tip_site_id]\n",[36,116789,116790,116792,116794,116796,116798,116800],{"class":38,"line":12285},[36,116791,114489],{"class":42},[36,116793,47],{"class":46},[36,116795,868],{"class":62},[36,116797,116709],{"class":42},[36,116799,481],{"class":62},[36,116801,116802],{"class":42},".target_site_id]\n",[36,116804,116805,116808,116810,116812,116814],{"class":38,"line":12291},[36,116806,116807],{"class":42},"        dist ",[36,116809,47],{"class":46},[36,116811,113940],{"class":42},[36,116813,3087],{"class":46},[36,116815,113945],{"class":42},[36,116817,116818,116821,116823,116825,116827,116830,116832],{"class":38,"line":12299},[36,116819,116820],{"class":42},"        control_cost ",[36,116822,47],{"class":46},[36,116824,114376],{"class":62},[36,116826,8899],{"class":46},[36,116828,116829],{"class":42}," np.sum(np.square(",[36,116831,481],{"class":62},[36,116833,116834],{"class":42},".data.ctrl))\n",[36,116836,116837,116839,116841,116843,116845,116847,116849],{"class":38,"line":12304},[36,116838,736],{"class":46},[36,116840,112136],{"class":62},[36,116842,92],{"class":42},[36,116844,3087],{"class":46},[36,116846,113935],{"class":42},[36,116848,3087],{"class":46},[36,116850,114398],{"class":42},[36,116852,116853],{"class":38,"line":18977},[36,116854,70],{"emptyLinePlaceholder":69},[36,116856,116857,116859,116862,116865,116867,116870,116872,116874,116876,116878,116880,116883,116886,116888,116890,116892,116894],{"class":38,"line":18983},[36,116858,158],{"class":46},[36,116860,116861],{"class":79}," reset",[36,116863,116864],{"class":42},"(self, ",[36,116866,3011],{"class":46},[36,116868,116869],{"class":42},", seed: ",[36,116871,2570],{"class":62},[36,116873,27480],{"class":46},[36,116875,41282],{"class":62},[36,116877,15941],{"class":46},[36,116879,41282],{"class":62},[36,116881,116882],{"class":42},", options: ",[36,116884,116885],{"class":62},"dict",[36,116887,27480],{"class":46},[36,116889,41282],{"class":62},[36,116891,15941],{"class":46},[36,116893,41282],{"class":62},[36,116895,1147],{"class":42},[36,116897,116898,116900,116903,116906,116908],{"class":38,"line":19006},[36,116899,1432],{"class":62},[36,116901,116902],{"class":42},"().reset(",[36,116904,116905],{"class":7598},"seed",[36,116907,47],{"class":46},[36,116909,116910],{"class":42},"seed)\n",[36,116912,116913,116916,116918,116921,116923],{"class":38,"line":19012},[36,116914,116915],{"class":42},"        mujoco.mj_resetData(",[36,116917,481],{"class":62},[36,116919,116920],{"class":42},".model, ",[36,116922,481],{"class":62},[36,116924,116925],{"class":42},".data)\n",[36,116927,116928],{"class":38,"line":19035},[36,116929,70],{"emptyLinePlaceholder":69},[36,116931,116932,116934,116937,116939,116941,116944,116946,116948,116950,116952,116954,116956,116958,116960,116962,116964,116966],{"class":38,"line":19049},[36,116933,523],{"class":62},[36,116935,116936],{"class":42},".data.qpos[:] ",[36,116938,47],{"class":46},[36,116940,868],{"class":62},[36,116942,116943],{"class":42},".np_random.uniform(",[36,116945,116101],{"class":7598},[36,116947,116104],{"class":46},[36,116949,88552],{"class":62},[36,116951,630],{"class":42},[36,116953,116111],{"class":7598},[36,116955,47],{"class":46},[36,116957,88552],{"class":62},[36,116959,630],{"class":42},[36,116961,33850],{"class":7598},[36,116963,47],{"class":46},[36,116965,481],{"class":62},[36,116967,116968],{"class":42},".model.nq)\n",[36,116970,116971,116973,116976,116978],{"class":38,"line":19069},[36,116972,523],{"class":62},[36,116974,116975],{"class":42},".data.qvel[:] ",[36,116977,47],{"class":46},[36,116979,107100],{"class":62},[36,116981,116982,116985,116987,116989,116991],{"class":38,"line":19075},[36,116983,116984],{"class":42},"        mujoco.mj_forward(",[36,116986,481],{"class":62},[36,116988,116920],{"class":42},[36,116990,481],{"class":62},[36,116992,116925],{"class":42},[36,116994,116995],{"class":38,"line":19086},[36,116996,70],{"emptyLinePlaceholder":69},[36,116998,116999,117001,117003,117005],{"class":38,"line":19109},[36,117000,523],{"class":62},[36,117002,116045],{"class":42},[36,117004,47],{"class":46},[36,117006,49682],{"class":62},[36,117008,117009,117011,117013],{"class":38,"line":19131},[36,117010,736],{"class":46},[36,117012,868],{"class":62},[36,117014,117015],{"class":42},"._get_obs(), {}\n",[36,117017,117018],{"class":38,"line":19136},[36,117019,70],{"emptyLinePlaceholder":69},[36,117021,117022,117024,117027],{"class":38,"line":19142},[36,117023,158],{"class":46},[36,117025,117026],{"class":79}," step",[36,117028,117029],{"class":42},"(self, action):\n",[36,117031,117032,117034,117036,117039,117041,117043],{"class":38,"line":19156},[36,117033,112561],{"class":42},[36,117035,47],{"class":46},[36,117037,117038],{"class":42}," np.asarray(action, ",[36,117040,95841],{"class":7598},[36,117042,47],{"class":46},[36,117044,116135],{"class":42},[36,117046,117047,117049,117051,117053,117055,117058,117060],{"class":38,"line":19169},[36,117048,112561],{"class":42},[36,117050,47],{"class":46},[36,117052,109786],{"class":42},[36,117054,481],{"class":62},[36,117056,117057],{"class":42},".action_space.low, ",[36,117059,481],{"class":62},[36,117061,117062],{"class":42},".action_space.high)\n",[36,117064,117065],{"class":38,"line":19174},[36,117066,70],{"emptyLinePlaceholder":69},[36,117068,117069,117071,117074,117076],{"class":38,"line":19188},[36,117070,523],{"class":62},[36,117072,117073],{"class":42},".data.ctrl[:] ",[36,117075,47],{"class":46},[36,117077,109809],{"class":42},[36,117079,117080,117082,117084,117086,117088,117090,117092],{"class":38,"line":19193},[36,117081,5788],{"class":46},[36,117083,103841],{"class":42},[36,117085,28413],{"class":46},[36,117087,34796],{"class":62},[36,117089,92],{"class":42},[36,117091,481],{"class":62},[36,117093,117094],{"class":42},".frame_skip):\n",[36,117096,117097,117100,117102,117104,117106],{"class":38,"line":19199},[36,117098,117099],{"class":42},"            mujoco.mj_step(",[36,117101,481],{"class":62},[36,117103,116920],{"class":42},[36,117105,481],{"class":62},[36,117107,116925],{"class":42},[36,117109,117110],{"class":38,"line":19204},[36,117111,70],{"emptyLinePlaceholder":69},[36,117113,117114,117116,117118,117120],{"class":38,"line":19218},[36,117115,523],{"class":62},[36,117117,116045],{"class":42},[36,117119,928],{"class":46},[36,117121,58047],{"class":62},[36,117123,117124],{"class":38,"line":19223},[36,117125,70],{"emptyLinePlaceholder":69},[36,117127,117128,117130,117132,117134],{"class":38,"line":19228},[36,117129,112521],{"class":42},[36,117131,47],{"class":46},[36,117133,868],{"class":62},[36,117135,117136],{"class":42},"._get_obs()\n",[36,117138,117139,117141,117143,117145],{"class":38,"line":19242},[36,117140,112626],{"class":42},[36,117142,47],{"class":46},[36,117144,868],{"class":62},[36,117146,117147],{"class":42},"._get_reward()\n",[36,117149,117150],{"class":38,"line":19254},[36,117151,70],{"emptyLinePlaceholder":69},[36,117153,117154,117156,117158,117160,117162,117164],{"class":38,"line":19259},[36,117155,114476],{"class":42},[36,117157,47],{"class":46},[36,117159,868],{"class":62},[36,117161,116709],{"class":42},[36,117163,481],{"class":62},[36,117165,116787],{"class":42},[36,117167,117168,117170,117172,117174,117176,117178],{"class":38,"line":19272},[36,117169,114489],{"class":42},[36,117171,47],{"class":46},[36,117173,868],{"class":62},[36,117175,116709],{"class":42},[36,117177,481],{"class":62},[36,117179,116802],{"class":42},[36,117181,117182,117184,117186,117188,117191,117193],{"class":38,"line":19277},[36,117183,116807],{"class":42},[36,117185,47],{"class":46},[36,117187,112136],{"class":62},[36,117189,117190],{"class":42},"(np.linalg.norm(tip ",[36,117192,3087],{"class":46},[36,117194,117195],{"class":42}," target))\n",[36,117197,117198],{"class":38,"line":19282},[36,117199,70],{"emptyLinePlaceholder":69},[36,117201,117202,117205,117207,117209,117211],{"class":38,"line":19287},[36,117203,117204],{"class":42},"        terminated ",[36,117206,47],{"class":46},[36,117208,116028],{"class":42},[36,117210,3463],{"class":46},[36,117212,116033],{"class":62},[36,117214,117215,117218,117220,117222,117224,117226,117228],{"class":38,"line":19300},[36,117216,117217],{"class":42},"        truncated ",[36,117219,47],{"class":46},[36,117221,868],{"class":62},[36,117223,116045],{"class":42},[36,117225,2127],{"class":46},[36,117227,868],{"class":62},[36,117229,116052],{"class":42},[36,117231,117232,117235,117237,117239,117242],{"class":38,"line":19305},[36,117233,117234],{"class":42},"        info ",[36,117236,47],{"class":46},[36,117238,6831],{"class":42},[36,117240,117241],{"class":50},"\"distance\"",[36,117243,117244],{"class":42},": dist}\n",[36,117246,117247,117249],{"class":38,"line":34985},[36,117248,736],{"class":46},[36,117250,117251],{"class":42}," obs, reward, terminated, truncated, info\n",[36,117253,117254],{"class":38,"line":34991},[36,117255,70],{"emptyLinePlaceholder":69},[36,117257,117258],{"class":38,"line":34997},[36,117259,70],{"emptyLinePlaceholder":69},[36,117261,117262,117264,117266,117268,117270],{"class":38,"line":35003},[36,117263,76],{"class":46},[36,117265,4366],{"class":79},[36,117267,103738],{"class":42},[36,117269,98027],{"class":62},[36,117271,153],{"class":42},[36,117273,117274,117277,117279],{"class":38,"line":35009},[36,117275,117276],{"class":42},"    env ",[36,117278,47],{"class":46},[36,117280,117281],{"class":42}," ReacherEnv()\n",[36,117283,117284,117287,117289,117292,117294,117296,117298],{"class":38,"line":35020},[36,117285,117286],{"class":42},"    obs, info ",[36,117288,47],{"class":46},[36,117290,117291],{"class":42}," env.reset(",[36,117293,116905],{"class":7598},[36,117295,47],{"class":46},[36,117297,2751],{"class":62},[36,117299,123],{"class":42},[36,117301,117302,117304,117306,117309],{"class":38,"line":35026},[36,117303,89],{"class":62},[36,117305,92],{"class":42},[36,117307,117308],{"class":50},"\"initial obs shape:\"",[36,117310,117311],{"class":42},", obs.shape)\n",[36,117313,117314,117316,117318,117321],{"class":38,"line":35046},[36,117315,89],{"class":62},[36,117317,92],{"class":42},[36,117319,117320],{"class":50},"\"initial info:\"",[36,117322,117323],{"class":42},", info)\n",[36,117325,117326],{"class":38,"line":35052},[36,117327,70],{"emptyLinePlaceholder":69},[36,117329,117330,117332,117334],{"class":38,"line":35063},[36,117331,112492],{"class":42},[36,117333,47],{"class":46},[36,117335,107100],{"class":62},[36,117337,117338,117340,117342,117344,117346,117348,117350],{"class":38,"line":35069},[36,117339,5586],{"class":46},[36,117341,33970],{"class":42},[36,117343,28413],{"class":46},[36,117345,34796],{"class":62},[36,117347,92],{"class":42},[36,117349,3254],{"class":62},[36,117351,1147],{"class":42},[36,117353,117354,117356,117358],{"class":38,"line":35075},[36,117355,112561],{"class":42},[36,117357,47],{"class":46},[36,117359,117360],{"class":42}," env.action_space.sample()\n",[36,117362,117363,117366,117368],{"class":38,"line":35081},[36,117364,117365],{"class":42},"        obs, reward, terminated, truncated, info ",[36,117367,47],{"class":46},[36,117369,115754],{"class":42},[36,117371,117372,117374,117376],{"class":38,"line":35087},[36,117373,112636],{"class":42},[36,117375,928],{"class":46},[36,117377,112641],{"class":42},[36,117379,117380,117382,117384,117386,117388,117391,117393,117395,117398,117400,117402,117405,117407,117409,117412,117414,117416,117418],{"class":38,"line":35093},[36,117381,168],{"class":62},[36,117383,92],{"class":42},[36,117385,112670],{"class":50},[36,117387,112673],{"class":42},[36,117389,117390],{"class":50},"\"reward:\"",[36,117392,630],{"class":42},[36,117394,34371],{"class":62},[36,117396,117397],{"class":42},"(reward, ",[36,117399,2634],{"class":62},[36,117401,112684],{"class":42},[36,117403,117404],{"class":50},"\"distance:\"",[36,117406,630],{"class":42},[36,117408,34371],{"class":62},[36,117410,117411],{"class":42},"(info[",[36,117413,117241],{"class":50},[36,117415,114541],{"class":42},[36,117417,2634],{"class":62},[36,117419,1914],{"class":42},[36,117421,117422,117424,117427,117430],{"class":38,"line":35099},[36,117423,890],{"class":46},[36,117425,117426],{"class":42}," terminated ",[36,117428,117429],{"class":46},"or",[36,117431,117432],{"class":42}," truncated:\n",[36,117434,117435],{"class":38,"line":35105},[36,117436,117437],{"class":46},"            break\n",[36,117439,117440],{"class":38,"line":35125},[36,117441,70],{"emptyLinePlaceholder":69},[36,117443,117444,117446,117448,117450,117452,117454,117456,117458],{"class":38,"line":35131},[36,117445,89],{"class":62},[36,117447,92],{"class":42},[36,117449,112715],{"class":50},[36,117451,630],{"class":42},[36,117453,34371],{"class":62},[36,117455,112722],{"class":42},[36,117457,2634],{"class":62},[36,117459,1914],{"class":42},[36,117461,117462],{"class":38,"line":35147},[36,117463,70],{"emptyLinePlaceholder":69},[36,117465,117466],{"class":38,"line":35153},[36,117467,70],{"emptyLinePlaceholder":69},[36,117469,117470,117472,117474,117476,117478],{"class":38,"line":35167},[36,117471,3948],{"class":46},[36,117473,33575],{"class":62},[36,117475,103899],{"class":46},[36,117477,103902],{"class":50},[36,117479,153],{"class":42},[36,117481,117482],{"class":38,"line":35173},[36,117483,103909],{"class":42},[19,117485,105910],{},[26,117487,117489],{"className":26192,"code":117488,"language":26194,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,117490,117491],{"__ignoreMap":31},[36,117492,117493,117495],{"class":38,"line":39},[36,117494,103623],{"class":79},[36,117496,117497],{"class":50}," ch8_gym_env.py\n",[19,117499,112783],{},[26,117501,117503],{"className":26192,"code":117502,"language":26194,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,117504,117505],{"__ignoreMap":31},[36,117506,117507,117509],{"class":38,"line":39},[36,117508,30],{"class":79},[36,117510,117497],{"class":50},[1752,117512,103912],{"id":103912},[19,117514,117515],{},"继承 Gymnasium 环境：",[26,117517,117519],{"className":28,"code":117518,"language":30,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,117520,117521],{"__ignoreMap":31},[36,117522,117523,117525,117527,117529,117531,117533,117535],{"class":38,"line":39},[36,117524,147],{"class":46},[36,117526,116396],{"class":79},[36,117528,92],{"class":42},[36,117530,115879],{"class":79},[36,117532,3113],{"class":42},[36,117534,116405],{"class":79},[36,117536,1147],{"class":42},[19,117538,117539],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117541,117542],{},"初始化模型：",[26,117544,117546],{"className":28,"code":117545,"language":30,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,117547,117548,117562],{"__ignoreMap":31},[36,117549,117550,117552,117554,117556,117558,117560],{"class":38,"line":39},[36,117551,481],{"class":62},[36,117553,116456],{"class":42},[36,117555,47],{"class":46},[36,117557,103752],{"class":42},[36,117559,103654],{"class":62},[36,117561,123],{"class":42},[36,117563,117564,117566,117568,117570,117572,117574],{"class":38,"line":54},[36,117565,481],{"class":62},[36,117567,116471],{"class":42},[36,117569,47],{"class":46},[36,117571,116476],{"class":42},[36,117573,481],{"class":62},[36,117575,116481],{"class":42},[19,117577,117578,117579,117581],{},"这和前面章节一样，只是现在放到了类的 ",[33,117580,494],{}," 里。",[19,117583,117584],{},"缓存 site ID：",[26,117586,117588],{"className":28,"code":117587,"language":30,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,117589,117590,117604],{"__ignoreMap":31},[36,117591,117592,117594,117596,117598,117600,117602],{"class":38,"line":39},[36,117593,481],{"class":62},[36,117595,116492],{"class":42},[36,117597,47],{"class":46},[36,117599,116497],{"class":42},[36,117601,91895],{"class":62},[36,117603,123],{"class":42},[36,117605,117606,117608,117610,117612,117614,117616],{"class":38,"line":54},[36,117607,481],{"class":62},[36,117609,116513],{"class":42},[36,117611,47],{"class":46},[36,117613,116497],{"class":42},[36,117615,91895],{"class":62},[36,117617,123],{"class":42},[19,117619,117620],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117622,117623],{},"reset：",[26,117625,117627],{"className":28,"code":117626,"language":30,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,117628,117629],{"__ignoreMap":31},[36,117630,117631,117633,117635,117637,117639,117641,117643,117645,117647,117649,117651,117653,117655,117657,117659,117661,117663],{"class":38,"line":39},[36,117632,76],{"class":46},[36,117634,116861],{"class":79},[36,117636,116864],{"class":42},[36,117638,3011],{"class":46},[36,117640,116869],{"class":42},[36,117642,2570],{"class":62},[36,117644,27480],{"class":46},[36,117646,41282],{"class":62},[36,117648,15941],{"class":46},[36,117650,41282],{"class":62},[36,117652,116882],{"class":42},[36,117654,116885],{"class":62},[36,117656,27480],{"class":46},[36,117658,41282],{"class":62},[36,117660,15941],{"class":46},[36,117662,41282],{"class":62},[36,117664,1147],{"class":42},[19,117666,117667,117669],{},[33,117668,72402],{}," 做四件事：",[650,117671,117672,117675,117678,117681],{},[653,117673,117674],{},"设置随机种子。",[653,117676,117677],{},"重置 MuJoCo data。",[653,117679,117680],{},"随机初始化关节角。",[653,117682,117683],{},"返回初始观测和 info。",[19,117685,117686],{},"step：",[26,117688,117690],{"className":28,"code":117689,"language":30,"meta":31,"style":31},"def step(self, action):\n",[33,117691,117692],{"__ignoreMap":31},[36,117693,117694,117696,117698],{"class":38,"line":39},[36,117695,76],{"class":46},[36,117697,117026],{"class":79},[36,117699,117029],{"class":42},[19,117701,117702,117704],{},[33,117703,109473],{}," 做六件事：",[650,117706,117707,117710,117716,117719,117722,117725],{},[653,117708,117709],{},"检查并裁剪 action。",[653,117711,117712,117713,676],{},"写入 ",[33,117714,117715],{},"self.data.ctrl",[653,117717,117718],{},"连续推进若干个 MuJoCo 物理步。",[653,117720,117721],{},"计算新观测。",[653,117723,117724],{},"计算奖励和结束条件。",[653,117726,117727],{},"返回 Gymnasium 标准五元组。",[1752,117729,104048],{"id":104048},[26,117731,117733],{"className":28,"code":117732,"language":30,"meta":31,"style":31},"import gymnasium as gym\n",[33,117734,117735],{"__ignoreMap":31},[36,117736,117737,117739,117741,117743],{"class":38,"line":39},[36,117738,1943],{"class":46},[36,117740,116234],{"class":42},[36,117742,33737],{"class":46},[36,117744,116239],{"class":42},[19,117746,117747,117748,117750,117751,117754],{},"导入 Gymnasium，并起别名 ",[33,117749,115879],{},"。后面写 ",[33,117752,117753],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,117756,117758],{"className":28,"code":117757,"language":30,"meta":31,"style":31},"from gymnasium import spaces\n",[33,117759,117760],{"__ignoreMap":31},[36,117761,117762,117764,117766,117768],{"class":38,"line":39},[36,117763,1937],{"class":46},[36,117765,116234],{"class":42},[36,117767,1943],{"class":46},[36,117769,116266],{"class":42},[19,117771,117772,117773,117776],{},"导入空间定义工具。",[33,117774,117775],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,117778,117779],{"className":28,"code":117518,"language":30,"meta":31,"style":31},[33,117780,117781],{"__ignoreMap":31},[36,117782,117783,117785,117787,117789,117791,117793,117795],{"class":38,"line":39},[36,117784,147],{"class":46},[36,117786,116396],{"class":79},[36,117788,92],{"class":42},[36,117790,115879],{"class":79},[36,117792,3113],{"class":42},[36,117794,116405],{"class":79},[36,117796,1147],{"class":42},[19,117798,117799,117800,117803,117804,117806,117807,302,117809,117811],{},"定义一个类，名字叫 ",[33,117801,117802],{},"ReacherEnv","。括号里的 ",[33,117805,117753],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,117808,72402],{},[33,117810,109473],{}," 这两个核心方法。",[26,117813,117815],{"className":28,"code":117814,"language":30,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,117816,117817],{"__ignoreMap":31},[36,117818,117819,117822,117824,117826,117828],{"class":38,"line":39},[36,117820,117821],{"class":42},"metadata ",[36,117823,47],{"class":46},[36,117825,6831],{"class":42},[36,117827,116419],{"class":50},[36,117829,116422],{"class":42},[19,117831,117832],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,117834,117836],{"className":28,"code":117835,"language":30,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,117837,117838],{"__ignoreMap":31},[36,117839,117840,117842,117844,117846,117848],{"class":38,"line":39},[36,117841,76],{"class":46},[36,117843,515],{"class":62},[36,117845,116435],{"class":42},[36,117847,98027],{"class":62},[36,117849,153],{"class":42},[19,117851,117852,117854,117855,676],{},[33,117853,494],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,117856,117857],{},"env = ReacherEnv()",[26,117859,117861],{"className":28,"code":117860,"language":30,"meta":31,"style":31},"super().__init__()\n",[33,117862,117863],{"__ignoreMap":31},[36,117864,117865,117868,117870,117872],{"class":38,"line":39},[36,117866,117867],{"class":62},"super",[36,117869,1435],{"class":42},[36,117871,494],{"class":62},[36,117873,4369],{"class":42},[19,117875,117876,117877,117879],{},"调用父类 ",[33,117878,117753],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,117881,117882],{"className":28,"code":117545,"language":30,"meta":31,"style":31},[33,117883,117884,117898],{"__ignoreMap":31},[36,117885,117886,117888,117890,117892,117894,117896],{"class":38,"line":39},[36,117887,481],{"class":62},[36,117889,116456],{"class":42},[36,117891,47],{"class":46},[36,117893,103752],{"class":42},[36,117895,103654],{"class":62},[36,117897,123],{"class":42},[36,117899,117900,117902,117904,117906,117908,117910],{"class":38,"line":54},[36,117901,481],{"class":62},[36,117903,116471],{"class":42},[36,117905,47],{"class":46},[36,117907,116476],{"class":42},[36,117909,481],{"class":62},[36,117911,116481],{"class":42},[19,117913,117914,117915,117917,117918,302,117921,117924],{},"把 MuJoCo 模型和状态保存到 ",[33,117916,481],{}," 上。",[33,117919,117920],{},"self.model",[33,117922,117923],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,117926,117927],{"className":28,"code":117587,"language":30,"meta":31,"style":31},[33,117928,117929,117943],{"__ignoreMap":31},[36,117930,117931,117933,117935,117937,117939,117941],{"class":38,"line":39},[36,117932,481],{"class":62},[36,117934,116492],{"class":42},[36,117936,47],{"class":46},[36,117938,116497],{"class":42},[36,117940,91895],{"class":62},[36,117942,123],{"class":42},[36,117944,117945,117947,117949,117951,117953,117955],{"class":38,"line":54},[36,117946,481],{"class":62},[36,117948,116513],{"class":42},[36,117950,47],{"class":46},[36,117952,116497],{"class":42},[36,117954,91895],{"class":62},[36,117956,123],{"class":42},[19,117958,117959,117960,302,117963,117966],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,117961,117962],{},"_get_obs",[33,117964,117965],{},"_get_reward"," 里就不用每次按名字查找。",[26,117968,117970],{"className":28,"code":117969,"language":30,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,117971,117972,117982,117992],{"__ignoreMap":31},[36,117973,117974,117976,117978,117980],{"class":38,"line":39},[36,117975,481],{"class":62},[36,117977,116206],{"class":42},[36,117979,47],{"class":46},[36,117981,56775],{"class":62},[36,117983,117984,117986,117988,117990],{"class":38,"line":54},[36,117985,481],{"class":62},[36,117987,116585],{"class":42},[36,117989,47],{"class":46},[36,117991,116590],{"class":62},[36,117993,117994,117996,117998,118000],{"class":38,"line":66},[36,117995,481],{"class":62},[36,117997,116045],{"class":42},[36,117999,47],{"class":46},[36,118001,49682],{"class":62},[19,118003,118004,118007,118008,118011,118012,118015],{},[33,118005,118006],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,118009,118010],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,118013,118014],{},"steps"," 记录当前 episode 已经走了多少步。",[26,118017,118018],{"className":28,"code":116084,"language":30,"meta":31,"style":31},[33,118019,118020],{"__ignoreMap":31},[36,118021,118022,118024,118026,118028,118030,118032,118034,118036,118038,118040,118042,118044,118046,118048,118050,118052,118054,118056,118058,118060],{"class":38,"line":39},[36,118023,481],{"class":62},[36,118025,116093],{"class":42},[36,118027,47],{"class":46},[36,118029,116098],{"class":42},[36,118031,116101],{"class":7598},[36,118033,116104],{"class":46},[36,118035,104743],{"class":62},[36,118037,630],{"class":42},[36,118039,116111],{"class":7598},[36,118041,47],{"class":46},[36,118043,104743],{"class":62},[36,118045,630],{"class":42},[36,118047,98304],{"class":7598},[36,118049,47],{"class":46},[36,118051,92],{"class":42},[36,118053,1911],{"class":62},[36,118055,116128],{"class":42},[36,118057,95841],{"class":7598},[36,118059,47],{"class":46},[36,118061,116135],{"class":42},[19,118063,118064,118065,118068,118069,302,118072,118075],{},"定义动作空间。",[33,118066,118067],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,118070,118071],{},"low=-1.0",[33,118073,118074],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,118077,118078],{"className":28,"code":116145,"language":30,"meta":31,"style":31},[33,118079,118080],{"__ignoreMap":31},[36,118081,118082,118084,118086,118088,118090,118092,118094,118096,118098,118100,118102,118104,118106,118108,118110,118112,118114,118116],{"class":38,"line":39},[36,118083,481],{"class":62},[36,118085,116154],{"class":42},[36,118087,47],{"class":46},[36,118089,116098],{"class":42},[36,118091,116101],{"class":7598},[36,118093,116104],{"class":46},[36,118095,116165],{"class":42},[36,118097,116111],{"class":7598},[36,118099,47],{"class":46},[36,118101,116165],{"class":42},[36,118103,98304],{"class":7598},[36,118105,47],{"class":46},[36,118107,92],{"class":42},[36,118109,3002],{"class":62},[36,118111,116128],{"class":42},[36,118113,95841],{"class":7598},[36,118115,47],{"class":46},[36,118117,116135],{"class":42},[19,118119,118120,118121,118124,118125,118128],{},"定义观测空间。",[33,118122,118123],{},"shape=(10,)"," 表示观测是 10 个数。",[33,118126,118127],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,118130,118132],{"className":28,"code":118131,"language":30,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,118133,118134],{"__ignoreMap":31},[36,118135,118136,118138,118140],{"class":38,"line":39},[36,118137,76],{"class":46},[36,118139,116695],{"class":79},[36,118141,116698],{"class":42},[19,118143,118144,118145,118147],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,118146,3542],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,118149,118151],{"className":28,"code":118150,"language":30,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,118152,118153,118167],{"__ignoreMap":31},[36,118154,118155,118157,118159,118161,118163,118165],{"class":38,"line":39},[36,118156,113907],{"class":42},[36,118158,47],{"class":46},[36,118160,868],{"class":62},[36,118162,116709],{"class":42},[36,118164,481],{"class":62},[36,118166,116714],{"class":42},[36,118168,118169,118171,118173,118175,118177,118179],{"class":38,"line":54},[36,118170,113917],{"class":42},[36,118172,47],{"class":46},[36,118174,868],{"class":62},[36,118176,116709],{"class":42},[36,118178,481],{"class":62},[36,118180,116729],{"class":42},[19,118182,118183],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,118185,118187],{"className":28,"code":118186,"language":30,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,118188,118189,118205],{"__ignoreMap":31},[36,118190,118191,118193,118195,118197,118199,118201,118203],{"class":38,"line":39},[36,118192,113193],{"class":42},[36,118194,47],{"class":46},[36,118196,116738],{"class":42},[36,118198,481],{"class":62},[36,118200,116743],{"class":42},[36,118202,481],{"class":62},[36,118204,116748],{"class":42},[36,118206,118207,118209],{"class":38,"line":54},[36,118208,19419],{"class":46},[36,118210,116755],{"class":42},[19,118212,118213,118214,118217,118218,118220],{},"拼接观测，并转换成 ",[33,118215,118216],{},"float32","。很多强化学习库默认使用 ",[33,118219,118216],{},"，所以这里主动转换。",[26,118222,118223],{"className":28,"code":117626,"language":30,"meta":31,"style":31},[33,118224,118225],{"__ignoreMap":31},[36,118226,118227,118229,118231,118233,118235,118237,118239,118241,118243,118245,118247,118249,118251,118253,118255,118257,118259],{"class":38,"line":39},[36,118228,76],{"class":46},[36,118230,116861],{"class":79},[36,118232,116864],{"class":42},[36,118234,3011],{"class":46},[36,118236,116869],{"class":42},[36,118238,2570],{"class":62},[36,118240,27480],{"class":46},[36,118242,41282],{"class":62},[36,118244,15941],{"class":46},[36,118246,41282],{"class":62},[36,118248,116882],{"class":42},[36,118250,116885],{"class":62},[36,118252,27480],{"class":46},[36,118254,41282],{"class":62},[36,118256,15941],{"class":46},[36,118258,41282],{"class":62},[36,118260,1147],{"class":42},[19,118262,118263,118264,118266,118267,118270],{},"定义 reset。",[33,118265,116905],{}," 用来控制随机数，保证实验可以复现。",[33,118268,118269],{},"options"," 用来接收额外配置，本章暂时不用。",[26,118272,118274],{"className":28,"code":118273,"language":30,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,118275,118276],{"__ignoreMap":31},[36,118277,118278,118280,118282,118284,118286],{"class":38,"line":39},[36,118279,117867],{"class":62},[36,118281,116902],{"class":42},[36,118283,116905],{"class":7598},[36,118285,47],{"class":46},[36,118287,116910],{"class":42},[19,118289,118290,118291,118294],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,118292,118293],{},"self.np_random"," 生成可复现的随机数。",[26,118296,118298],{"className":28,"code":118297,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,118299,118300],{"__ignoreMap":31},[36,118301,118302,118305,118307,118309,118311],{"class":38,"line":39},[36,118303,118304],{"class":42},"mujoco.mj_resetData(",[36,118306,481],{"class":62},[36,118308,116920],{"class":42},[36,118310,481],{"class":62},[36,118312,116925],{"class":42},[19,118314,118315],{},"把 MuJoCo 状态重置到默认状态。",[26,118317,118319],{"className":28,"code":118318,"language":30,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,118320,118321],{"__ignoreMap":31},[36,118322,118323,118325,118327,118329,118331,118333,118335,118337,118339,118341,118343,118345,118347,118349,118351,118353,118355],{"class":38,"line":39},[36,118324,481],{"class":62},[36,118326,116936],{"class":42},[36,118328,47],{"class":46},[36,118330,868],{"class":62},[36,118332,116943],{"class":42},[36,118334,116101],{"class":7598},[36,118336,116104],{"class":46},[36,118338,88552],{"class":62},[36,118340,630],{"class":42},[36,118342,116111],{"class":7598},[36,118344,47],{"class":46},[36,118346,88552],{"class":62},[36,118348,630],{"class":42},[36,118350,33850],{"class":7598},[36,118352,47],{"class":46},[36,118354,481],{"class":62},[36,118356,116968],{"class":42},[19,118358,117680,118359,118362,118363,118366,118367,118369],{},[33,118360,118361],{},"[:]"," 表示修改整个数组。",[33,118364,118365],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,118368,104490],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,118371,118373],{"className":28,"code":118372,"language":30,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,118374,118375],{"__ignoreMap":31},[36,118376,118377,118379,118381,118383],{"class":38,"line":39},[36,118378,481],{"class":62},[36,118380,116975],{"class":42},[36,118382,47],{"class":46},[36,118384,107100],{"class":62},[19,118386,118387],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,118389,118391],{"className":28,"code":118390,"language":30,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,118392,118393,118403],{"__ignoreMap":31},[36,118394,118395,118397,118399,118401],{"class":38,"line":39},[36,118396,481],{"class":62},[36,118398,116045],{"class":42},[36,118400,47],{"class":46},[36,118402,49682],{"class":62},[36,118404,118405,118407,118409],{"class":38,"line":54},[36,118406,19419],{"class":46},[36,118408,868],{"class":62},[36,118410,117015],{"class":42},[19,118412,118413],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,118415,118416],{"className":28,"code":117689,"language":30,"meta":31,"style":31},[33,118417,118418],{"__ignoreMap":31},[36,118419,118420,118422,118424],{"class":38,"line":39},[36,118421,76],{"class":46},[36,118423,117026],{"class":79},[36,118425,117029],{"class":42},[19,118427,118428],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,118430,118432],{"className":28,"code":118431,"language":30,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,118433,118434],{"__ignoreMap":31},[36,118435,118436,118438,118440,118442,118444,118446],{"class":38,"line":39},[36,118437,109781],{"class":42},[36,118439,47],{"class":46},[36,118441,117038],{"class":42},[36,118443,95841],{"class":7598},[36,118445,47],{"class":46},[36,118447,116135],{"class":42},[19,118449,118450,118451,676],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,118452,118216],{},[26,118454,118456],{"className":28,"code":118455,"language":30,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,118457,118458],{"__ignoreMap":31},[36,118459,118460,118462,118464,118466,118468,118470,118472],{"class":38,"line":39},[36,118461,109781],{"class":42},[36,118463,47],{"class":46},[36,118465,109786],{"class":42},[36,118467,481],{"class":62},[36,118469,117057],{"class":42},[36,118471,481],{"class":62},[36,118473,117062],{"class":42},[19,118475,118476],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,118478,118480],{"className":28,"code":118479,"language":30,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,118481,118482],{"__ignoreMap":31},[36,118483,118484,118486,118488,118490],{"class":38,"line":39},[36,118485,481],{"class":62},[36,118487,117073],{"class":42},[36,118489,47],{"class":46},[36,118491,109809],{"class":42},[19,118493,118494],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,118496,118498],{"className":28,"code":118497,"language":30,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,118499,118500,118516],{"__ignoreMap":31},[36,118501,118502,118504,118506,118508,118510,118512,118514],{"class":38,"line":39},[36,118503,5410],{"class":46},[36,118505,103841],{"class":42},[36,118507,28413],{"class":46},[36,118509,34796],{"class":62},[36,118511,92],{"class":42},[36,118513,481],{"class":62},[36,118515,117094],{"class":42},[36,118517,118518,118521,118523,118525,118527],{"class":38,"line":54},[36,118519,118520],{"class":42},"    mujoco.mj_step(",[36,118522,481],{"class":62},[36,118524,116920],{"class":42},[36,118526,481],{"class":62},[36,118528,116925],{"class":42},[19,118530,118531,118532,118535,118536,118538,118539,676],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,118533,118534],{},"frame_skip=5","，所以外部调用一次 ",[33,118537,116216],{},"，内部实际执行 5 次 ",[33,118540,103555],{},[26,118542,118544],{"className":28,"code":118543,"language":30,"meta":31,"style":31},"self.steps += 1\n",[33,118545,118546],{"__ignoreMap":31},[36,118547,118548,118550,118552,118554],{"class":38,"line":39},[36,118549,481],{"class":62},[36,118551,116045],{"class":42},[36,118553,928],{"class":46},[36,118555,58047],{"class":62},[19,118557,118558],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,118560,118562],{"className":28,"code":118561,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,118563,118564,118574],{"__ignoreMap":31},[36,118565,118566,118568,118570,118572],{"class":38,"line":39},[36,118567,113193],{"class":42},[36,118569,47],{"class":46},[36,118571,868],{"class":62},[36,118573,117136],{"class":42},[36,118575,118576,118578,118580,118582],{"class":38,"line":54},[36,118577,113344],{"class":42},[36,118579,47],{"class":46},[36,118581,868],{"class":62},[36,118583,117147],{"class":42},[19,118585,118586],{},"计算新的观测和奖励。",[26,118588,118590],{"className":28,"code":118589,"language":30,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,118591,118592],{"__ignoreMap":31},[36,118593,118594,118596,118598,118600,118602,118604],{"class":38,"line":39},[36,118595,113935],{"class":42},[36,118597,47],{"class":46},[36,118599,112136],{"class":62},[36,118601,117190],{"class":42},[36,118603,3087],{"class":46},[36,118605,117195],{"class":42},[19,118607,118608],{},"计算末端到目标的距离，并转换成 Python float。",[26,118610,118611],{"className":28,"code":116016,"language":30,"meta":31,"style":31},[33,118612,118613,118625],{"__ignoreMap":31},[36,118614,118615,118617,118619,118621,118623],{"class":38,"line":39},[36,118616,116023],{"class":42},[36,118618,47],{"class":46},[36,118620,116028],{"class":42},[36,118622,3463],{"class":46},[36,118624,116033],{"class":62},[36,118626,118627,118629,118631,118633,118635,118637,118639],{"class":38,"line":54},[36,118628,116038],{"class":42},[36,118630,47],{"class":46},[36,118632,868],{"class":62},[36,118634,116045],{"class":42},[36,118636,2127],{"class":46},[36,118638,868],{"class":62},[36,118640,116052],{"class":42},[19,118642,118643],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,118645,118647],{"className":28,"code":118646,"language":30,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,118648,118649,118662],{"__ignoreMap":31},[36,118650,118651,118654,118656,118658,118660],{"class":38,"line":39},[36,118652,118653],{"class":42},"info ",[36,118655,47],{"class":46},[36,118657,6831],{"class":42},[36,118659,117241],{"class":50},[36,118661,117244],{"class":42},[36,118663,118664,118666],{"class":38,"line":54},[36,118665,19419],{"class":46},[36,118667,117251],{"class":42},[19,118669,118670,118673],{},[33,118671,118672],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,118675,118677],{"className":28,"code":118676,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,118678,118679,118688],{"__ignoreMap":31},[36,118680,118681,118684,118686],{"class":38,"line":39},[36,118682,118683],{"class":42},"env ",[36,118685,47],{"class":46},[36,118687,117281],{"class":42},[36,118689,118690,118692,118694,118696,118698,118700,118702],{"class":38,"line":54},[36,118691,115739],{"class":42},[36,118693,47],{"class":46},[36,118695,117291],{"class":42},[36,118697,116905],{"class":7598},[36,118699,47],{"class":46},[36,118701,2751],{"class":62},[36,118703,123],{"class":42},[19,118705,118706,118707,118710],{},"创建环境并重置。",[33,118708,118709],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,118712,118714],{"className":28,"code":118713,"language":30,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,118715,118716],{"__ignoreMap":31},[36,118717,118718,118720,118722],{"class":38,"line":39},[36,118719,109781],{"class":42},[36,118721,47],{"class":46},[36,118723,117360],{"class":42},[19,118725,118726],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118728,104656],{"id":104655},[19,118730,107823],{},[26,118732,118735],{"className":118733,"code":118734,"language":7570,"meta":31},[7568],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,118736,118734],{"__ignoreMap":31},[19,118738,118739],{},"这个环境已经具备强化学习环境的基本结构。",[19,118741,118742],{},"主函数里使用随机动作：",[26,118744,118745],{"className":28,"code":118713,"language":30,"meta":31,"style":31},[33,118746,118747],{"__ignoreMap":31},[36,118748,118749,118751,118753],{"class":38,"line":39},[36,118750,109781],{"class":42},[36,118752,47],{"class":46},[36,118754,117360],{"class":42},[19,118756,118757],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118759,104688],{"id":104687},[650,118761,118762,118765,118771,118780,118789,118798,118804],{},[653,118763,118764],{},"运行程序。",[653,118766,118767,118768,676],{},"确认 ",[33,118769,118770],{},"obs.shape == (10,)",[653,118772,113520,118773,118776,118777,676],{},[33,118774,118775],{},"env.action_space","，应类似 ",[33,118778,118779],{},"Box(-1.0, 1.0, (2,), float32)",[653,118781,107924,118782,118785,118786,676],{},[33,118783,118784],{},"self.max_steps = 10","，确认环境会更快 ",[33,118787,118788],{},"truncated=True",[653,118790,104751,118791,104754,118794,118797],{},[33,118792,118793],{},"terminated = dist \u003C 0.05",[33,118795,118796],{},"dist \u003C 0.2","，观察是否更容易结束。",[653,118799,104751,118800,118803],{},[33,118801,118802],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[653,118805,118806,118807,118809,118810,118813],{},"在 ",[33,118808,118672],{}," 里加入 ",[33,118811,118812],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118815,104793],{"id":104792},[1752,118817,118819],{"id":118818},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118821,118822,118823,118825],{},"Gymnasium 的 ",[33,118824,109473],{}," 返回 5 个值:",[26,118827,118829],{"className":28,"code":118828,"language":30,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,118830,118831],{"__ignoreMap":31},[36,118832,118833],{"class":38,"line":39},[36,118834,118828],{"class":42},[19,118836,118837],{},"不是旧 Gym 的 4 个值。",[1752,118839,118841,118844],{"id":118840},"datactrl-action-维度错误",[33,118842,118843],{},"data.ctrl[:] = action"," 维度错误",[19,118846,104863],{},[26,118848,118850],{"className":28,"code":118849,"language":30,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,118851,118852,118863],{"__ignoreMap":31},[36,118853,118854,118856,118858,118860],{"class":38,"line":39},[36,118855,371],{"class":62},[36,118857,92],{"class":42},[36,118859,481],{"class":62},[36,118861,118862],{"class":42},".model.nu)\n",[36,118864,118865,118867],{"class":38,"line":54},[36,118866,371],{"class":62},[36,118868,118869],{"class":42},"(action.shape)\n",[19,118871,118872],{},"两者必须匹配。",[1752,118874,118876],{"id":118875},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118878,104802],{},[26,118880,118882],{"className":28,"code":118881,"language":30,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,118883,118884],{"__ignoreMap":31},[36,118885,118886,118889,118891,118893,118895],{"class":38,"line":39},[36,118887,118888],{"class":42},"mujoco.mj_forward(",[36,118890,481],{"class":62},[36,118892,116920],{"class":42},[36,118894,481],{"class":62},[36,118896,116925],{"class":42},[1752,118898,118900,118902],{"id":118899},"observation_space-维度和-obs-不一致",[33,118901,115939],{}," 维度和 obs 不一致",[19,118904,104915],{},[26,118906,118908],{"className":28,"code":118907,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,118909,118910,118920,118927],{"__ignoreMap":31},[36,118911,118912,118914,118916,118918],{"class":38,"line":39},[36,118913,113193],{"class":42},[36,118915,47],{"class":46},[36,118917,868],{"class":62},[36,118919,117136],{"class":42},[36,118921,118922,118924],{"class":38,"line":54},[36,118923,371],{"class":62},[36,118925,118926],{"class":42},"(obs.shape)\n",[36,118928,118929,118931,118933,118935],{"class":38,"line":66},[36,118930,371],{"class":62},[36,118932,92],{"class":42},[36,118934,481],{"class":62},[36,118936,118937],{"class":42},".observation_space.shape)\n",[19,118939,118940],{},"两者必须一致。本章观测是：",[26,118942,118945],{"className":118943,"code":118944,"language":7570,"meta":31},[7568],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,118946,118944],{"__ignoreMap":31},[1752,118948,118950],{"id":118949},"action-超过范围","action 超过范围",[19,118952,118953],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,118955,118956],{"className":28,"code":118455,"language":30,"meta":31,"style":31},[33,118957,118958],{"__ignoreMap":31},[36,118959,118960,118962,118964,118966,118968,118970,118972],{"class":38,"line":39},[36,118961,109781],{"class":42},[36,118963,47],{"class":46},[36,118965,109786],{"class":42},[36,118967,481],{"class":62},[36,118969,117057],{"class":42},[36,118971,481],{"class":62},[36,118973,117062],{"class":42},[19,118975,118976,118977,676],{},"这能避免无效动作直接写入 ",[33,118978,103416],{},[1752,118980,118982],{"id":118981},"忘记返回-info","忘记返回 info",[19,118984,118822,118985,302,118987,118989],{},[33,118986,72402],{},[33,118988,109473],{}," 都会返回 info：",[26,118991,118992],{"className":28,"code":115732,"language":30,"meta":31,"style":31},[33,118993,118994,119002],{"__ignoreMap":31},[36,118995,118996,118998,119000],{"class":38,"line":39},[36,118997,115739],{"class":42},[36,118999,47],{"class":46},[36,119001,115744],{"class":42},[36,119003,119004,119006,119008],{"class":38,"line":54},[36,119005,115749],{"class":42},[36,119007,47],{"class":46},[36,119009,115754],{"class":42},[19,119011,119012,119013,676],{},"即使暂时没有额外信息，也返回 ",[33,119014,34811],{},[14,119016,119018],{"id":119017},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119020,119021],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[650,119023,119024,119027,119030,119033,119036,119039],{},[653,119025,119026],{},"更稳定的 reward。",[653,119028,119029],{},"合理的 episode 长度。",[653,119031,119032],{},"可重复的随机目标采样。",[653,119034,119035],{},"render 接口。",[653,119037,119038],{},"环境注册代码。",[653,119040,119041],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119043,119044],{},"如果只是自己写训练循环，最小形式是：",[26,119046,119048],{"className":28,"code":119047,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[33,119049,119050,119058,119074,119078,119094,119103,119112,119122],{"__ignoreMap":31},[36,119051,119052,119054,119056],{"class":38,"line":39},[36,119053,118683],{"class":42},[36,119055,47],{"class":46},[36,119057,117281],{"class":42},[36,119059,119060,119062,119064,119066,119068,119070,119072],{"class":38,"line":54},[36,119061,115739],{"class":42},[36,119063,47],{"class":46},[36,119065,117291],{"class":42},[36,119067,116905],{"class":7598},[36,119069,47],{"class":46},[36,119071,2751],{"class":62},[36,119073,123],{"class":42},[36,119075,119076],{"class":38,"line":66},[36,119077,70],{"emptyLinePlaceholder":69},[36,119079,119080,119082,119084,119086,119088,119090,119092],{"class":38,"line":73},[36,119081,5410],{"class":46},[36,119083,103841],{"class":42},[36,119085,28413],{"class":46},[36,119087,34796],{"class":62},[36,119089,92],{"class":42},[36,119091,1048],{"class":62},[36,119093,1147],{"class":42},[36,119095,119096,119099,119101],{"class":38,"line":86},[36,119097,119098],{"class":42},"    action ",[36,119100,47],{"class":46},[36,119102,117360],{"class":42},[36,119104,119105,119108,119110],{"class":38,"line":126},[36,119106,119107],{"class":42},"    obs, reward, terminated, truncated, info ",[36,119109,47],{"class":46},[36,119111,115754],{"class":42},[36,119113,119114,119116,119118,119120],{"class":38,"line":131},[36,119115,5486],{"class":46},[36,119117,117426],{"class":42},[36,119119,117429],{"class":46},[36,119121,117432],{"class":42},[36,119123,119124,119127,119129],{"class":38,"line":225},[36,119125,119126],{"class":42},"        obs, info ",[36,119128,47],{"class":46},[36,119130,115744],{"class":42},[14,119132,119134],{"id":119133},"_9本章小结","9.本章小结",[19,119136,119137],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,119139,119142],{"className":119140,"code":119141,"language":7570,"meta":31},[7568],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,119143,119141],{"__ignoreMap":31},[19,119145,119146],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2467,119148,119149],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":119151},[119152,119153,119154,119161,119165,119166,119167,119177,119178],{"id":102987,"depth":54,"text":102988},{"id":103110,"depth":54,"text":103111},{"id":103384,"depth":54,"text":103385,"children":119155},[119156,119158,119160],{"id":115963,"depth":66,"text":119157},"terminated 和 truncated 的区别",{"id":116066,"depth":66,"text":119159},"observation_space 和 action_space",{"id":116193,"depth":66,"text":116194},{"id":103592,"depth":54,"text":103593,"children":119162},[119163,119164],{"id":103912,"depth":66,"text":103912},{"id":104048,"depth":66,"text":104048},{"id":104655,"depth":54,"text":104656},{"id":104687,"depth":54,"text":104688},{"id":104792,"depth":54,"text":104793,"children":119168},[119169,119170,119172,119173,119175,119176],{"id":118818,"depth":66,"text":118819},{"id":118840,"depth":66,"text":119171},"data.ctrl[:] = action 维度错误",{"id":118875,"depth":66,"text":118876},{"id":118899,"depth":66,"text":119174},"observation_space 维度和 obs 不一致",{"id":118949,"depth":66,"text":118950},{"id":118981,"depth":66,"text":118982},{"id":119017,"depth":54,"text":119018},{"id":119133,"depth":54,"text":119134},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115716,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119185,"title":119186,"body":119187,"description":119610,"extension":2494,"meta":119611,"navigation":69,"path":119612,"seo":119613,"stem":119614,"__hash__":119615},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119188,"toc":119600},[119189,119193,119196,119199,119219,119225,119231,119241,119244,119247,119267,119270,119274,119277,119283,119286,119300,119303,119306,119380,119383,119389,119392,119415,119418,119468,119471,119477,119480,119483,119486,119505,119508,119514,119517,119520,119523,119543,119546,119549,119552,119597],[10,119190,119192],{"id":119191},"mujoco-学习","MuJoCo 学习",[19,119194,119195],{},"初版",[19,119197,119198],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[650,119200,119201,119204,119207,119216],{},[653,119202,119203],{},"MuJoCo 模型文件在描述什么。",[653,119205,119206],{},"Python 代码怎样读取和推进仿真。",[653,119208,119209,2031,119211,2031,119213,119215],{},[33,119210,106370],{},[33,119212,106700],{},[33,119214,106703],{}," 这些数组为什么重要。",[653,119217,119218],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119220,119221,119222,119224],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,119223,103367],{}," 官方 Python bindings。",[19,119226,119227,119228,119230],{},"注意：本文禁止使用 ",[33,119229,103353],{},"。所有示例均使用：",[26,119232,119233],{"className":28,"code":103918,"language":30,"meta":31,"style":31},[33,119234,119235],{"__ignoreMap":31},[36,119236,119237,119239],{"class":38,"line":39},[36,119238,1943],{"class":46},[36,119240,103641],{"class":42},[14,119242,119243],{"id":119243},"适合谁阅读",[19,119245,119246],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[650,119248,119249,119252,119255,119258],{},[653,119250,119251],{},"没学过 MuJoCo，只会一点 Python。",[653,119253,119254],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[653,119256,119257],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[653,119259,119260,119261,119263,119264,119266],{},"以前接触过 ",[33,119262,103353],{},"，现在想迁移到官方 ",[33,119265,103361],{}," Python bindings。",[19,119268,119269],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119271,119273],{"id":119272},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119275,119276],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,119278,119281],{"className":119279,"code":119280,"language":7570,"meta":31},[7568],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,119282,119280],{"__ignoreMap":31},[19,119284,119285],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[650,119287,119288,119291,119294,119297],{},[653,119289,119290],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[653,119292,119293],{},"快速测试控制算法，不必一开始就上真实机器人。",[653,119295,119296],{},"生成强化学习环境。",[653,119298,119299],{},"采集状态、动作、图像、奖励等训练数据。",[14,119301,119302],{"id":119302},"学习前的心智模型",[19,119304,119305],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2698,119307,119308,119320],{},[2701,119309,119310],{},[2704,119311,119312,119315,119318],{},[2707,119313,119314],{"align":26106},"部分",[2707,119316,119317],{"align":26106},"负责什么",[2707,119319,23557],{"align":26106},[2744,119321,119322,119333,119345,119357,119369],{},[2704,119323,119324,119327,119330],{},[2749,119325,119326],{"align":26106},"MJCF XML",[2749,119328,119329],{"align":26106},"定义世界和机器人结构",[2749,119331,119332],{"align":26106},"地面、盒子、关节、电机、摄像头",[2704,119334,119335,119339,119342],{},[2749,119336,119337],{"align":26106},[33,119338,103050],{},[2749,119340,119341],{"align":26106},"编译后的静态模型",[2749,119343,119344],{"align":26106},"有几个关节、有几个电机、时间步长是多少",[2704,119346,119347,119351,119354],{},[2749,119348,119349],{"align":26106},[33,119350,103060],{},[2749,119352,119353],{"align":26106},"运行中的动态状态",[2749,119355,119356],{"align":26106},"当前时间、位置、速度、电机输入",[2704,119358,119359,119363,119366],{},[2749,119360,119361],{"align":26106},[33,119362,103555],{},[2749,119364,119365],{"align":26106},"推进一步物理仿真",[2749,119367,119368],{"align":26106},"根据重力、力、碰撞更新状态",[2704,119370,119371,119374,119377],{},[2749,119372,119373],{"align":26106},"Viewer \u002F Renderer",[2749,119375,119376],{"align":26106},"把仿真显示出来",[2749,119378,119379],{"align":26106},"打开窗口或保存图片",[19,119381,119382],{},"一句话总结：",[26,119384,119387],{"className":119385,"code":119386,"language":7570,"meta":31},[7568],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,119388,119386],{"__ignoreMap":31},[19,119390,119391],{},"参考来源：",[3557,119393,119394,119401,119408],{},[653,119395,119396,119397],{},"MuJoCo Python 官方文档：",[2796,119398,119399],{"href":119399,"rel":119400},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26235],[653,119402,119403,119404],{},"MuJoCo XML Reference：",[2796,119405,119406],{"href":119406,"rel":119407},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26235],[653,119409,119410,119411],{},"MuJoCo Overview：",[2796,119412,119413],{"href":119413,"rel":119414},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26235],[14,119416,119417],{"id":119417},"章节目录",[650,119419,119420,119426,119432,119438,119444,119450,119456,119462],{},[653,119421,119422],{},[2796,119423,119425],{"href":119424},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[653,119427,119428],{},[2796,119429,119431],{"href":119430},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[653,119433,119434],{},[2796,119435,119437],{"href":119436},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[653,119439,119440],{},[2796,119441,119443],{"href":119442},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[653,119445,119446],{},[2796,119447,119449],{"href":119448},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[653,119451,119452],{},[2796,119453,119455],{"href":119454},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[653,119457,119458],{},[2796,119459,119461],{"href":119460},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[653,119463,119464],{},[2796,119465,119467],{"href":119466},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119469,119470],{"id":119470},"推荐学习路线",[26,119472,119475],{"className":119473,"code":119474,"language":7570,"meta":31},[7568],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[33,119476,119474],{"__ignoreMap":31},[19,119478,119479],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119481,119482],{"id":119482},"建议的目录结构",[19,119484,119485],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,119487,119489],{"className":26192,"code":119488,"language":26194,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,119490,119491,119499],{"__ignoreMap":31},[36,119492,119493,119495,119497],{"class":38,"line":39},[36,119494,103606],{"class":79},[36,119496,31585],{"class":62},[36,119498,103611],{"class":50},[36,119500,119501,119503],{"class":38,"line":54},[36,119502,103616],{"class":62},[36,119504,103611],{"class":50},[19,119506,119507],{},"每一章的代码都单独保存：",[26,119509,119512],{"className":119510,"code":119511,"language":7570,"meta":31},[7568],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[33,119513,119511],{"__ignoreMap":31},[19,119515,119516],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119518,119519],{"id":119519},"学习方法",[19,119521,119522],{},"每章建议按这个顺序操作：",[650,119524,119525,119528,119531,119534,119537,119540],{},[653,119526,119527],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[653,119529,119530],{},"复制最小可运行代码，保存成指定文件。",[653,119532,119533],{},"运行代码，确认没有报错。",[653,119535,119536],{},"对照“运行结果说明”理解输出。",[653,119538,119539],{},"做“验证步骤”，主动改一两个参数。",[653,119541,119542],{},"遇到报错先看“常见错误与解决方案”。",[19,119544,119545],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119547,119548],{"id":119548},"全局排错顺序",[19,119550,119551],{},"遇到问题时，按下面顺序查：",[650,119553,119554,119560,119566,119571,119574,119577,119584,119594],{},[653,119555,119556,119557],{},"Python 环境是否激活：",[33,119558,119559],{},"which python",[653,119561,119562,119563],{},"MuJoCo 是否能导入：",[33,119564,119565],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[653,119567,119568,119569],{},"是否误装了 ",[33,119570,103353],{},[653,119572,119573],{},"XML 标签是否闭合、属性是否拼写正确",[653,119575,119576],{},"actuator 引用的 joint 名字是否存在",[653,119578,119579,119581,119582],{},[33,119580,103416],{}," 的长度是否等于 ",[33,119583,104498],{},[653,119585,107924,119586,84881,119588,119590,119591],{},[33,119587,106370],{},[33,119589,106700],{}," 后是否调用了 ",[33,119592,119593],{},"mujoco.mj_forward",[653,119595,119596],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2467,119598,119599],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":119601},[119602,119603,119604,119605,119606,119607,119608,119609],{"id":119243,"depth":54,"text":119243},{"id":119272,"depth":54,"text":119273},{"id":119302,"depth":54,"text":119302},{"id":119417,"depth":54,"text":119417},{"id":119470,"depth":54,"text":119470},{"id":119482,"depth":54,"text":119482},{"id":119519,"depth":54,"text":119519},{"id":119548,"depth":54,"text":119548},"仿真搭建。",{"category":25748},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119186,"description":119610},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119617,"title":119618,"body":119619,"description":2493,"extension":2494,"meta":120074,"navigation":69,"path":120075,"seo":120076,"stem":120077,"__hash__":120078},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119620,"toc":120072},[119621,119624,119627,119633,120069],[10,119622,119618],{"id":119623},"_1-最常用的基本操作更新",[19,119625,119626],{},"装linux系统教程：",[19,119628,119629],{},[2796,119630,119631],{"href":119631,"rel":119632},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26235],[26,119634,119638],{"className":119635,"code":119636,"language":119637,"meta":31,"style":31},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[33,119639,119640,119645,119650,119659,119664,119673,119678,119698,119703,119714,119719,119728,119733,119761,119766,119785,119790,119809,119813,119818,119834,119838,119843,119873,119877,119882,119898,119902,119907,119922,119926,119931,119947,119951,119956,119968,119980,119984,119989,120006,120010,120015,120033,120037,120042,120051,120055,120060],{"__ignoreMap":31},[36,119641,119642],{"class":38,"line":39},[36,119643,119644],{"class":2621},"#更新相关的知识\n",[36,119646,119647],{"class":38,"line":54},[36,119648,119649],{"class":2621},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,119651,119652,119654,119657],{"class":38,"line":66},[36,119653,26947],{"class":79},[36,119655,119656],{"class":50}," apt",[36,119658,28612],{"class":50},[36,119660,119661],{"class":38,"line":73},[36,119662,119663],{"class":2621},"# 升级所有可更新的软件包（不删除旧包）\n",[36,119665,119666,119668,119670],{"class":38,"line":86},[36,119667,26947],{"class":79},[36,119669,119656],{"class":50},[36,119671,119672],{"class":50}," upgrade\n",[36,119674,119675],{"class":38,"line":126},[36,119676,119677],{"class":2621},"#更新和升级软件包\n",[36,119679,119680,119682,119684,119687,119689,119691,119693,119696],{"class":38,"line":131},[36,119681,26947],{"class":79},[36,119683,119656],{"class":50},[36,119685,119686],{"class":50}," update",[36,119688,28560],{"class":42},[36,119690,26947],{"class":79},[36,119692,119656],{"class":50},[36,119694,119695],{"class":50}," upgrade",[36,119697,103322],{"class":62},[36,119699,119700],{"class":38,"line":225},[36,119701,119702],{"class":2621},"#列出可更新的软件包及版本信息\n",[36,119704,119705,119708,119711],{"class":38,"line":235},[36,119706,119707],{"class":79},"apt",[36,119709,119710],{"class":50}," list",[36,119712,119713],{"class":62}," --upgradable\n",[36,119715,119716],{"class":38,"line":377},[36,119717,119718],{"class":2621},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,119720,119721,119723,119725],{"class":38,"line":617},[36,119722,26947],{"class":79},[36,119724,119656],{"class":50},[36,119726,119727],{"class":50}," full-upgrade\n",[36,119729,119730],{"class":38,"line":643},[36,119731,119732],{"class":2621},"#设置指定版本\n",[36,119734,119735,119737,119739,119741,119743,119746,119748,119750,119752,119754,119757,119759],{"class":38,"line":921},[36,119736,26947],{"class":79},[36,119738,119656],{"class":50},[36,119740,26204],{"class":50},[36,119742,31271],{"class":46},[36,119744,119745],{"class":50},"package_nam",[36,119747,2637],{"class":42},[36,119749,986],{"class":46},[36,119751,47],{"class":50},[36,119753,3463],{"class":46},[36,119755,119756],{"class":50},"version_numbe",[36,119758,3224],{"class":42},[36,119760,53656],{"class":46},[36,119762,119763],{"class":38,"line":934},[36,119764,119765],{"class":2621},"#只安装软件包不升级\n",[36,119767,119768,119770,119772,119774,119776,119778,119780,119782],{"class":38,"line":939},[36,119769,26947],{"class":79},[36,119771,119656],{"class":50},[36,119773,26204],{"class":50},[36,119775,31271],{"class":46},[36,119777,119745],{"class":50},[36,119779,2637],{"class":42},[36,119781,986],{"class":46},[36,119783,119784],{"class":62}," --no-upgrade\n",[36,119786,119787],{"class":38,"line":949},[36,119788,119789],{"class":2621},"#只升级，不存在就不安装\n",[36,119791,119792,119794,119796,119798,119800,119802,119804,119806],{"class":38,"line":962},[36,119793,26947],{"class":79},[36,119795,119656],{"class":50},[36,119797,26204],{"class":50},[36,119799,31271],{"class":46},[36,119801,119745],{"class":50},[36,119803,2637],{"class":42},[36,119805,986],{"class":46},[36,119807,119808],{"class":62}," --only-upgrade\n",[36,119810,119811],{"class":38,"line":974},[36,119812,70],{"emptyLinePlaceholder":69},[36,119814,119815],{"class":38,"line":979},[36,119816,119817],{"class":2621},"#安装指定的软件命令\n",[36,119819,119820,119822,119824,119826,119828,119830,119832],{"class":38,"line":994},[36,119821,26947],{"class":79},[36,119823,119656],{"class":50},[36,119825,26204],{"class":50},[36,119827,31271],{"class":46},[36,119829,119745],{"class":50},[36,119831,2637],{"class":42},[36,119833,53656],{"class":46},[36,119835,119836],{"class":38,"line":1006},[36,119837,70],{"emptyLinePlaceholder":69},[36,119839,119840],{"class":38,"line":1011},[36,119841,119842],{"class":2621},"#安装多个软件包\n",[36,119844,119845,119847,119849,119851,119853,119856,119859,119861,119863,119866,119868,119870],{"class":38,"line":1023},[36,119846,26947],{"class":79},[36,119848,119656],{"class":50},[36,119850,26204],{"class":50},[36,119852,31271],{"class":46},[36,119854,119855],{"class":50},"package_",[36,119857,119858],{"class":46},"1>",[36,119860,31271],{"class":46},[36,119862,119855],{"class":50},[36,119864,119865],{"class":46},"2>",[36,119867,31271],{"class":46},[36,119869,119855],{"class":50},[36,119871,119872],{"class":46},"3>\n",[36,119874,119875],{"class":38,"line":1028},[36,119876,70],{"emptyLinePlaceholder":69},[36,119878,119879],{"class":38,"line":1033},[36,119880,119881],{"class":2621},"#更新指定的软件命令\n",[36,119883,119884,119886,119888,119890,119892,119894,119896],{"class":38,"line":1053},[36,119885,26947],{"class":79},[36,119887,119656],{"class":50},[36,119889,119686],{"class":50},[36,119891,31271],{"class":46},[36,119893,119745],{"class":50},[36,119895,2637],{"class":42},[36,119897,53656],{"class":46},[36,119899,119900],{"class":38,"line":1064},[36,119901,70],{"emptyLinePlaceholder":69},[36,119903,119904],{"class":38,"line":1075},[36,119905,119906],{"class":2621},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,119908,119909,119911,119914,119916,119918,119920],{"class":38,"line":2291},[36,119910,119707],{"class":79},[36,119912,119913],{"class":50}," show",[36,119915,31271],{"class":46},[36,119917,119745],{"class":50},[36,119919,2637],{"class":42},[36,119921,53656],{"class":46},[36,119923,119924],{"class":38,"line":2329},[36,119925,70],{"emptyLinePlaceholder":69},[36,119927,119928],{"class":38,"line":2334},[36,119929,119930],{"class":2621},"#删除软件包命令\n",[36,119932,119933,119935,119937,119939,119941,119943,119945],{"class":38,"line":2339},[36,119934,26947],{"class":79},[36,119936,119656],{"class":50},[36,119938,28449],{"class":50},[36,119940,31271],{"class":46},[36,119942,119745],{"class":50},[36,119944,2637],{"class":42},[36,119946,53656],{"class":46},[36,119948,119949],{"class":38,"line":2365},[36,119950,70],{"emptyLinePlaceholder":69},[36,119952,119953],{"class":38,"line":2373},[36,119954,119955],{"class":2621},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,119957,119958,119960,119962,119965],{"class":38,"line":5001},[36,119959,26947],{"class":79},[36,119961,119656],{"class":50},[36,119963,119964],{"class":50}," autoremove",[36,119966,119967],{"class":2621},"  # 删除不再需要的依赖和库文件\n",[36,119969,119970,119972,119974,119977],{"class":38,"line":5006},[36,119971,26947],{"class":79},[36,119973,119656],{"class":50},[36,119975,119976],{"class":50}," clean",[36,119978,119979],{"class":2621},"       # 清理下载的缓存包\n",[36,119981,119982],{"class":38,"line":10328},[36,119983,70],{"emptyLinePlaceholder":69},[36,119985,119986],{"class":38,"line":10352},[36,119987,119988],{"class":2621},"#移除软件包及配置文件\n",[36,119990,119991,119993,119995,119998,120000,120002,120004],{"class":38,"line":10357},[36,119992,26947],{"class":79},[36,119994,119656],{"class":50},[36,119996,119997],{"class":50}," purge",[36,119999,31271],{"class":46},[36,120001,119745],{"class":50},[36,120003,2637],{"class":42},[36,120005,53656],{"class":46},[36,120007,120008],{"class":38,"line":10363},[36,120009,70],{"emptyLinePlaceholder":69},[36,120011,120012],{"class":38,"line":10390},[36,120013,120014],{"class":2621},"#查找软件包命令\n",[36,120016,120017,120019,120021,120024,120026,120029,120031],{"class":38,"line":10395},[36,120018,26947],{"class":79},[36,120020,119656],{"class":50},[36,120022,120023],{"class":50}," search",[36,120025,31271],{"class":46},[36,120027,120028],{"class":50},"keywor",[36,120030,2870],{"class":42},[36,120032,53656],{"class":46},[36,120034,120035],{"class":38,"line":10401},[36,120036,70],{"emptyLinePlaceholder":69},[36,120038,120039],{"class":38,"line":10413},[36,120040,120041],{"class":2621},"#列出所有已安装的包\n",[36,120043,120044,120046,120048],{"class":38,"line":10425},[36,120045,119707],{"class":79},[36,120047,119710],{"class":50},[36,120049,120050],{"class":62}," --installed\n",[36,120052,120053],{"class":38,"line":10437},[36,120054,70],{"emptyLinePlaceholder":69},[36,120056,120057],{"class":38,"line":12095},[36,120058,120059],{"class":2621},"#列出所有已安装的包的版本信息\n",[36,120061,120062,120064,120066],{"class":38,"line":12120},[36,120063,119707],{"class":79},[36,120065,119710],{"class":50},[36,120067,120068],{"class":62}," --all-versions\n",[2467,120070,120071],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":120073},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119618,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120080,"title":120081,"body":120082,"description":2493,"extension":2494,"meta":120823,"navigation":69,"path":120824,"seo":120825,"stem":120826,"__hash__":120827},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120083,"toc":120810},[120084,120087,120091,120094,120100,120104,120108,120114,120119,120124,120129,120134,120139,120142,120145,120148,120151,120155,120158,120163,120166,120171,120174,120179,120186,120189,120192,120195,120198,120201,120212,120216,120220,120225,120230,120234,120239,120243,120248,120252,120256,120261,120264,120309,120314,120318,120322,120327,120333,120338,120348,120353,120363,120368,120373,120400,120404,120407,120412,120415,120440,120444,120449,120452,120457,120462,120482,120487,120490,120505,120509,120562,120565,120570,120574,120577,120592,120595,120598,120603,120607,120611,120614,120618,120622,120625,120630,120635,120639,120646,120654,120657,120664,120669,120674,120677,120682,120689,120694,120701,120705,120707,120712,120716,120719,120722,120727,120730,120735,120738,120743,120748,120753,120757,120762,120766,120807],[10,120085,120081],{"id":120086},"_2-linux装机教程",[14,120088,120090],{"id":120089},"_21-实体机","2.1 实体机",[19,120092,120093],{},"使用清华源：（Ubuntu24.04）",[19,120095,120096],{},[2796,120097,120098],{"href":120098,"rel":120099},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26235],[14,120101,120103],{"id":120102},"_22-普通虚拟机","2.2 普通虚拟机",[1752,120105,120107],{"id":120106},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120109,120110],{},[2796,120111,120112],{"href":120112,"rel":120113},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26235],[19,120115,120116],{},[3879,120117],{"alt":31,"src":120118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120120,120121],{},[3879,120122],{"alt":31,"src":120123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120125,120126],{},[3879,120127],{"alt":31,"src":120128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120130,120131],{},[3879,120132],{"alt":31,"src":120133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120135,120136],{},[3879,120137],{"alt":31,"src":120138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120140,120141],{},"内存4G（4096MB）；",[19,120143,120144],{},"CPU给4个核；",[19,120146,120147],{},"硬盘动态分配60G；",[19,120149,120150],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1752,120152,120154],{"id":120153},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120156,120157],{},"按照1.1的步骤下载Ubuntu",[19,120159,120160],{},[3879,120161],{"alt":31,"src":120162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120164,120165],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120167,120168],{},[3879,120169],{"alt":31,"src":120170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120172,120173],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120175,120176],{},[3879,120177],{"alt":31,"src":120178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120180,120181,120182,120185],{},"选择“正常安装”(找不到都用Alt+F7)， ",[667,120183,120184],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120187,120188],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120190,120191],{},"将改动写入磁盘吗 继续",[19,120193,120194],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120196,120197],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120199,120200],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120202,120203,120204,120207,120208,120211],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[667,120205,120206],{},"除了"," 选不发送系统信息与不升级之外， ",[667,120209,120210],{},"其它"," 都跳过或前进）",[1752,120213,120215],{"id":120214},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24368,120217,120219],{"id":120218},"_2231-全屏","2.2.3.1 全屏",[19,120221,120222],{},[3879,120223],{"alt":31,"src":120224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120226,120227],{},[3879,120228],{"alt":31,"src":120229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24368,120231,120233],{"id":120232},"_2232-文件交换","2.2.3.2 文件交换",[19,120235,120236],{},[3879,120237],{"alt":31,"src":120238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24368,120240,120242],{"id":120241},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120244,120245],{},[3879,120246],{"alt":31,"src":120247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120249,120251],{"id":120250},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1752,120253,120255],{"id":120254},"_231-简介与优缺点","2.3.1 简介与优缺点",[650,120257,120258],{},[653,120259,120260],{},"什么情况下推荐？",[19,120262,120263],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[650,120265,120266],{"start":54},[653,120267,120268,120269],{},"优缺点：",[650,120270,120271,120301],{},[653,120272,120273,120274],{},"优点：",[650,120275,120276,120279,120286,120289,120292,120295,120298],{},[653,120277,120278],{},"WSL2是最好的Linux发行版;(bushi)",[653,120280,120281,120282,120285],{},"性能损耗极低。且比在Windows上跑深度性能 ",[667,120283,120284],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[653,120287,120288],{},"非常方便调用USB设备，可以USB直通;",[653,120290,120291],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[653,120293,120294],{},"非常方便Win与WSL2互相传文件等协同操作;",[653,120296,120297],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[653,120299,120300],{},"非常方便使用Windows的VScode远程开发;",[653,120302,120303,120304],{},"缺点：",[650,120305,120306],{},[653,120307,120308],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120310,120311],{},[3879,120312],{"alt":31,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1752,120315,120317],{"id":120316},"_232-安装教程","2.3.2 安装教程",[24368,120319,120321],{"id":120320},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[650,120323,120324],{},[653,120325,120326],{},"方法一(图形界面)",[19,120328,120329,120330,26989],{},"用Win+R输入",[33,120331,120332],{},"appwiz.cpl",[19,120334,120335],{},[3879,120336],{"alt":31,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120339,120340,120341,120344,120345,28843],{},"点击OK进入 ",[667,120342,120343],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[667,120346,120347],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120349,120350],{},[3879,120351],{"alt":31,"src":120352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120354,120355,120356,302,120359,120362],{},"选择 ",[667,120357,120358],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[667,120360,120361],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120364,120365],{},[3879,120366],{"alt":31,"src":120367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[650,120369,120370],{"start":54},[653,120371,120372],{},"方法二(命令行)",[26,120374,120378],{"className":120375,"code":120376,"language":120377,"meta":31,"style":31},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[33,120379,120380,120385,120390,120395],{"__ignoreMap":31},[36,120381,120382],{"class":38,"line":39},[36,120383,120384],{},"# 开启 Linux 子系统\n",[36,120386,120387],{"class":38,"line":54},[36,120388,120389],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,120391,120392],{"class":38,"line":66},[36,120393,120394],{},"# 开启虚拟机平台\n",[36,120396,120397],{"class":38,"line":73},[36,120398,120399],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24368,120401,120403],{"id":120402},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120405,120406],{},"用管理员权限打开powershell",[19,120408,120409],{},[3879,120410],{"alt":31,"src":120411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120413,120414],{},"升级WSL并设置默认版本为WSL2",[26,120416,120418],{"className":120375,"code":120417,"language":120377,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,120419,120420,120425,120430,120435],{"__ignoreMap":31},[36,120421,120422],{"class":38,"line":39},[36,120423,120424],{},"# 更新 wsl\n",[36,120426,120427],{"class":38,"line":54},[36,120428,120429],{},"wsl --update\n",[36,120431,120432],{"class":38,"line":66},[36,120433,120434],{},"# 将 wsl 版本设置为 wsl2\n",[36,120436,120437],{"class":38,"line":73},[36,120438,120439],{},"wsl --set-default-version 2\n",[24368,120441,120443],{"id":120442},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[650,120445,120446],{},[653,120447,120448],{},"方式一(商店下载)",[19,120450,120451],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120453,120454],{},[3879,120455],{"alt":31,"src":120456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[650,120458,120459],{"start":54},[653,120460,120461],{},"方式二(命令行安装)",[26,120463,120465],{"className":120375,"code":120464,"language":120377,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,120466,120467,120472,120477],{"__ignoreMap":31},[36,120468,120469],{"class":38,"line":39},[36,120470,120471],{},"# 列出可安装的 Linux 版本\n",[36,120473,120474],{"class":38,"line":54},[36,120475,120476],{},"#（需要科学手段）\n",[36,120478,120479],{"class":38,"line":66},[36,120480,120481],{},"wsl --list --online\n",[19,120483,120484],{},[3879,120485],{"alt":31,"src":120486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120488,120489],{},"选择对应发行版并安装",[26,120491,120493],{"className":120375,"code":120492,"language":120377,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,120494,120495,120500],{"__ignoreMap":31},[36,120496,120497],{"class":38,"line":39},[36,120498,120499],{},"# Ubuntu安装完毕后需要重启系统\n",[36,120501,120502],{"class":38,"line":54},[36,120503,120504],{},"wsl --install -d Ubuntu-24.04\n",[24368,120506,120508],{"id":120507},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,120510,120512],{"className":120375,"code":120511,"language":120377,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,120513,120514,120519,120524,120529,120534,120538,120542,120547,120552,120557],{"__ignoreMap":31},[36,120515,120516],{"class":38,"line":39},[36,120517,120518],{},"# 查看 wsl\n",[36,120520,120521],{"class":38,"line":54},[36,120522,120523],{},"wsl -l\n",[36,120525,120526],{"class":38,"line":66},[36,120527,120528],{},"# 查看 wsl 运行版本或模式\n",[36,120530,120531],{"class":38,"line":73},[36,120532,120533],{},"wsl -l -v\n",[36,120535,120536],{"class":38,"line":86},[36,120537,70],{"emptyLinePlaceholder":69},[36,120539,120540],{"class":38,"line":126},[36,120541,70],{"emptyLinePlaceholder":69},[36,120543,120544],{"class":38,"line":131},[36,120545,120546],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,120548,120549],{"class":38,"line":225},[36,120550,120551],{},"wsl --set-version \u003Cdistro> 2\n",[36,120553,120554],{"class":38,"line":235},[36,120555,120556],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,120558,120559],{"class":38,"line":377},[36,120560,120561],{},"wsl --unregister \u003Cdistro>\n",[19,120563,120564],{},"输出Version为2即正常",[19,120566,120567],{},[3879,120568],{"alt":31,"src":120569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24368,120571,120573],{"id":120572},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120575,120576],{},"直接在Powershell里输入wsl命令进入子系统",[26,120578,120580],{"className":120375,"code":120579,"language":120377,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,120581,120582,120587],{"__ignoreMap":31},[36,120583,120584],{"class":38,"line":39},[36,120585,120586],{},"# 进入子系统\n",[36,120588,120589],{"class":38,"line":54},[36,120590,120591],{},"wsl\n",[19,120593,120594],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120596,120597],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120599,120600],{},[3879,120601],{"alt":31,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1752,120604,120606],{"id":120605},"_233-配置各种环境","2.3.3 配置各种环境",[24368,120608,120610],{"id":120609},"_2331-换源","2.3.3.1 换源",[19,120612,120613],{},"(同实体机LINUX，往下找教程)",[24368,120615,120617],{"id":120616},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25280,120619,120621],{"id":120620},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120623,120624],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120626,120627],{},[3879,120628],{"alt":31,"src":120629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120631,120632],{},[3879,120633],{"alt":31,"src":120634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25280,120636,120638],{"id":120637},"_23322-cuda","2.3.3.2.2 CUDA",[19,120640,120641,120642],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2796,120643,120644],{"href":120644,"rel":120645},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26235],[19,120647,120648,120651],{},[3879,120649],{"alt":31,"src":120650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3879,120652],{"alt":31,"src":120653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120655,120656],{},"在下方的网站，选择合适的版本。",[19,120658,120659,120660],{},"WSL2 专属 CUDA 指南：",[2796,120661,120662],{"href":120662,"rel":120663},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26235],[19,120665,120666],{},[667,120667,120668],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120670,120671],{},[3879,120672],{"alt":31,"src":120673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120675,120676],{},"挨行敲一遍",[19,120678,120679],{},[3879,120680],{"alt":31,"src":120681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120683,120684,120685,120688],{},"敲完后，输入",[33,120686,120687],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120690,120691],{},[3879,120692],{"alt":31,"src":120693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120695,120696,120697,120700],{},"（请详看下方教程的",[667,120698,120699],{},"安装CUDA的配置环境来看","如何配置环境）",[25280,120702,120704],{"id":120703},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120706,120613],{},[19,120708,120709],{},[3879,120710],{"alt":31,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24368,120713,120715],{"id":120714},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120717,120718],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120720,120721],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120723,120724],{},[3879,120725],{"alt":31,"src":120726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120728,120729],{},"连接WSL2",[19,120731,120732],{},[3879,120733],{"alt":31,"src":120734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120736,120737],{},"远程开发成功。",[19,120739,120740],{},[3879,120741],{"alt":31,"src":120742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120744,120745],{},[3879,120746],{"alt":31,"src":120747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120749,120750],{},[3879,120751],{"alt":31,"src":120752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24368,120754,120756],{"id":120755},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120758,120759],{},[3879,120760],{"alt":31,"src":120761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24368,120763,120765],{"id":120764},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,120767,120769],{"className":119635,"code":120768,"language":119637,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,120770,120771,120779,120787,120798,120802],{"__ignoreMap":31},[36,120772,120773,120775,120777],{"class":38,"line":39},[36,120774,26947],{"class":79},[36,120776,119656],{"class":50},[36,120778,28612],{"class":50},[36,120780,120781,120783,120785],{"class":38,"line":54},[36,120782,26947],{"class":79},[36,120784,119656],{"class":50},[36,120786,119672],{"class":50},[36,120788,120789,120791,120793,120795],{"class":38,"line":66},[36,120790,26947],{"class":79},[36,120792,119656],{"class":50},[36,120794,26204],{"class":50},[36,120796,120797],{"class":50}," mesa-utils\n",[36,120799,120800],{"class":38,"line":73},[36,120801,70],{"emptyLinePlaceholder":69},[36,120803,120804],{"class":38,"line":86},[36,120805,120806],{"class":2621},"#然后重启wsl2即可\n",[2467,120808,120809],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":120811},[120812,120813,120818],{"id":120089,"depth":54,"text":120090},{"id":120102,"depth":54,"text":120103,"children":120814},[120815,120816,120817],{"id":120106,"depth":66,"text":120107},{"id":120153,"depth":66,"text":120154},{"id":120214,"depth":66,"text":120215},{"id":120250,"depth":54,"text":120251,"children":120819},[120820,120821,120822],{"id":120254,"depth":66,"text":120255},{"id":120316,"depth":66,"text":120317},{"id":120605,"depth":66,"text":120606},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120081,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120829,"title":120830,"body":120831,"description":2493,"extension":2494,"meta":123767,"navigation":69,"path":123768,"seo":123769,"stem":123770,"__hash__":123771},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120832,"toc":123739},[120833,120836,120840,120846,120850,120856,120860,121048,121051,121056,121060,121064,121067,121070,121076,121081,121084,121087,121092,121125,121130,121134,121211,121214,121219,121223,121226,121265,121268,121277,121295,121300,121307,121424,121429,121432,121459,121464,121468,121477,121527,121534,121538,121541,121555,121562,121596,121601,121605,121628,121631,121636,121640,121643,121646,121649,121691,121695,121698,121701,121742,121746,121750,121753,121758,121763,121766,121789,121792,121800,121805,121808,121813,121818,121821,121826,121830,121835,121858,121863,121925,121933,121938,121943,121946,121951,121954,121959,121964,121982,121987,121993,121998,122012,122016,122019,122022,122025,122068,122071,122076,122177,122180,122185,122189,122193,122230,122234,122238,122242,122288,122292,122337,122341,122348,122356,122411,122414,122491,122494,122517,122521,122524,122529,122534,122542,122545,122550,122555,122560,122563,122568,122577,122580,122585,122588,122659,122664,122667,122672,122675,122680,122683,122688,122691,122696,122701,122704,122779,122782,122795,122800,122803,122817,122820,122849,122854,122883,122886,122891,122895,122900,122909,122912,122917,122920,122925,122928,122931,122936,122939,122944,122949,122952,122957,122960,123085,123090,123120,123123,123128,123133,123150,123153,123196,123199,123226,123231,123244,123387,123391,123396,123410,123413,123464,123467,123497,123500,123516,123521,123535,123538,123605,123610,123619,123624,123627,123639,123644,123651,123675,123678,123683,123686,123705,123710,123717,123729,123736],[10,120834,120830],{"id":120835},"_3-安装必备配置",[14,120837,120839],{"id":120838},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,120841,120844],{"className":120842,"code":120843,"language":7570},[7568],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[33,120845,120843],{"__ignoreMap":31},[1752,120847,120849],{"id":120848},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,120851,120854],{"className":120852,"code":120853,"language":7570},[7568],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[33,120855,120853],{"__ignoreMap":31},[1752,120857,120859],{"id":120858},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,120861,120865],{"className":120862,"code":120863,"language":120864,"meta":31,"style":31},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[33,120866,120867,120875,120886,120898,120912,120916,120926,120931,120935,120939,120944,120948,120960,120964,120969,120973,120984,120988,121004,121008,121019,121023,121028,121032,121040],{"__ignoreMap":31},[36,120868,120869,120871,120873],{"class":38,"line":39},[36,120870,26947],{"class":79},[36,120872,119656],{"class":50},[36,120874,28612],{"class":50},[36,120876,120877,120879,120881,120883],{"class":38,"line":54},[36,120878,26947],{"class":79},[36,120880,119656],{"class":50},[36,120882,26204],{"class":50},[36,120884,120885],{"class":50}," vim\n",[36,120887,120888,120890,120893,120895],{"class":38,"line":66},[36,120889,26947],{"class":79},[36,120891,120892],{"class":50}," rm",[36,120894,27695],{"class":62},[36,120896,120897],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,120899,120900,120902,120904,120906,120909],{"class":38,"line":73},[36,120901,26947],{"class":79},[36,120903,120892],{"class":50},[36,120905,27695],{"class":62},[36,120907,120908],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,120910,120911],{"class":62},"**\n",[36,120913,120914],{"class":38,"line":86},[36,120915,70],{"emptyLinePlaceholder":69},[36,120917,120918,120920,120923],{"class":38,"line":126},[36,120919,26947],{"class":79},[36,120921,120922],{"class":50}," vim",[36,120924,120925],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,120927,120928],{"class":38,"line":131},[36,120929,120930],{"class":50},"```\n",[36,120932,120933],{"class":38,"line":225},[36,120934,70],{"emptyLinePlaceholder":69},[36,120936,120937],{"class":38,"line":235},[36,120938,70],{"emptyLinePlaceholder":69},[36,120940,120941],{"class":38,"line":377},[36,120942,120943],{"class":79},"选择好Ubuntu版本后，复制下方的内容。\n",[36,120945,120946],{"class":38,"line":617},[36,120947,70],{"emptyLinePlaceholder":69},[36,120949,120950,120952,120955,120958],{"class":38,"line":643},[36,120951,2784],{"class":46},[36,120953,120954],{"class":50},"[](",[36,120956,120957],{"class":79},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,120959,123],{"class":50},[36,120961,120962],{"class":38,"line":921},[36,120963,70],{"emptyLinePlaceholder":69},[36,120965,120966],{"class":38,"line":934},[36,120967,120968],{"class":79},"粘贴进去\n",[36,120970,120971],{"class":38,"line":939},[36,120972,70],{"emptyLinePlaceholder":69},[36,120974,120975,120977,120979,120982],{"class":38,"line":949},[36,120976,2784],{"class":46},[36,120978,120954],{"class":50},[36,120980,120981],{"class":79},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,120983,123],{"class":50},[36,120985,120986],{"class":38,"line":962},[36,120987,70],{"emptyLinePlaceholder":69},[36,120989,120990,120993,120996,120999,121001],{"class":38,"line":974},[36,120991,120992],{"class":79},"按一下ESC，然后英文冒号，输入",[36,120994,120995],{"class":50}," `",[36,120997,120998],{"class":79},":wq!",[36,121000,3523],{"class":50},[36,121002,121003],{"class":79},"然后回车\n",[36,121005,121006],{"class":38,"line":979},[36,121007,70],{"emptyLinePlaceholder":69},[36,121009,121010,121012,121014,121017],{"class":38,"line":994},[36,121011,2784],{"class":46},[36,121013,120954],{"class":50},[36,121015,121016],{"class":79},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,121018,123],{"class":50},[36,121020,121021],{"class":38,"line":1006},[36,121022,70],{"emptyLinePlaceholder":69},[36,121024,121025],{"class":38,"line":1011},[36,121026,121027],{"class":79},"输入以下命令\n",[36,121029,121030],{"class":38,"line":1023},[36,121031,70],{"emptyLinePlaceholder":69},[36,121033,121034,121037],{"class":38,"line":1028},[36,121035,121036],{"class":50},"```",[36,121038,121039],{"class":79},"Bash\n",[36,121041,121042,121044,121046],{"class":38,"line":1033},[36,121043,26947],{"class":79},[36,121045,119656],{"class":50},[36,121047,28612],{"class":50},[19,121049,121050],{},"这里被替换成对应学校则成功",[19,121052,121053],{},[3879,121054],{"alt":31,"src":121055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121057,121059],{"id":121058},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1752,121061,121063],{"id":121062},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121065,121066],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121068,121069],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121071,121072],{},[2796,121073,121074],{"href":121074,"rel":121075},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26235],[19,121077,121078],{},[3879,121079],{"alt":31,"src":121080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121082,121083],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121085,121086],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121088,121089],{},[3879,121090],{"alt":31,"src":121091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,121093,121095],{"className":119635,"code":121094,"language":119637,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,121096,121097,121102,121109,121114],{"__ignoreMap":31},[36,121098,121099],{"class":38,"line":39},[36,121100,121101],{"class":2621},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,121103,121104,121106],{"class":38,"line":54},[36,121105,103616],{"class":62},[36,121107,121108],{"class":50}," ~\u002FDownloads\n",[36,121110,121111],{"class":38,"line":66},[36,121112,121113],{"class":2621},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,121115,121116,121118,121120,121122],{"class":38,"line":73},[36,121117,26947],{"class":79},[36,121119,119656],{"class":50},[36,121121,26204],{"class":50},[36,121123,121124],{"class":50}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121126,121127],{},[3879,121128],{"alt":31,"src":121129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1752,121131,121133],{"id":121132},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,121135,121137],{"className":119635,"code":121136,"language":119637,"meta":31,"style":31},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[33,121138,121139,121144,121152,121163,121168,121172,121177,121187,121195,121206],{"__ignoreMap":31},[36,121140,121141],{"class":38,"line":39},[36,121142,121143],{"class":2621},"# 老版\n",[36,121145,121146,121148,121150],{"class":38,"line":54},[36,121147,26947],{"class":79},[36,121149,119656],{"class":50},[36,121151,28612],{"class":50},[36,121153,121154,121156,121158,121160],{"class":38,"line":66},[36,121155,26947],{"class":79},[36,121157,119656],{"class":50},[36,121159,26204],{"class":50},[36,121161,121162],{"class":50}," neofetch\n",[36,121164,121165],{"class":38,"line":73},[36,121166,121167],{"class":79},"neofetch\n",[36,121169,121170],{"class":38,"line":86},[36,121171,70],{"emptyLinePlaceholder":69},[36,121173,121174],{"class":38,"line":126},[36,121175,121176],{"class":2621},"# 新版\n",[36,121178,121179,121181,121184],{"class":38,"line":131},[36,121180,26947],{"class":79},[36,121182,121183],{"class":50}," add-apt-repository",[36,121185,121186],{"class":50}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,121188,121189,121191,121193],{"class":38,"line":225},[36,121190,26947],{"class":79},[36,121192,119656],{"class":50},[36,121194,28612],{"class":50},[36,121196,121197,121199,121201,121203],{"class":38,"line":235},[36,121198,26947],{"class":79},[36,121200,119656],{"class":50},[36,121202,26204],{"class":50},[36,121204,121205],{"class":50}," fastfetch\n",[36,121207,121208],{"class":38,"line":377},[36,121209,121210],{"class":79},"fastfetch\n",[19,121212,121213],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121215,121216],{},[3879,121217],{"alt":31,"src":121218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1752,121220,121222],{"id":121221},"_323-移除snap应用","3.2.3 移除snap应用",[19,121224,121225],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,121227,121229],{"className":119635,"code":121228,"language":119637,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,121230,121231,121243,121254],{"__ignoreMap":31},[36,121232,121233,121235,121237,121240],{"class":38,"line":39},[36,121234,26947],{"class":79},[36,121236,28883],{"class":50},[36,121238,121239],{"class":50}," disable",[36,121241,121242],{"class":50}," snapd.service\n",[36,121244,121245,121247,121249,121251],{"class":38,"line":54},[36,121246,26947],{"class":79},[36,121248,28883],{"class":50},[36,121250,121239],{"class":50},[36,121252,121253],{"class":50}," snapd.socket\n",[36,121255,121256,121258,121260,121262],{"class":38,"line":66},[36,121257,26947],{"class":79},[36,121259,28883],{"class":50},[36,121261,121239],{"class":50},[36,121263,121264],{"class":50}," snapd.seeded.service\n",[19,121266,121267],{},"然后查看snap应用列表",[19,121269,121270,121271,121276],{},"根据你安装的选择不同（最小安装或普通安装），有",[2796,121272,121275],{"href":121273,"rel":121274},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26235],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,121278,121280],{"className":119635,"code":121279,"language":119637,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,121281,121282,121287],{"__ignoreMap":31},[36,121283,121284],{"class":38,"line":39},[36,121285,121286],{"class":2621},"# 查询当前系统上snap安装了哪些app\n",[36,121288,121289,121292],{"class":38,"line":54},[36,121290,121291],{"class":79},"snap",[36,121293,121294],{"class":50}," list\n",[19,121296,121297],{},[3879,121298],{"alt":31,"src":121299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121301,121302,121303,121306],{},"卸载掉图中所有应用，按照 ",[667,121304,121305],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,121308,121310],{"className":119635,"code":121309,"language":119637,"meta":31,"style":31},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[33,121311,121312,121317,121329,121334,121345,121350,121361,121366,121377,121382,121386,121391,121402,121413],{"__ignoreMap":31},[36,121313,121314],{"class":38,"line":39},[36,121315,121316],{"class":2621},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,121318,121319,121321,121324,121326],{"class":38,"line":54},[36,121320,26947],{"class":79},[36,121322,121323],{"class":50}," snap",[36,121325,28449],{"class":50},[36,121327,121328],{"class":50}," snap-store\n",[36,121330,121331],{"class":38,"line":66},[36,121332,121333],{"class":2621},"#移除firefox浏览器\n",[36,121335,121336,121338,121340,121342],{"class":38,"line":73},[36,121337,26947],{"class":79},[36,121339,121323],{"class":50},[36,121341,28449],{"class":50},[36,121343,121344],{"class":50}," firefox\n",[36,121346,121347],{"class":38,"line":86},[36,121348,121349],{"class":2621},"#移除gnome-42-2204\n",[36,121351,121352,121354,121356,121358],{"class":38,"line":126},[36,121353,26947],{"class":79},[36,121355,121323],{"class":50},[36,121357,28449],{"class":50},[36,121359,121360],{"class":50}," gnome-42-2204\n",[36,121362,121363],{"class":38,"line":131},[36,121364,121365],{"class":2621},"#移除gtk-common-themes\n",[36,121367,121368,121370,121372,121374],{"class":38,"line":225},[36,121369,26947],{"class":79},[36,121371,121323],{"class":50},[36,121373,28449],{"class":50},[36,121375,121376],{"class":50}," gtk-common-themes\n",[36,121378,121379],{"class":38,"line":235},[36,121380,121381],{"class":2621},"#移除其它...\n",[36,121383,121384],{"class":38,"line":377},[36,121385,5059],{"class":42},[36,121387,121388],{"class":38,"line":617},[36,121389,121390],{"class":2621},"#移除core22,bare以及snapd\n",[36,121392,121393,121395,121397,121399],{"class":38,"line":643},[36,121394,26947],{"class":79},[36,121396,121323],{"class":50},[36,121398,28449],{"class":50},[36,121400,121401],{"class":50}," core22\n",[36,121403,121404,121406,121408,121410],{"class":38,"line":921},[36,121405,26947],{"class":79},[36,121407,121323],{"class":50},[36,121409,28449],{"class":50},[36,121411,121412],{"class":50}," bare\n",[36,121414,121415,121417,121419,121421],{"class":38,"line":934},[36,121416,26947],{"class":79},[36,121418,121323],{"class":50},[36,121420,28449],{"class":50},[36,121422,121423],{"class":50}," snapd\n",[19,121425,121426],{},[3879,121427],{"alt":31,"src":121428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121430,121431],{},"输入以下命令查看是否还有snap包",[26,121433,121435],{"className":119635,"code":121434,"language":119637,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,121436,121437,121443,121447,121451,121455],{"__ignoreMap":31},[36,121438,121439,121441],{"class":38,"line":39},[36,121440,121291],{"class":79},[36,121442,121294],{"class":50},[36,121444,121445],{"class":38,"line":54},[36,121446,121143],{"class":2621},[36,121448,121449],{"class":38,"line":66},[36,121450,121167],{"class":79},[36,121452,121453],{"class":38,"line":73},[36,121454,121176],{"class":2621},[36,121456,121457],{"class":38,"line":86},[36,121458,121210],{"class":79},[19,121460,121461],{},[3879,121462],{"alt":31,"src":121463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1752,121465,121467],{"id":121466},"_324-移除snap","3.2.4 移除snap",[19,121469,121470,121471,121476],{},"在删除掉",[2796,121472,121475],{"href":121473,"rel":121474},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26235],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,121478,121480],{"className":119635,"code":121479,"language":119637,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,121481,121482,121487,121500,121505,121516],{"__ignoreMap":31},[36,121483,121484],{"class":38,"line":39},[36,121485,121486],{"class":2621}," #使用apt移除掉snap\n",[36,121488,121489,121491,121493,121495,121498],{"class":38,"line":54},[36,121490,26947],{"class":79},[36,121492,119656],{"class":50},[36,121494,119964],{"class":50},[36,121496,121497],{"class":62}," --purge",[36,121499,121423],{"class":50},[36,121501,121502],{"class":38,"line":66},[36,121503,121504],{"class":2621},"#移除snapd的一些目录\n",[36,121506,121507,121509,121511,121513],{"class":38,"line":73},[36,121508,26947],{"class":79},[36,121510,120892],{"class":50},[36,121512,27695],{"class":62},[36,121514,121515],{"class":50}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,121517,121518,121520,121522,121524],{"class":38,"line":86},[36,121519,26947],{"class":79},[36,121521,120892],{"class":50},[36,121523,27695],{"class":62},[36,121525,121526],{"class":50}," ~\u002Fsnap\n",[19,121528,121529,121530,121533],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,121531,121532],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1752,121535,121537],{"id":121536},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121539,121540],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,121542,121544],{"className":119635,"code":121543,"language":119637,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,121545,121546],{"__ignoreMap":31},[36,121547,121548,121550,121552],{"class":38,"line":39},[36,121549,26947],{"class":79},[36,121551,120922],{"class":50},[36,121553,121554],{"class":50}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121556,121557,121558,121561],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,121559,121560],{},":wq"," 回车",[26,121563,121565],{"className":119635,"code":121564,"language":119637,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,121566,121567,121574,121588],{"__ignoreMap":31},[36,121568,121569,121572],{"class":38,"line":39},[36,121570,121571],{"class":79},"Package:",[36,121573,121423],{"class":50},[36,121575,121576,121579,121582,121585],{"class":38,"line":54},[36,121577,121578],{"class":79},"Pin:",[36,121580,121581],{"class":50}," release",[36,121583,121584],{"class":50}," a=",[36,121586,121587],{"class":62},"*\n",[36,121589,121590,121593],{"class":38,"line":66},[36,121591,121592],{"class":79},"Pin-Priority:",[36,121594,121595],{"class":62}," -10\n",[19,121597,121598],{},[3879,121599],{"alt":31,"src":121600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1752,121602,121604],{"id":121603},"_326-测试是否成功","3.2.6 测试是否成功",[26,121606,121608],{"className":119635,"code":121607,"language":119637,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,121609,121610,121618],{"__ignoreMap":31},[36,121611,121612,121614,121616],{"class":38,"line":39},[36,121613,26947],{"class":79},[36,121615,119656],{"class":50},[36,121617,28612],{"class":50},[36,121619,121620,121622,121624,121626],{"class":38,"line":54},[36,121621,26947],{"class":79},[36,121623,119656],{"class":50},[36,121625,26204],{"class":50},[36,121627,121344],{"class":50},[19,121629,121630],{},"这里提示snapd无法被安装，就证明成功了",[19,121632,121633],{},[3879,121634],{"alt":31,"src":121635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1752,121637,121639],{"id":121638},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121641,121642],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121644,121645],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121647,121648],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,121650,121652],{"className":119635,"code":121651,"language":119637,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,121653,121654,121659,121668,121673,121681],{"__ignoreMap":31},[36,121655,121656],{"class":38,"line":39},[36,121657,121658],{"class":2621},"# 添加Mozilla提供的源\n",[36,121660,121661,121663,121665],{"class":38,"line":54},[36,121662,26947],{"class":79},[36,121664,121183],{"class":50},[36,121666,121667],{"class":50}," ppa:mozillateam\u002Fppa\n",[36,121669,121670],{"class":38,"line":66},[36,121671,121672],{"class":2621},"# 安装Firefox\n",[36,121674,121675,121677,121679],{"class":38,"line":73},[36,121676,26947],{"class":79},[36,121678,119656],{"class":50},[36,121680,28612],{"class":50},[36,121682,121683,121685,121687,121689],{"class":38,"line":86},[36,121684,26947],{"class":79},[36,121686,119656],{"class":50},[36,121688,26204],{"class":50},[36,121690,121344],{"class":50},[1752,121692,121694],{"id":121693},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121696,121697],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121699,121700],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,121702,121704],{"className":119635,"code":121703,"language":119637,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,121705,121706,121711,121721,121729,121733],{"__ignoreMap":31},[36,121707,121708],{"class":38,"line":39},[36,121709,121710],{"class":2621},"#删掉禁止安装snap的配置文件\n",[36,121712,121713,121715,121717,121719],{"class":38,"line":54},[36,121714,26947],{"class":79},[36,121716,120892],{"class":50},[36,121718,27695],{"class":62},[36,121720,121554],{"class":50},[36,121722,121723,121725,121727],{"class":38,"line":66},[36,121724,26947],{"class":79},[36,121726,119656],{"class":50},[36,121728,28612],{"class":50},[36,121730,121731],{"class":38,"line":73},[36,121732,70],{"emptyLinePlaceholder":69},[36,121734,121735,121737,121739],{"class":38,"line":86},[36,121736,26947],{"class":79},[36,121738,119656],{"class":50},[36,121740,121741],{"class":50}," dist-update\n",[14,121743,121745],{"id":121744},"_33-中文输入法","3.3 中文输入法",[1752,121747,121749],{"id":121748},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121751,121752],{},"官网下载搜狗输入法",[19,121754,121755],{},[3879,121756],{"alt":31,"src":121757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121759,121760],{},[3879,121761],{"alt":31,"src":121762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121764,121765],{},"打开终端输入如下",[26,121767,121769],{"className":119635,"code":121768,"language":119637,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,121770,121771,121778],{"__ignoreMap":31},[36,121772,121773,121775],{"class":38,"line":39},[36,121774,103616],{"class":62},[36,121776,121777],{"class":50}," ~\u002FDownloads\u002F\n",[36,121779,121780,121782,121784,121786],{"class":38,"line":54},[36,121781,26947],{"class":79},[36,121783,119656],{"class":50},[36,121785,26204],{"class":50},[36,121787,121788],{"class":50}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121790,121791],{},"打开Fcitx",[19,121793,121794,121797],{},[3879,121795],{"alt":31,"src":121796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3879,121798],{"alt":31,"src":121799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121801,121802],{},[3879,121803],{"alt":31,"src":121804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121806,121807],{},"添加搜狗输入法",[19,121809,121810],{},[3879,121811],{"alt":31,"src":121812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121814,121815],{},[3879,121816],{"alt":31,"src":121817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121819,121820],{},"将搜狗输入法设置为唯一输入法",[19,121822,121823],{},[3879,121824],{"alt":31,"src":121825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1752,121827,121829],{"id":121828},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[650,121831,121832],{},[653,121833,121834],{},"卸载旧输入法",[26,121836,121838],{"className":120862,"code":121837,"language":120864,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,121839,121840],{"__ignoreMap":31},[36,121841,121842,121844,121846,121848,121851,121853,121856],{"class":38,"line":39},[36,121843,26947],{"class":79},[36,121845,119656],{"class":50},[36,121847,119997],{"class":50},[36,121849,121850],{"class":50}," fcitx",[36,121852,3011],{"class":62},[36,121854,121855],{"class":50}," ibus",[36,121857,121587],{"class":62},[650,121859,121860],{"start":54},[653,121861,121862],{},"安装Fcitx5",[26,121864,121866],{"className":119635,"code":121865,"language":119637,"meta":31,"style":31},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[33,121867,121868,121873,121887,121891,121896,121905,121913],{"__ignoreMap":31},[36,121869,121870],{"class":38,"line":39},[36,121871,121872],{"class":2621},"# Ubuntu22.04及以上、Debian12及以上\n",[36,121874,121875,121877,121879,121881,121884],{"class":38,"line":54},[36,121876,26947],{"class":79},[36,121878,119656],{"class":50},[36,121880,26204],{"class":50},[36,121882,121883],{"class":50}," fcitx5",[36,121885,121886],{"class":50}," fcitx5-chinese-addons\n",[36,121888,121889],{"class":38,"line":66},[36,121890,70],{"emptyLinePlaceholder":69},[36,121892,121893],{"class":38,"line":73},[36,121894,121895],{"class":2621},"# Ubuntu20.04\n",[36,121897,121898,121900,121902],{"class":38,"line":86},[36,121899,26947],{"class":79},[36,121901,121183],{"class":50},[36,121903,121904],{"class":50}," ppa:zhsj\u002Ffcitx5\n",[36,121906,121907,121909,121911],{"class":38,"line":126},[36,121908,26947],{"class":79},[36,121910,119656],{"class":50},[36,121912,28612],{"class":50},[36,121914,121915,121917,121919,121921,121923],{"class":38,"line":131},[36,121916,26947],{"class":79},[36,121918,119656],{"class":50},[36,121920,26204],{"class":50},[36,121922,121883],{"class":50},[36,121924,121886],{"class":50},[650,121926,121927,121930],{"start":66},[653,121928,121929],{},"Reboot System",[653,121931,121932],{},"启动Fcitx5",[19,121934,121935],{},[3879,121936],{"alt":31,"src":121937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[650,121939,121940],{"start":86},[653,121941,121942],{},"修改一些设置",[19,121944,121945],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121947,121948],{},[3879,121949],{"alt":31,"src":121950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121952,121953],{},"添加快捷键以便于更好切换中英文",[19,121955,121956],{},[3879,121957],{"alt":31,"src":121958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[650,121960,121961],{"start":126},[653,121962,121963],{},"重启",[26,121965,121967],{"className":120862,"code":121966,"language":120864,"meta":31,"style":31},"sudo shutdown -r now\n",[33,121968,121969],{"__ignoreMap":31},[36,121970,121971,121973,121976,121979],{"class":38,"line":39},[36,121972,26947],{"class":79},[36,121974,121975],{"class":50}," shutdown",[36,121977,121978],{"class":62}," -r",[36,121980,121981],{"class":50}," now\n",[650,121983,121984],{"start":131},[653,121985,121986],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121988,121989],{},[2796,121990,121991],{"href":121991,"rel":121992},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26235],[650,121994,121995],{"start":225},[653,121996,121997],{},"再重启",[26,121999,122000],{"className":120862,"code":121966,"language":120864,"meta":31,"style":31},[33,122001,122002],{"__ignoreMap":31},[36,122003,122004,122006,122008,122010],{"class":38,"line":39},[36,122005,26947],{"class":79},[36,122007,121975],{"class":50},[36,122009,121978],{"class":62},[36,122011,121981],{"class":50},[14,122013,122015],{"id":122014},"_34-pip3源替换","3.4 pip3源替换",[19,122017,122018],{},"非Debian系发行版需要做。",[19,122020,122021],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122023,122024],{},"使用dnf的系统也可能不用做。",[26,122026,122028],{"className":119635,"code":122027,"language":119637,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,122029,122030,122035,122042,122047,122052],{"__ignoreMap":31},[36,122031,122032],{"class":38,"line":39},[36,122033,122034],{"class":2621},"# 检查是否已安装 pip\n",[36,122036,122037,122040],{"class":38,"line":54},[36,122038,122039],{"class":79},"pip3",[36,122041,28663],{"class":62},[36,122043,122044],{"class":38,"line":66},[36,122045,122046],{"class":2621},"# 如果未安装，先安装 pip3（见下方）\n",[36,122048,122049],{"class":38,"line":73},[36,122050,122051],{"class":2621},"# 配置 pip 使用清华源\n",[36,122053,122054,122056,122059,122062,122065],{"class":38,"line":86},[36,122055,122039],{"class":79},[36,122057,122058],{"class":50}," config",[36,122060,122061],{"class":50}," set",[36,122063,122064],{"class":50}," global.index-url",[36,122066,122067],{"class":50}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122069,122070],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122072,122073],{},[3879,122074],{"alt":31,"src":122075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,122077,122079],{"className":119635,"code":122078,"language":119637,"meta":31,"style":31},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[33,122080,122081,122086,122094,122105,122109,122114,122133,122137,122142,122154,122158,122163],{"__ignoreMap":31},[36,122082,122083],{"class":38,"line":39},[36,122084,122085],{"class":2621},"#安装pip3\n",[36,122087,122088,122090,122092],{"class":38,"line":54},[36,122089,26947],{"class":79},[36,122091,119656],{"class":50},[36,122093,28612],{"class":50},[36,122095,122096,122098,122100,122102],{"class":38,"line":66},[36,122097,26947],{"class":79},[36,122099,28446],{"class":50},[36,122101,26204],{"class":50},[36,122103,122104],{"class":50}," python3-pip\n",[36,122106,122107],{"class":38,"line":73},[36,122108,70],{"emptyLinePlaceholder":69},[36,122110,122111],{"class":38,"line":86},[36,122112,122113],{"class":2621},"#更新pip3\n",[36,122115,122116,122118,122120,122122,122124,122126,122129,122131],{"class":38,"line":126},[36,122117,103220],{"class":79},[36,122119,103223],{"class":62},[36,122121,103246],{"class":50},[36,122123,26204],{"class":50},[36,122125,28800],{"class":62},[36,122127,122128],{"class":50}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,122130,103251],{"class":62},[36,122132,103254],{"class":50},[36,122134,122135],{"class":38,"line":131},[36,122136,70],{"emptyLinePlaceholder":69},[36,122138,122139],{"class":38,"line":225},[36,122140,122141],{"class":2621},"#设置pip源为清华源\n",[36,122143,122144,122146,122148,122150,122152],{"class":38,"line":235},[36,122145,122039],{"class":79},[36,122147,122058],{"class":50},[36,122149,122061],{"class":50},[36,122151,122064],{"class":50},[36,122153,122067],{"class":50},[36,122155,122156],{"class":38,"line":377},[36,122157,70],{"emptyLinePlaceholder":69},[36,122159,122160],{"class":38,"line":617},[36,122161,122162],{"class":2621},"#测试\n",[36,122164,122165,122167,122169,122171,122173,122175],{"class":38,"line":643},[36,122166,103220],{"class":79},[36,122168,103223],{"class":62},[36,122170,103246],{"class":50},[36,122172,26204],{"class":50},[36,122174,103251],{"class":62},[36,122176,103254],{"class":50},[19,122178,122179],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122181,122182],{},[3879,122183],{"alt":31,"src":122184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122186,122188],{"id":122187},"_35-显卡驱动安装","3.5 显卡驱动安装",[1752,122190,122192],{"id":122191},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,122194,122196],{"className":120862,"code":122195,"language":120864,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,122197,122198,122203,122218,122223],{"__ignoreMap":31},[36,122199,122200],{"class":38,"line":39},[36,122201,122202],{"class":2621},"# 如果是使用apt安装的驱动\n",[36,122204,122205,122207,122209,122211,122213,122216],{"class":38,"line":54},[36,122206,26947],{"class":79},[36,122208,28446],{"class":50},[36,122210,28449],{"class":50},[36,122212,121497],{"class":62},[36,122214,122215],{"class":50}," nvidia",[36,122217,121587],{"class":62},[36,122219,122220],{"class":38,"line":66},[36,122221,122222],{"class":2621},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,122224,122225,122227],{"class":38,"line":73},[36,122226,26947],{"class":79},[36,122228,122229],{"class":50}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1752,122231,122233],{"id":122232},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24368,122235,122237],{"id":122236},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25280,122239,122241],{"id":122240},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,122243,122245],{"className":120862,"code":122244,"language":120864,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122246,122247,122252,122263,122268,122278,122283],{"__ignoreMap":31},[36,122248,122249],{"class":38,"line":39},[36,122250,122251],{"class":2621},"# 安装英伟达驱动\n",[36,122253,122254,122256,122258,122260],{"class":38,"line":54},[36,122255,26947],{"class":79},[36,122257,119656],{"class":50},[36,122259,26204],{"class":50},[36,122261,122262],{"class":50}," nvidia-driver-版本号\n",[36,122264,122265],{"class":38,"line":66},[36,122266,122267],{"class":2621},"# 重启 \n",[36,122269,122270,122272,122274,122276],{"class":38,"line":73},[36,122271,26947],{"class":79},[36,122273,121975],{"class":50},[36,122275,121978],{"class":62},[36,122277,121981],{"class":50},[36,122279,122280],{"class":38,"line":86},[36,122281,122282],{"class":2621},"# 检查驱动是否安装成功\n",[36,122284,122285],{"class":38,"line":126},[36,122286,122287],{"class":79},"nvidia-smi\n",[25280,122289,122291],{"id":122290},"_35212-debian","3.5.2.1.2 Debian",[26,122293,122295],{"className":120862,"code":122294,"language":120864,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122296,122297,122301,122315,122319,122329,122333],{"__ignoreMap":31},[36,122298,122299],{"class":38,"line":39},[36,122300,122251],{"class":2621},[36,122302,122303,122305,122307,122309,122312],{"class":38,"line":54},[36,122304,26947],{"class":79},[36,122306,119656],{"class":50},[36,122308,26204],{"class":50},[36,122310,122311],{"class":50}," nvidia-driver",[36,122313,122314],{"class":50}," nvidia-settings\n",[36,122316,122317],{"class":38,"line":66},[36,122318,122267],{"class":2621},[36,122320,122321,122323,122325,122327],{"class":38,"line":73},[36,122322,26947],{"class":79},[36,122324,121975],{"class":50},[36,122326,121978],{"class":62},[36,122328,121981],{"class":50},[36,122330,122331],{"class":38,"line":86},[36,122332,122282],{"class":2621},[36,122334,122335],{"class":38,"line":126},[36,122336,122287],{"class":79},[24368,122338,122340],{"id":122339},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122342,122343,122344,122347],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[667,122345,122346],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122349,122350,122351],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25923,122352,122353],{},[667,122354,122355],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,122357,122359],{"className":120862,"code":122358,"language":120864,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,122360,122361,122366,122376,122381,122394,122399],{"__ignoreMap":31},[36,122362,122363],{"class":38,"line":39},[36,122364,122365],{"class":2621},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,122367,122368,122370,122373],{"class":38,"line":54},[36,122369,26947],{"class":79},[36,122371,122372],{"class":50}," telinit",[36,122374,122375],{"class":62}," 3\n",[36,122377,122378],{"class":38,"line":66},[36,122379,122380],{"class":2621},"# ubuntu 使用下方命令\n",[36,122382,122383,122385,122388,122391],{"class":38,"line":73},[36,122384,26947],{"class":79},[36,122386,122387],{"class":50}," service",[36,122389,122390],{"class":50}," lightdm",[36,122392,122393],{"class":50}," stop\n",[36,122395,122396],{"class":38,"line":86},[36,122397,122398],{"class":2621},"# Fedora 使用下方命令\n",[36,122400,122401,122403,122405,122408],{"class":38,"line":126},[36,122402,26947],{"class":79},[36,122404,28883],{"class":50},[36,122406,122407],{"class":50}," isolate",[36,122409,122410],{"class":50}," multi-user.target\n",[19,122412,122413],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,122415,122417],{"className":120862,"code":122416,"language":120864,"meta":31,"style":31},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[33,122418,122419,122424,122435,122440,122447,122452,122464,122469,122476,122481],{"__ignoreMap":31},[36,122420,122421],{"class":38,"line":39},[36,122422,122423],{"class":2621},"# 编译环境+准备工作\n",[36,122425,122426,122428,122430,122432],{"class":38,"line":54},[36,122427,26947],{"class":79},[36,122429,119656],{"class":50},[36,122431,26204],{"class":50},[36,122433,122434],{"class":50}," build-essential\n",[36,122436,122437],{"class":38,"line":66},[36,122438,122439],{"class":2621},"# 进入到.run目录中\n",[36,122441,122442,122444],{"class":38,"line":73},[36,122443,103616],{"class":62},[36,122445,122446],{"class":50}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,122448,122449],{"class":38,"line":86},[36,122450,122451],{"class":2621},"# 给驱动文件增加可执行权限：\n",[36,122453,122454,122456,122458,122461],{"class":38,"line":126},[36,122455,26947],{"class":79},[36,122457,26950],{"class":50},[36,122459,122460],{"class":50}," a+x",[36,122462,122463],{"class":50}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,122465,122466],{"class":38,"line":131},[36,122467,122468],{"class":2621},"# 然后执行安装：\n",[36,122470,122471,122473],{"class":38,"line":225},[36,122472,26947],{"class":79},[36,122474,122475],{"class":50}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,122477,122478],{"class":38,"line":235},[36,122479,122480],{"class":2621},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,122482,122483,122485,122488],{"class":38,"line":377},[36,122484,26947],{"class":79},[36,122486,122487],{"class":50}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,122489,122490],{"class":62},"  --no-opengl-files\n",[19,122492,122493],{},"安装完毕重启即可",[26,122495,122497],{"className":120862,"code":122496,"language":120864,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,122498,122499,122503,122509,122513],{"__ignoreMap":31},[36,122500,122501],{"class":38,"line":39},[36,122502,122267],{"class":2621},[36,122504,122505,122507],{"class":38,"line":54},[36,122506,26947],{"class":79},[36,122508,29017],{"class":50},[36,122510,122511],{"class":38,"line":66},[36,122512,122282],{"class":2621},[36,122514,122515],{"class":38,"line":73},[36,122516,122287],{"class":79},[1752,122518,122520],{"id":122519},"_353-安装cuda","3.5.3 安装CUDA",[19,122522,122523],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122525,122526],{},[3879,122527],{"alt":31,"src":122528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[650,122530,122531],{},[653,122532,122533],{},"先查看显卡驱动所支持的最高CUDA版本",[26,122535,122536],{"className":120862,"code":122287,"language":120864,"meta":31,"style":31},[33,122537,122538],{"__ignoreMap":31},[36,122539,122540],{"class":38,"line":39},[36,122541,122287],{"class":79},[19,122543,122544],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122546,122547],{},[3879,122548],{"alt":31,"src":122549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[650,122551,122552],{"start":54},[653,122553,122554],{},"下载CUDA并安装CUDA",[19,122556,120641,122557],{},[2796,122558,120644],{"href":120644,"rel":122559},[26235],[19,122561,122562],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122564,122565],{},[3879,122566],{"alt":31,"src":122567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122569,122570,122571,122576],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2796,122572,122575],{"href":122573,"rel":122574},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26235],"Vinci机器人队单片机教程","）",[19,122578,122579],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122581,122582],{},[3879,122583],{"alt":31,"src":122584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122586,122587],{},"将最下方框框里的命令敲入终端",[26,122589,122591],{"className":120862,"code":122590,"language":120864,"meta":31,"style":31},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,122592,122593,122598,122607,122612,122619,122624,122632,122637,122648,122653],{"__ignoreMap":31},[36,122594,122595],{"class":38,"line":39},[36,122596,122597],{"class":2621},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,122599,122600,122602,122604],{"class":38,"line":54},[36,122601,103606],{"class":79},[36,122603,31585],{"class":62},[36,122605,122606],{"class":50}," .\u002Fttt\n",[36,122608,122609],{"class":38,"line":66},[36,122610,122611],{"class":2621},"# 进入ttt文件夹\n",[36,122613,122614,122616],{"class":38,"line":73},[36,122615,103616],{"class":62},[36,122617,122618],{"class":50}," ttt\n",[36,122620,122621],{"class":38,"line":86},[36,122622,122623],{"class":2621},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,122625,122626,122629],{"class":38,"line":126},[36,122627,122628],{"class":79},"wget",[36,122630,122631],{"class":50}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,122633,122634],{"class":38,"line":131},[36,122635,122636],{"class":2621},"# 给予权限\n",[36,122638,122639,122641,122643,122645],{"class":38,"line":225},[36,122640,26947],{"class":79},[36,122642,26950],{"class":50},[36,122644,122460],{"class":50},[36,122646,122647],{"class":50}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,122649,122650],{"class":38,"line":235},[36,122651,122652],{"class":2621},"# 运行脚本\n",[36,122654,122655,122657],{"class":38,"line":377},[36,122656,26947],{"class":79},[36,122658,122647],{"class":50},[19,122660,122661],{},[3879,122662],{"alt":31,"src":122663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122665,122666],{},"正在安装中：",[19,122668,122669],{},[3879,122670],{"alt":31,"src":122671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122673,122674],{},"输入accept接受即可",[19,122676,122677],{},[3879,122678],{"alt":31,"src":122679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122681,122682],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122684,122685],{},[3879,122686],{"alt":31,"src":122687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122689,122690],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122692,122693],{},[3879,122694],{"alt":31,"src":122695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[650,122697,122698],{"start":66},[653,122699,122700],{},"配置环境",[19,122702,122703],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,122705,122707],{"className":120862,"code":122706,"language":120864,"meta":31,"style":31},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[33,122708,122709,122725,122740],{"__ignoreMap":31},[36,122710,122711,122714,122717,122720,122723],{"class":38,"line":39},[36,122712,122713],{"class":79},"Please",[36,122715,122716],{"class":50}," make",[36,122718,122719],{"class":50}," sure",[36,122721,122722],{"class":50}," that",[36,122724,5059],{"class":42},[36,122726,122727,122729,122732,122735,122738],{"class":38,"line":54},[36,122728,54619],{"class":79},[36,122730,122731],{"class":50},"   PATH",[36,122733,122734],{"class":50}," includes",[36,122736,122737],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,122739,5059],{"class":42},[36,122741,122742,122744,122747,122749,122752,122755,122757,122760,122763,122766,122769,122771,122774,122776],{"class":38,"line":66},[36,122743,54619],{"class":79},[36,122745,122746],{"class":50},"   LD_LIBRARY_PATH",[36,122748,122734],{"class":50},[36,122750,122751],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,122753,122754],{"class":50}," or,",[36,122756,1872],{"class":50},[36,122758,122759],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,122761,122762],{"class":50}," to",[36,122764,122765],{"class":50}," \u002Fetc\u002Fld.so.conf",[36,122767,122768],{"class":50}," and",[36,122770,29600],{"class":50},[36,122772,122773],{"class":50}," ldconfig",[36,122775,66951],{"class":50},[36,122777,122778],{"class":50}," root\n",[19,122780,122781],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,122783,122785],{"className":120862,"code":122784,"language":120864,"meta":31,"style":31},"which nvcc\n",[33,122786,122787],{"__ignoreMap":31},[36,122788,122789,122792],{"class":38,"line":39},[36,122790,122791],{"class":62},"which",[36,122793,122794],{"class":50}," nvcc\n",[19,122796,122797],{},[3879,122798],{"alt":31,"src":122799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122801,122802],{},"所以我进行以下操作：",[26,122804,122806],{"className":120862,"code":122805,"language":120864,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,122807,122808],{"__ignoreMap":31},[36,122809,122810,122812,122814],{"class":38,"line":39},[36,122811,26947],{"class":79},[36,122813,120922],{"class":50},[36,122815,122816],{"class":50}," ~\u002F.bashrc\n",[19,122818,122819],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,122821,122823],{"className":120862,"code":122822,"language":120864,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,122824,122825,122837],{"__ignoreMap":31},[36,122826,122827,122829,122832,122834],{"class":38,"line":39},[36,122828,27413],{"class":46},[36,122830,122831],{"class":42}," PATH",[36,122833,47],{"class":46},[36,122835,122836],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,122838,122839,122841,122844,122846],{"class":38,"line":54},[36,122840,27413],{"class":46},[36,122842,122843],{"class":42}," LD_LIBRARY_PATH",[36,122845,47],{"class":46},[36,122847,122848],{"class":42},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122850,122851],{},[3879,122852],{"alt":31,"src":122853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,122855,122857],{"className":120862,"code":122856,"language":120864,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,122858,122859,122864,122870,122875],{"__ignoreMap":31},[36,122860,122861],{"class":38,"line":39},[36,122862,122863],{"class":2621},"# 刷新当前终端的环境变量\n",[36,122865,122866,122868],{"class":38,"line":54},[36,122867,103234],{"class":62},[36,122869,122816],{"class":50},[36,122871,122872],{"class":38,"line":66},[36,122873,122874],{"class":2621},"# 验证CUDA是否安装成功\n",[36,122876,122877,122880],{"class":38,"line":73},[36,122878,122879],{"class":79},"nvcc",[36,122881,122882],{"class":62}," -V\n",[19,122884,122885],{},"出现下图这种则安装成功。",[19,122887,122888],{},[3879,122889],{"alt":31,"src":122890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1752,122892,122894],{"id":122893},"_354-安装cudnn","3.5.4 安装cuDNN",[650,122896,122897],{},[653,122898,122899],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122901,122902,122903,122908],{},"前往 NVIDIA cuDNN 下载页面：",[2796,122904,122907],{"href":122905,"rel":122906},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26235],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122910,122911],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122913,122914],{},[3879,122915],{"alt":31,"src":122916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122918,122919],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122921,122922],{},[3879,122923],{"alt":31,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122926,122927],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122929,122930],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122932,122933],{},[667,122934,122935],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122937,122938],{},"下载好的：",[19,122940,122941],{},[3879,122942],{"alt":31,"src":122943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[650,122945,122946],{"start":54},[653,122947,122948],{},"安装cuDNN",[19,122950,122951],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122953,122954],{},[3879,122955],{"alt":31,"src":122956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122958,122959],{},"解压文件，并复制到对应位置完成安装",[26,122961,122963],{"className":120862,"code":122962,"language":120864,"meta":31,"style":31},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[33,122964,122965,122970,122981,122986,122993,122998,123014,123028,123033,123044,123053,123057,123073],{"__ignoreMap":31},[36,122966,122967],{"class":38,"line":39},[36,122968,122969],{"class":2621},"# 解压cuDNN文件\n",[36,122971,122972,122975,122978],{"class":38,"line":54},[36,122973,122974],{"class":79},"tar",[36,122976,122977],{"class":62}," -xvf",[36,122979,122980],{"class":50}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,122982,122983],{"class":38,"line":66},[36,122984,122985],{"class":2621},"# cd进文件夹\n",[36,122987,122988,122990],{"class":38,"line":73},[36,122989,103616],{"class":62},[36,122991,122992],{"class":50}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,122994,122995],{"class":38,"line":86},[36,122996,122997],{"class":2621},"# 复制cuDNN文件到CUDA目录\n",[36,122999,123000,123002,123004,123007,123009,123012],{"class":38,"line":126},[36,123001,26947],{"class":79},[36,123003,30231],{"class":50},[36,123005,123006],{"class":50}," include\u002Fcudnn",[36,123008,3011],{"class":62},[36,123010,123011],{"class":50},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,123013,5059],{"class":42},[36,123015,123016,123018,123020,123023,123025],{"class":38,"line":131},[36,123017,26947],{"class":79},[36,123019,30231],{"class":50},[36,123021,123022],{"class":50}," lib\u002Flibcudnn",[36,123024,3011],{"class":62},[36,123026,123027],{"class":50},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,123029,123030],{"class":38,"line":225},[36,123031,123032],{"class":2621},"# 对比一下有没有缺文件\n",[36,123034,123035,123037,123040,123042],{"class":38,"line":235},[36,123036,29131],{"class":79},[36,123038,123039],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,123041,3011],{"class":62},[36,123043,5059],{"class":42},[36,123045,123046,123048,123051],{"class":38,"line":377},[36,123047,29131],{"class":79},[36,123049,123050],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,123052,121587],{"class":62},[36,123054,123055],{"class":38,"line":617},[36,123056,122636],{"class":2621},[36,123058,123059,123061,123063,123066,123068,123070],{"class":38,"line":643},[36,123060,26947],{"class":79},[36,123062,26950],{"class":50},[36,123064,123065],{"class":50}," a+r",[36,123067,123039],{"class":50},[36,123069,3011],{"class":62},[36,123071,123072],{"class":42},"   \n",[36,123074,123075,123077,123079,123081,123083],{"class":38,"line":921},[36,123076,26947],{"class":79},[36,123078,26950],{"class":50},[36,123080,123065],{"class":50},[36,123082,123050],{"class":50},[36,123084,121587],{"class":62},[650,123086,123087],{"start":66},[653,123088,123089],{},"检查是否安装成功",[26,123091,123093],{"className":120862,"code":123092,"language":120864,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,123094,123095,123100],{"__ignoreMap":31},[36,123096,123097],{"class":38,"line":39},[36,123098,123099],{"class":2621},"# 检查cuDNN版本命令\n",[36,123101,123102,123105,123108,123110,123112,123115,123118],{"class":38,"line":54},[36,123103,123104],{"class":79},"cat",[36,123106,123107],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,123109,27480],{"class":46},[36,123111,32605],{"class":79},[36,123113,123114],{"class":50}," CUDNN_MAJOR",[36,123116,123117],{"class":62}," -A",[36,123119,50072],{"class":62},[19,123121,123122],{},"出现下图这样的就是安装成功了",[19,123124,123125],{},[3879,123126],{"alt":31,"src":123127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[650,123129,123130],{"start":73},[653,123131,123132],{},"软链接(一般不需要)",[26,123134,123136],{"className":120862,"code":123135,"language":120864,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,123137,123138,123143],{"__ignoreMap":31},[36,123139,123140],{"class":38,"line":39},[36,123141,123142],{"class":2621},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,123144,123145,123147],{"class":38,"line":54},[36,123146,26947],{"class":79},[36,123148,123149],{"class":50}," ldconfig\n",[19,123151,123152],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,123154,123159],{"className":123155,"code":123156,"language":123157,"meta":123158,"style":31},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[33,123160,123161,123166,123171,123176,123181,123186,123191],{"__ignoreMap":31},[36,123162,123163],{"class":38,"line":39},[36,123164,123165],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,123167,123168],{"class":38,"line":54},[36,123169,123170],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,123172,123173],{"class":38,"line":66},[36,123174,123175],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,123177,123178],{"class":38,"line":73},[36,123179,123180],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,123182,123183],{"class":38,"line":86},[36,123184,123185],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,123187,123188],{"class":38,"line":126},[36,123189,123190],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,123192,123193],{"class":38,"line":131},[36,123194,123195],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123197,123198],{},"运行下方的命令",[26,123200,123202],{"className":120862,"code":123201,"language":120864,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,123203,123204,123209,123216,123221],{"__ignoreMap":31},[36,123205,123206],{"class":38,"line":39},[36,123207,123208],{"class":2621},"# cd进入CUDA路径\n",[36,123210,123211,123213],{"class":38,"line":54},[36,123212,103616],{"class":62},[36,123214,123215],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,123217,123218],{"class":38,"line":66},[36,123219,123220],{"class":2621}," # 查看本路径下的需要软链接的文件名\n",[36,123222,123223],{"class":38,"line":73},[36,123224,123225],{"class":79}," ls\n",[19,123227,123228],{},[3879,123229],{"alt":31,"src":123230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123232,123233,123234,20781,123237,20781,123240,123243],{},"如上图，我需要将",[33,123235,123236],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,123238,123239],{},"libcudnn_xxx_xxxxx.so.8",[33,123241,123242],{},"libcudnn_xxx_xxxxx.so","软链接",[26,123245,123247],{"className":120862,"code":123246,"language":120864,"meta":31,"style":31},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[33,123248,123249,123254,123270,123284,123298,123312,123326,123340,123354,123359,123365,123370],{"__ignoreMap":31},[36,123250,123251],{"class":38,"line":39},[36,123252,123253],{"class":2621},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,123255,123256,123258,123261,123264,123267],{"class":38,"line":54},[36,123257,26947],{"class":79},[36,123259,123260],{"class":50}," ln",[36,123262,123263],{"class":62}," -sf",[36,123265,123266],{"class":50}," libcudnn_cnn_train.so.8.9.7",[36,123268,123269],{"class":50}," libcudnn_cnn_train.so.8\n",[36,123271,123272,123274,123276,123278,123281],{"class":38,"line":66},[36,123273,26947],{"class":79},[36,123275,123260],{"class":50},[36,123277,123263],{"class":62},[36,123279,123280],{"class":50}," libcudnn_adv_infer.so.8.9.7",[36,123282,123283],{"class":50}," libcudnn_adv_infer.so.8\n",[36,123285,123286,123288,123290,123292,123295],{"class":38,"line":73},[36,123287,26947],{"class":79},[36,123289,123260],{"class":50},[36,123291,123263],{"class":62},[36,123293,123294],{"class":50}," libcudnn_adv_train.so.8.9.7",[36,123296,123297],{"class":50}," libcudnn_adv_train.so.8\n",[36,123299,123300,123302,123304,123306,123309],{"class":38,"line":86},[36,123301,26947],{"class":79},[36,123303,123260],{"class":50},[36,123305,123263],{"class":62},[36,123307,123308],{"class":50}," libcudnn_cnn_infer.so.8.9.7",[36,123310,123311],{"class":50}," libcudnn_cnn_infer.so.8\n",[36,123313,123314,123316,123318,123320,123323],{"class":38,"line":126},[36,123315,26947],{"class":79},[36,123317,123260],{"class":50},[36,123319,123263],{"class":62},[36,123321,123322],{"class":50}," libcudnn.so.8.9.7",[36,123324,123325],{"class":50}," libcudnn.so.8\n",[36,123327,123328,123330,123332,123334,123337],{"class":38,"line":131},[36,123329,26947],{"class":79},[36,123331,123260],{"class":50},[36,123333,123263],{"class":62},[36,123335,123336],{"class":50}," libcudnn_ops_infer.so.8.9.7",[36,123338,123339],{"class":50}," libcudnn_ops_infer.so.8\n",[36,123341,123342,123344,123346,123348,123351],{"class":38,"line":225},[36,123343,26947],{"class":79},[36,123345,123260],{"class":50},[36,123347,123263],{"class":62},[36,123349,123350],{"class":50}," libcudnn_ops_train.so.8.9.7",[36,123352,123353],{"class":50}," libcudnn_ops_train.so.8\n",[36,123355,123356],{"class":38,"line":235},[36,123357,123358],{"class":2621},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,123360,123361,123363],{"class":38,"line":377},[36,123362,26947],{"class":79},[36,123364,123149],{"class":50},[36,123366,123367],{"class":38,"line":617},[36,123368,123369],{"class":2621},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,123371,123372,123374,123377,123380,123382,123385],{"class":38,"line":643},[36,123373,29131],{"class":79},[36,123375,123376],{"class":62}," -l",[36,123378,123379],{"class":50}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,123381,3011],{"class":62},[36,123383,123384],{"class":50},".so",[36,123386,121587],{"class":62},[1752,123388,123390],{"id":123389},"_355-常见问题","3.5.5 常见问题",[650,123392,123393],{},[653,123394,123395],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,123397,123399],{"className":120862,"code":123398,"language":120864,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,123400,123401],{"__ignoreMap":31},[36,123402,123403,123405,123407],{"class":38,"line":39},[36,123404,26947],{"class":79},[36,123406,120922],{"class":50},[36,123408,123409],{"class":50}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123411,123412],{},"blacklist-nouveau.conf文件内容如下：",[26,123414,123416],{"className":120862,"code":123415,"language":120864,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,123417,123418,123426,123433,123445,123455],{"__ignoreMap":31},[36,123419,123420,123423],{"class":38,"line":39},[36,123421,123422],{"class":79},"blacklist",[36,123424,123425],{"class":50}," nouveau\n",[36,123427,123428,123430],{"class":38,"line":54},[36,123429,123422],{"class":79},[36,123431,123432],{"class":50}," lbm-nouveau\n",[36,123434,123435,123437,123440,123443],{"class":38,"line":66},[36,123436,118269],{"class":79},[36,123438,123439],{"class":50}," nouveau",[36,123441,123442],{"class":50}," modeset=",[36,123444,5470],{"class":62},[36,123446,123447,123450,123452],{"class":38,"line":73},[36,123448,123449],{"class":62},"alias",[36,123451,123439],{"class":50},[36,123453,123454],{"class":50}," off\n",[36,123456,123457,123459,123462],{"class":38,"line":86},[36,123458,123449],{"class":62},[36,123460,123461],{"class":50}," lbm-nouveau",[36,123463,123454],{"class":50},[19,123465,123466],{},"接着运行下方命令",[26,123468,123470],{"className":120862,"code":123469,"language":120864,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,123471,123472,123482,123487],{"__ignoreMap":31},[36,123473,123474,123476,123479],{"class":38,"line":39},[36,123475,26947],{"class":79},[36,123477,123478],{"class":50}," update-initramfs",[36,123480,123481],{"class":62}," -u\n",[36,123483,123484],{"class":38,"line":54},[36,123485,123486],{"class":79},"或者\n",[36,123488,123489,123491,123494],{"class":38,"line":66},[36,123490,26947],{"class":79},[36,123492,123493],{"class":50}," dracut",[36,123495,123496],{"class":62}," --force\n",[19,123498,123499],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,123501,123503],{"className":120862,"code":123502,"language":120864,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,123504,123505],{"__ignoreMap":31},[36,123506,123507,123510,123512,123514],{"class":38,"line":39},[36,123508,123509],{"class":79},"lsmod",[36,123511,27480],{"class":46},[36,123513,32605],{"class":79},[36,123515,123425],{"class":50},[650,123517,123518],{"start":54},[653,123519,123520],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,123522,123524],{"className":120862,"code":123523,"language":120864,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,123525,123526],{"__ignoreMap":31},[36,123527,123528,123530,123532],{"class":38,"line":39},[36,123529,26947],{"class":79},[36,123531,120922],{"class":50},[36,123533,123534],{"class":50}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123536,123537],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,123539,123541],{"className":120862,"code":123540,"language":120864,"meta":31,"style":31},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[33,123542,123543,123551,123559,123567,123574,123582,123592,123600],{"__ignoreMap":31},[36,123544,123545,123548],{"class":38,"line":39},[36,123546,123547],{"class":79},"Section",[36,123549,123550],{"class":50}," \"OutputClass\"\n",[36,123552,123553,123556],{"class":38,"line":54},[36,123554,123555],{"class":79},"   Identifier",[36,123557,123558],{"class":50}," \"nvidia\"\n",[36,123560,123561,123564],{"class":38,"line":66},[36,123562,123563],{"class":79},"   MatchDriver",[36,123565,123566],{"class":50}," \"nvidia-drm\"\n",[36,123568,123569,123572],{"class":38,"line":73},[36,123570,123571],{"class":79},"   Driver",[36,123573,123558],{"class":50},[36,123575,123576,123579],{"class":38,"line":86},[36,123577,123578],{"class":79},"   Option",[36,123580,123581],{"class":50}," \"AllowEmptyInitialConfiguration\"\n",[36,123583,123584,123586,123589],{"class":38,"line":126},[36,123585,123578],{"class":79},[36,123587,123588],{"class":50}," \"PrimaryGPU\"",[36,123590,123591],{"class":50}," \"yes\"\n",[36,123593,123594,123597],{"class":38,"line":131},[36,123595,123596],{"class":79},"   ModulePath",[36,123598,123599],{"class":50}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,123601,123602],{"class":38,"line":225},[36,123603,123604],{"class":79},"EndSection\n",[650,123606,123607],{"start":66},[653,123608,123609],{},"安装N卡驱动提示错误",[26,123611,123613],{"className":123155,"code":123612,"language":123157,"meta":123158,"style":31},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[33,123614,123615],{"__ignoreMap":31},[36,123616,123617],{"class":38,"line":39},[36,123618,123612],{},[650,123620,123621],{},[653,123622,123623],{},"检查当前运行的内核版本：",[19,123625,123626],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,123628,123630],{"className":119635,"code":123629,"language":119637,"meta":31,"style":31},"uname -r\n",[33,123631,123632],{"__ignoreMap":31},[36,123633,123634,123636],{"class":38,"line":39},[36,123635,72550],{"class":79},[36,123637,123638],{"class":62}," -r\n",[650,123640,123641],{"start":54},[653,123642,123643],{},"安装内核开发文件：",[19,123645,123646,123647,123650],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,123648,123649],{},"kernel-devel"," 包。运行以下命令来安装：",[26,123652,123654],{"className":119635,"code":123653,"language":119637,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,123655,123656],{"__ignoreMap":31},[36,123657,123658,123660,123662,123664,123667,123669,123671,123673],{"class":38,"line":39},[36,123659,26947],{"class":79},[36,123661,28685],{"class":50},[36,123663,26204],{"class":50},[36,123665,123666],{"class":50}," kernel-devel-",[36,123668,27470],{"class":42},[36,123670,72550],{"class":79},[36,123672,121978],{"class":62},[36,123674,123],{"class":42},[19,123676,123677],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[650,123679,123680],{"start":66},[653,123681,123682],{},"安装内核源代码（如果需要）：",[19,123684,123685],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,123687,123689],{"className":119635,"code":123688,"language":119637,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,123690,123691],{"__ignoreMap":31},[36,123692,123693,123695,123697,123699,123702],{"class":38,"line":39},[36,123694,26947],{"class":79},[36,123696,28685],{"class":50},[36,123698,26204],{"class":50},[36,123700,123701],{"class":50}," kernel-headers",[36,123703,123704],{"class":50}," kernel-source\n",[650,123706,123707],{"start":73},[653,123708,123709],{},"检查安装：",[19,123711,123712,123713,123716],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,123714,123715],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,123718,123720],{"className":119635,"code":123719,"language":119637,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,123721,123722],{"__ignoreMap":31},[36,123723,123724,123726],{"class":38,"line":39},[36,123725,29131],{"class":79},[36,123727,123728],{"class":50}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123730,123731,123732,123735],{},"如果仍然遇到问题，可以通过 ",[33,123733,123734],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2467,123737,123738],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":123740},[123741,123745,123755,123759,123760],{"id":120838,"depth":54,"text":120839,"children":123742},[123743,123744],{"id":120848,"depth":66,"text":120849},{"id":120858,"depth":66,"text":120859},{"id":121058,"depth":54,"text":121059,"children":123746},[123747,123748,123749,123750,123751,123752,123753,123754],{"id":121062,"depth":66,"text":121063},{"id":121132,"depth":66,"text":121133},{"id":121221,"depth":66,"text":121222},{"id":121466,"depth":66,"text":121467},{"id":121536,"depth":66,"text":121537},{"id":121603,"depth":66,"text":121604},{"id":121638,"depth":66,"text":121639},{"id":121693,"depth":66,"text":121694},{"id":121744,"depth":54,"text":121745,"children":123756},[123757,123758],{"id":121748,"depth":66,"text":121749},{"id":121828,"depth":66,"text":121829},{"id":122014,"depth":54,"text":122015},{"id":122187,"depth":54,"text":122188,"children":123761},[123762,123763,123764,123765,123766],{"id":122191,"depth":66,"text":122192},{"id":122232,"depth":66,"text":122233},{"id":122519,"depth":66,"text":122520},{"id":122893,"depth":66,"text":122894},{"id":123389,"depth":66,"text":123390},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120830,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123773,"title":123774,"body":123775,"description":2493,"extension":2494,"meta":124115,"navigation":69,"path":124116,"seo":124117,"stem":124118,"__hash__":124119},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123776,"toc":124113},[123777,123780,123785,123788,124034,124039,124042,124078,124081,124110],[10,123778,123774],{"id":123779},"_4-命令教程长期积累",[650,123781,123782],{},[653,123783,123784],{},"大多数命令",[19,123786,123787],{},"常用 Linux 命令速查：",[26,123789,123791],{"className":119635,"code":123790,"language":119637,"meta":31,"style":31},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[33,123792,123793,123798,123805,123812,123820,123827,123834,123842,123850,123857,123864,123872,123876,123881,123888,123896,123903,123907,123912,123919,123927,123935,123943,123951,123955,123960,123968,123975,123982,123990,123998,124002,124007,124016,124025],{"__ignoreMap":31},[36,123794,123795],{"class":38,"line":39},[36,123796,123797],{"class":2621},"# 文件与目录\n",[36,123799,123800,123802],{"class":38,"line":54},[36,123801,29131],{"class":79},[36,123803,123804],{"class":2621},"        # 列出目录内容\n",[36,123806,123807,123809],{"class":38,"line":66},[36,123808,103616],{"class":62},[36,123810,123811],{"class":2621},"        # 切换目录\n",[36,123813,123814,123817],{"class":38,"line":73},[36,123815,123816],{"class":62},"pwd",[36,123818,123819],{"class":2621},"       # 显示当前路径\n",[36,123821,123822,123824],{"class":38,"line":86},[36,123823,103606],{"class":79},[36,123825,123826],{"class":2621},"     # 创建目录\n",[36,123828,123829,123831],{"class":38,"line":126},[36,123830,27692],{"class":79},[36,123832,123833],{"class":2621},"        # 删除文件或目录\n",[36,123835,123836,123839],{"class":38,"line":131},[36,123837,123838],{"class":79},"cp",[36,123840,123841],{"class":2621},"        # 复制文件或目录\n",[36,123843,123844,123847],{"class":38,"line":225},[36,123845,123846],{"class":79},"mv",[36,123848,123849],{"class":2621},"        # 移动\u002F重命名文件或目录\n",[36,123851,123852,123854],{"class":38,"line":235},[36,123853,103623],{"class":79},[36,123855,123856],{"class":2621},"     # 创建空文件\n",[36,123858,123859,123861],{"class":38,"line":377},[36,123860,123104],{"class":79},[36,123862,123863],{"class":2621},"       # 查看文件内容\n",[36,123865,123866,123869],{"class":38,"line":617},[36,123867,123868],{"class":79},"head\u002Ftail",[36,123870,123871],{"class":2621}," # 查看文件头部\u002F尾部\n",[36,123873,123874],{"class":38,"line":643},[36,123875,70],{"emptyLinePlaceholder":69},[36,123877,123878],{"class":38,"line":921},[36,123879,123880],{"class":2621},"# 权限管理\n",[36,123882,123883,123885],{"class":38,"line":934},[36,123884,26982],{"class":79},[36,123886,123887],{"class":2621},"     # 修改文件权限\n",[36,123889,123890,123893],{"class":38,"line":939},[36,123891,123892],{"class":79},"chown",[36,123894,123895],{"class":2621},"     # 修改文件所有者\n",[36,123897,123898,123900],{"class":38,"line":949},[36,123899,26947],{"class":79},[36,123901,123902],{"class":2621},"      # 以管理员身份执行\n",[36,123904,123905],{"class":38,"line":962},[36,123906,70],{"emptyLinePlaceholder":69},[36,123908,123909],{"class":38,"line":974},[36,123910,123911],{"class":2621},"# 系统信息\n",[36,123913,123914,123916],{"class":38,"line":979},[36,123915,72550],{"class":79},[36,123917,123918],{"class":2621},"     # 系统信息\n",[36,123920,123921,123924],{"class":38,"line":994},[36,123922,123923],{"class":79},"df",[36,123925,123926],{"class":2621},"        # 磁盘使用情况\n",[36,123928,123929,123932],{"class":38,"line":1006},[36,123930,123931],{"class":79},"free",[36,123933,123934],{"class":2621},"      # 内存使用情况\n",[36,123936,123937,123940],{"class":38,"line":1011},[36,123938,123939],{"class":79},"top\u002Fhtop",[36,123941,123942],{"class":2621},"  # 进程监控\n",[36,123944,123945,123948],{"class":38,"line":1023},[36,123946,123947],{"class":79},"ps",[36,123949,123950],{"class":2621},"        # 查看进程\n",[36,123952,123953],{"class":38,"line":1028},[36,123954,70],{"emptyLinePlaceholder":69},[36,123956,123957],{"class":38,"line":1033},[36,123958,123959],{"class":2621},"# 网络\n",[36,123961,123962,123965],{"class":38,"line":1053},[36,123963,123964],{"class":79},"ping",[36,123966,123967],{"class":2621},"      # 测试网络连通性\n",[36,123969,123970,123972],{"class":38,"line":1064},[36,123971,29219],{"class":79},[36,123973,123974],{"class":2621},"      # 发送 HTTP 请求\n",[36,123976,123977,123979],{"class":38,"line":1075},[36,123978,122628],{"class":79},[36,123980,123981],{"class":2621},"      # 下载文件\n",[36,123983,123984,123987],{"class":38,"line":2291},[36,123985,123986],{"class":79},"ssh",[36,123988,123989],{"class":2621},"       # 远程登录\n",[36,123991,123992,123995],{"class":38,"line":2329},[36,123993,123994],{"class":79},"scp",[36,123996,123997],{"class":2621},"       # 远程文件传输\n",[36,123999,124000],{"class":38,"line":2334},[36,124001,70],{"emptyLinePlaceholder":69},[36,124003,124004],{"class":38,"line":2339},[36,124005,124006],{"class":2621},"# 包管理（Debian\u002FUbuntu）\n",[36,124008,124009,124011,124013],{"class":38,"line":2365},[36,124010,119707],{"class":79},[36,124012,119686],{"class":50},[36,124014,124015],{"class":2621},"   # 更新软件源\n",[36,124017,124018,124020,124022],{"class":38,"line":2373},[36,124019,119707],{"class":79},[36,124021,26204],{"class":50},[36,124023,124024],{"class":2621},"  # 安装软件包\n",[36,124026,124027,124029,124031],{"class":38,"line":5001},[36,124028,119707],{"class":79},[36,124030,28449],{"class":50},[36,124032,124033],{"class":2621},"   # 卸载软件包\n",[650,124035,124036],{"start":54},[653,124037,124038],{},"KDE Dolphin 以root打开",[19,124040,124041],{},"kde5",[26,124043,124045],{"className":119635,"code":124044,"language":119637,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,124046,124047],{"__ignoreMap":31},[36,124048,124049,124052,124055,124058,124060,124062,124065,124068,124070,124073,124075],{"class":38,"line":39},[36,124050,124051],{"class":79},"pkexec",[36,124053,124054],{"class":50}," env",[36,124056,124057],{"class":50}," DISPLAY=",[36,124059,30513],{"class":42},[36,124061,30571],{"class":50},[36,124063,124064],{"class":42},"$XAUTHORITY ",[36,124066,124067],{"class":50},"KDE_SESSION_VERSION=",[36,124069,2875],{"class":62},[36,124071,124072],{"class":50}," KDE_FULL_SESSION=",[36,124074,3779],{"class":62},[36,124076,124077],{"class":50}," dolphin\n",[19,124079,124080],{},"kde6",[26,124082,124084],{"className":119635,"code":124083,"language":119637,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,124085,124086],{"__ignoreMap":31},[36,124087,124088,124090,124092,124094,124096,124098,124100,124102,124104,124106,124108],{"class":38,"line":39},[36,124089,124051],{"class":79},[36,124091,124054],{"class":50},[36,124093,124057],{"class":50},[36,124095,30513],{"class":42},[36,124097,30571],{"class":50},[36,124099,124064],{"class":42},[36,124101,124067],{"class":50},[36,124103,2900],{"class":62},[36,124105,124072],{"class":50},[36,124107,3779],{"class":62},[36,124109,124077],{"class":50},[2467,124111,124112],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":124114},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123774,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124121,"title":124122,"body":124123,"description":2493,"extension":2494,"meta":124137,"navigation":69,"path":124138,"seo":124139,"stem":124140,"__hash__":124141},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124124,"toc":124135},[124125,124128],[10,124126,124122],{"id":124127},"_5-各种环境配置",[19,124129,124130],{},[2796,124131,124134],{"href":124132,"rel":124133},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26235],"电控组环境搭建大全",{"title":31,"searchDepth":54,"depth":54,"links":124136},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124122,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124143,"title":124144,"body":124145,"description":2493,"extension":2494,"meta":124493,"navigation":69,"path":124494,"seo":124495,"stem":124496,"__hash__":124497},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124146,"toc":124485},[124147,124150,124154,124158,124162,124167,124174,124178,124471,124475,124482],[10,124148,124144],{"id":124149},"_6-拓展功能",[14,124151,124153],{"id":124152},"_61-wine","6.1 Wine",[14,124155,124157],{"id":124156},"_62-android","6.2 Android",[1752,124159,124161],{"id":124160},"_621-i卡a卡","6.2.1 I卡、A卡",[650,124163,124164],{},[653,124165,124166],{},"Wayland-Waydroid(体验超级好)",[19,124168,124169,124170],{},"Waydroid 官网与安装指南：",[2796,124171,124172],{"href":124172,"rel":124173},"https:\u002F\u002Fwaydro.id\u002F",[26235],[1752,124175,124177],{"id":124176},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[650,124179,124180],{},[653,124181,124182,124183,124185,124186,124190,124192,124195,124200,124397],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56064,124184],{},"BlissOS 官网下载：",[2796,124187,124188],{"href":124188,"rel":124189},"https:\u002F\u002Fblissos.org\u002F",[26235],[56064,124191],{},[3879,124193],{"alt":31,"src":124194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[650,124196,124197],{"start":66},[653,124198,124199],{},"比较推荐的配置",[26,124201,124203],{"className":119635,"code":124202,"language":119637,"meta":31,"style":31},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[33,124204,124205,124212,124222,124232,124242,124254,124264,124271,124281,124290,124299,124309,124319,124328,124338,124348,124360,124370,124379,124389],{"__ignoreMap":31},[36,124206,124207,124210],{"class":38,"line":39},[36,124208,124209],{"class":79},"qemu-system-x86_64",[36,124211,27049],{"class":62},[36,124213,124214,124217,124220],{"class":38,"line":54},[36,124215,124216],{"class":62},"        -M",[36,124218,124219],{"class":50}," q35,vmport=off",[36,124221,27049],{"class":62},[36,124223,124224,124227,124230],{"class":38,"line":66},[36,124225,124226],{"class":62},"        -accel",[36,124228,124229],{"class":50}," kvm",[36,124231,27049],{"class":62},[36,124233,124234,124237,124240],{"class":38,"line":73},[36,124235,124236],{"class":62},"        -cpu",[36,124238,124239],{"class":50}," qemu64,+sse3,+sse4.2",[36,124241,27049],{"class":62},[36,124243,124244,124247,124250,124252],{"class":38,"line":86},[36,124245,124246],{"class":62},"        -smp",[36,124248,124249],{"class":50}," 8,cores=",[36,124251,2850],{"class":62},[36,124253,27049],{"class":62},[36,124255,124256,124259,124262],{"class":38,"line":126},[36,124257,124258],{"class":62},"        -m",[36,124260,124261],{"class":50}," 6G",[36,124263,27049],{"class":62},[36,124265,124266,124269],{"class":38,"line":131},[36,124267,124268],{"class":62},"        -usb",[36,124270,27049],{"class":62},[36,124272,124273,124276,124279],{"class":38,"line":225},[36,124274,124275],{"class":62},"        -device",[36,124277,124278],{"class":50}," virtio-tablet",[36,124280,27049],{"class":62},[36,124282,124283,124285,124288],{"class":38,"line":235},[36,124284,124275],{"class":62},[36,124286,124287],{"class":50}," virtio-keyboard",[36,124289,27049],{"class":62},[36,124291,124292,124294,124297],{"class":38,"line":377},[36,124293,124275],{"class":62},[36,124295,124296],{"class":50}," usb-tablet",[36,124298,27049],{"class":62},[36,124300,124301,124304,124307],{"class":38,"line":617},[36,124302,124303],{"class":62},"        -bios",[36,124305,124306],{"class":50}," OVMF-pure-efi64.fd",[36,124308,27049],{"class":62},[36,124310,124311,124314,124317],{"class":38,"line":643},[36,124312,124313],{"class":62},"        -net",[36,124315,124316],{"class":50}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,124318,27049],{"class":62},[36,124320,124321,124323,124326],{"class":38,"line":921},[36,124322,124313],{"class":62},[36,124324,124325],{"class":50}," nic,model=virtio",[36,124327,27049],{"class":62},[36,124329,124330,124333,124336],{"class":38,"line":934},[36,124331,124332],{"class":62},"        -audio",[36,124334,124335],{"class":50}," sdl,model=hda",[36,124337,27049],{"class":62},[36,124339,124340,124343,124346],{"class":38,"line":939},[36,124341,124342],{"class":62},"        -display",[36,124344,124345],{"class":50}," sdl,gl=on,show-cursor=on",[36,124347,27049],{"class":62},[36,124349,124350,124352,124355,124358],{"class":38,"line":949},[36,124351,124275],{"class":62},[36,124353,124354],{"class":50}," virtio-vga-gl,xres=1920,yres=",[36,124356,124357],{"class":62},"1080",[36,124359,27049],{"class":62},[36,124361,124362,124365,124368],{"class":38,"line":962},[36,124363,124364],{"class":62},"        -drive",[36,124366,124367],{"class":50}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,124369,27049],{"class":62},[36,124371,124372,124374,124377],{"class":38,"line":974},[36,124373,124364],{"class":62},[36,124375,124376],{"class":50}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,124378,27049],{"class":62},[36,124380,124381,124384,124387],{"class":38,"line":979},[36,124382,124383],{"class":62},"        -monitor",[36,124385,124386],{"class":50}," stdio",[36,124388,27049],{"class":62},[36,124390,124391,124394],{"class":38,"line":994},[36,124392,124393],{"class":62},"        -serial",[36,124395,124396],{"class":50}," none\n",[650,124398,124399],{"start":86},[653,124400,124401,124402],{},"常用操作：",[650,124403,124404,124407,124463],{},[653,124405,124406],{},"全屏：Ctrl+Alt+F",[653,124408,124409,124410,124415],{},"adb调试",[650,124411,124412],{},[653,124413,124414],{},"使Linux与Android用ADB连接。",[26,124416,124418],{"className":119635,"code":124417,"language":119637,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,124419,124420,124425,124436,124441,124453,124458],{"__ignoreMap":31},[36,124421,124422],{"class":38,"line":39},[36,124423,124424],{"class":2621},"# 连接安卓\n",[36,124426,124427,124430,124433],{"class":38,"line":54},[36,124428,124429],{"class":79},"adb",[36,124431,124432],{"class":50}," connect",[36,124434,124435],{"class":62}," 127.0.0.1\n",[36,124437,124438],{"class":38,"line":66},[36,124439,124440],{"class":2621},"# 打开shell\n",[36,124442,124443,124445,124447,124450],{"class":38,"line":73},[36,124444,124429],{"class":79},[36,124446,29253],{"class":62},[36,124448,124449],{"class":50}," 127.0.0.1:5555",[36,124451,124452],{"class":50}," shell\n",[36,124454,124455],{"class":38,"line":86},[36,124456,124457],{"class":2621},"# 使用root权限\n",[36,124459,124460],{"class":38,"line":126},[36,124461,124462],{"class":79},"su\n",[653,124464,124465,124466],{},"中文输入法",[650,124467,124468],{},[653,124469,124470],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124472,124474],{"id":124473},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124476,124477,124478],{},"rEFInd 官网与文档：",[2796,124479,124480],{"href":124480,"rel":124481},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26235],[2467,124483,124484],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":124486},[124487,124488,124492],{"id":124152,"depth":54,"text":124153},{"id":124156,"depth":54,"text":124157,"children":124489},[124490,124491],{"id":124160,"depth":66,"text":124161},{"id":124176,"depth":66,"text":124177},{"id":124473,"depth":54,"text":124474},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124144,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124499,"title":124500,"body":124501,"description":2493,"extension":2494,"meta":127800,"navigation":69,"path":127801,"seo":127802,"stem":127803,"__hash__":127804},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124502,"toc":127774},[124503,124506,124510,124513,124520,124770,124773,124845,124848,124852,124856,124861,124864,124867,124870,124875,124878,124881,124884,124889,124892,124897,124900,124903,124908,124911,124916,124919,124923,124927,124930,124935,124938,124952,124955,124958,124967,124970,124979,124982,124985,124994,124997,125006,125009,125012,125021,125024,125027,125042,125045,125048,125057,125062,125065,125068,125077,125080,125089,125092,125101,125104,125113,125118,125121,125129,125134,125137,125146,125149,125157,125162,125165,125174,125177,125180,125184,125187,125192,125195,125200,125214,125219,125224,125235,125240,125246,125251,125266,125271,125274,125279,125284,125289,125297,125302,125309,125314,125325,125330,125333,125337,125340,125343,125348,125351,125370,125375,125378,125387,125392,125395,125417,125420,125450,125453,125458,125461,125475,125480,125499,125502,125505,125510,125522,125527,125532,125535,125540,125543,125558,125561,125566,125571,125575,125580,125620,125623,125627,125633,125639,125644,125647,125654,125659,125666,125669,125672,125679,125693,125696,125756,125759,125773,125785,125788,125791,125794,125858,125861,125864,125867,125887,125890,125895,125902,125906,125909,125913,125918,125923,125927,125930,125933,125975,125980,125983,126005,126020,126022,126027,126039,126099,126101,126103,126157,126159,126161,126167,126172,126175,126180,126184,126187,126249,126254,126257,126259,126263,126275,126357,126359,126361,126415,126421,126423,126427,126432,126434,126439,126443,126463,126498,126502,126505,126508,126511,126518,126521,126533,126536,126551,126554,126573,126621,126624,126641,126644,126658,126663,126666,126675,126690,126702,126740,126745,126754,126759,126764,126790,126799,126803,126807,126812,126815,126819,126823,126828,126831,126836,126839,126844,126847,126852,126855,126859,126864,126867,126872,126875,126879,126884,126887,126892,126895,126900,126903,126907,126912,126915,126920,126923,126928,126931,126935,126940,126943,126948,126951,126956,126959,126964,126967,126972,126975,126980,126983,126987,126992,126995,127000,127007,127011,127016,127019,127024,127027,127031,127036,127039,127042,127045,127048,127051,127055,127058,127068,127073,127078,127100,127105,127110,127117,127121,127126,127129,127132,127137,127140,127143,127146,127149,127152,127155,127158,127161,127164,127167,127170,127173,127178,127183,127188,127193,127198,127203,127208,127211,127215,127218,127222,127227,127232,127237,127242,127246,127252,127260,127265,127268,127273,127288,127291,127296,127330,127345,127348,127403,127429,127441,127444,127453,127456,127471,127476,127479,127485,127490,127493,127498,127501,127506,127511,127518,127521,127536,127539,127574,127579,127587,127625,127628,127631,127636,127639,127644,127655,127689,127694,127697,127706,127711,127717,127720,127725,127734,127739,127742,127745,127750,127758,127761,127766,127771],[10,124504,124500],{"id":124505},"_7-其他操作",[14,124507,124509],{"id":124508},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124511,124512],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124514,124515,124516,124519],{},"进入工控机的硬盘目录，进入",[33,124517,124518],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,124521,124525],{"className":124522,"code":124523,"language":124524,"meta":31,"style":31},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[33,124526,124527,124535,124546,124553,124560,124572,124579,124591,124602,124613,124620,124627,124634,124646,124658,124665,124677,124689,124696,124708,124720,124732,124743,124750,124761],{"__ignoreMap":31},[36,124528,124529,124532],{"class":38,"line":39},[36,124530,124531],{"class":53649},"network",[36,124533,124534],{"class":42},": \n",[36,124536,124537,124540,124542,124544],{"class":38,"line":54},[36,124538,124539],{"class":53649},"  version",[36,124541,2158],{"class":42},[36,124543,1911],{"class":62},[36,124545,5059],{"class":42},[36,124547,124548,124551],{"class":38,"line":66},[36,124549,124550],{"class":53649},"  wifis",[36,124552,124534],{"class":42},[36,124554,124555,124558],{"class":38,"line":73},[36,124556,124557],{"class":53649},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,124559,124534],{"class":42},[36,124561,124562,124565,124567,124570],{"class":38,"line":86},[36,124563,124564],{"class":53649},"      renderer",[36,124566,2158],{"class":42},[36,124568,124569],{"class":50},"NetworkManager",[36,124571,5059],{"class":42},[36,124573,124574,124577],{"class":38,"line":126},[36,124575,124576],{"class":53649},"      match",[36,124578,124534],{"class":42},[36,124580,124581,124584,124586,124589],{"class":38,"line":131},[36,124582,124583],{"class":53649},"        name",[36,124585,2158],{"class":42},[36,124587,124588],{"class":50},"\"wlan0\"",[36,124590,5059],{"class":42},[36,124592,124593,124596,124598,124600],{"class":38,"line":225},[36,124594,124595],{"class":53649},"      dhcp4",[36,124597,2158],{"class":42},[36,124599,3779],{"class":62},[36,124601,5059],{"class":42},[36,124603,124604,124607,124609,124611],{"class":38,"line":235},[36,124605,124606],{"class":53649},"      dhcp6",[36,124608,2158],{"class":42},[36,124610,3779],{"class":62},[36,124612,5059],{"class":42},[36,124614,124615,124618],{"class":38,"line":377},[36,124616,124617],{"class":53649},"      access-points",[36,124619,124534],{"class":42},[36,124621,124622,124625],{"class":38,"line":617},[36,124623,124624],{"class":50},"        \"EMIS_Vinci_Robocon_5G\"",[36,124626,124534],{"class":42},[36,124628,124629,124632],{"class":38,"line":643},[36,124630,124631],{"class":53649},"          auth",[36,124633,124534],{"class":42},[36,124635,124636,124639,124641,124644],{"class":38,"line":921},[36,124637,124638],{"class":53649},"            key-management",[36,124640,2158],{"class":42},[36,124642,124643],{"class":50},"\"psk\"",[36,124645,5059],{"class":42},[36,124647,124648,124651,124653,124656],{"class":38,"line":934},[36,124649,124650],{"class":53649},"            password",[36,124652,2158],{"class":42},[36,124654,124655],{"class":50},"\"vinci666\"",[36,124657,5059],{"class":42},[36,124659,124660,124663],{"class":38,"line":939},[36,124661,124662],{"class":53649},"          networkmanager",[36,124664,124534],{"class":42},[36,124666,124667,124670,124672,124675],{"class":38,"line":949},[36,124668,124669],{"class":53649},"            uuid",[36,124671,2158],{"class":42},[36,124673,124674],{"class":50},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,124676,5059],{"class":42},[36,124678,124679,124682,124684,124687],{"class":38,"line":962},[36,124680,124681],{"class":53649},"            name",[36,124683,2158],{"class":42},[36,124685,124686],{"class":50},"\"EMIS_Vinci_Robocon_5G\"",[36,124688,5059],{"class":42},[36,124690,124691,124694],{"class":38,"line":974},[36,124692,124693],{"class":53649},"            passthrough",[36,124695,124534],{"class":42},[36,124697,124698,124701,124703,124706],{"class":38,"line":979},[36,124699,124700],{"class":53649},"              wifi-security.auth-alg",[36,124702,2158],{"class":42},[36,124704,124705],{"class":50},"\"open\"",[36,124707,5059],{"class":42},[36,124709,124710,124713,124715,124718],{"class":38,"line":994},[36,124711,124712],{"class":53649},"              ipv6.addr-gen-mode",[36,124714,2158],{"class":42},[36,124716,124717],{"class":50},"\"default\"",[36,124719,5059],{"class":42},[36,124721,124722,124725,124727,124730],{"class":38,"line":1006},[36,124723,124724],{"class":53649},"              ipv6.ip6-privacy",[36,124726,2158],{"class":42},[36,124728,124729],{"class":50},"\"-1\"",[36,124731,5059],{"class":42},[36,124733,124734,124737,124739,124741],{"class":38,"line":1011},[36,124735,124736],{"class":53649},"              proxy._",[36,124738,2158],{"class":42},[36,124740,10033],{"class":50},[36,124742,5059],{"class":42},[36,124744,124745,124748],{"class":38,"line":1023},[36,124746,124747],{"class":53649},"      networkmanager",[36,124749,124534],{"class":42},[36,124751,124752,124755,124757,124759],{"class":38,"line":1028},[36,124753,124754],{"class":53649},"        uuid",[36,124756,2158],{"class":42},[36,124758,124674],{"class":50},[36,124760,5059],{"class":42},[36,124762,124763,124765,124767],{"class":38,"line":1033},[36,124764,124583],{"class":53649},[36,124766,2158],{"class":42},[36,124768,124769],{"class":50},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124771,124772],{},"将其改为新wifi的名和密码：",[26,124774,124776],{"className":124522,"code":124775,"language":124524,"meta":31,"style":31},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[33,124777,124778,124784,124793,124799,124806,124815,124823,124829,124835],{"__ignoreMap":31},[36,124779,124780,124782],{"class":38,"line":39},[36,124781,124531],{"class":53649},[36,124783,153],{"class":42},[36,124785,124786,124788,124790],{"class":38,"line":54},[36,124787,124539],{"class":53649},[36,124789,2158],{"class":42},[36,124791,124792],{"class":62},"2\n",[36,124794,124795,124797],{"class":38,"line":66},[36,124796,124550],{"class":53649},[36,124798,153],{"class":42},[36,124800,124801,124804],{"class":38,"line":73},[36,124802,124803],{"class":53649},"    wlan0",[36,124805,153],{"class":42},[36,124807,124808,124810,124812],{"class":38,"line":86},[36,124809,124595],{"class":53649},[36,124811,2158],{"class":42},[36,124813,124814],{"class":62},"true\n",[36,124816,124817,124819,124821],{"class":38,"line":126},[36,124818,124606],{"class":53649},[36,124820,2158],{"class":42},[36,124822,124814],{"class":62},[36,124824,124825,124827],{"class":38,"line":131},[36,124826,124617],{"class":53649},[36,124828,153],{"class":42},[36,124830,124831,124833],{"class":38,"line":225},[36,124832,124624],{"class":50},[36,124834,153],{"class":42},[36,124836,124837,124840,124842],{"class":38,"line":235},[36,124838,124839],{"class":53649},"          password",[36,124841,2158],{"class":42},[36,124843,124844],{"class":50},"\"vinci666\"\n",[19,124846,124847],{},"工控机开机即可连上网。",[14,124849,124851],{"id":124850},"_72-ssh远程开发","7.2 SSH远程开发",[1752,124853,124855],{"id":124854},"_721-环境准备","7.2.1 环境准备",[19,124857,124858],{},[667,124859,124860],{},"1.硬件准备",[19,124862,124863],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124865,124866],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124868,124869],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124871,124872],{},[667,124873,124874],{},"2.设置固定IP",[19,124876,124877],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124879,124880],{},"1.进入设置界面",[19,124882,124883],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124885,124886],{},[3879,124887],{"alt":31,"src":124888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124890,124891],{},"2.配置所连接的网络",[19,124893,124894],{},[3879,124895],{"alt":31,"src":124896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124898,124899],{},"3.设置固定IP",[19,124901,124902],{},"查看当前IP地址。",[19,124904,124905],{},[3879,124906],{"alt":31,"src":124907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124909,124910],{},"设置固定IP。",[19,124912,124913],{},[3879,124914],{"alt":31,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124917,124918],{},"至此，IP配置完毕。",[1752,124920,124922],{"id":124921},"_722-环境搭建","7.2.2 环境搭建",[19,124924,124925],{},[667,124926,28123],{},[19,124928,124929],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124931,124932],{},[667,124933,124934],{},"实现",[19,124936,124937],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[650,124939,124940,124943,124946,124949],{},[653,124941,124942],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[653,124944,124945],{},"远程主机启动SSH服务；",[653,124947,124948],{},"本地主机登陆远程主机；",[653,124950,124951],{},"实现数据传输。",[19,124953,124954],{},"1.安装SSH客户端与服务端",[19,124956,124957],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,124959,124961],{"className":123155,"code":124960,"language":123157,"meta":123158,"style":31}," sudo apt install openssh-server\n",[33,124962,124963],{"__ignoreMap":31},[36,124964,124965],{"class":38,"line":39},[36,124966,124960],{},[19,124968,124969],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,124971,124973],{"className":123155,"code":124972,"language":123157,"meta":123158,"style":31},"sudo apt install openssh-client\n",[33,124974,124975],{"__ignoreMap":31},[36,124976,124977],{"class":38,"line":39},[36,124978,124972],{},[19,124980,124981],{},"2.远程主机启动SSH服务",[19,124983,124984],{},"远程主机启动 ssh 服务命令如下：",[26,124986,124988],{"className":123155,"code":124987,"language":123157,"meta":123158,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,124989,124990],{"__ignoreMap":31},[36,124991,124992],{"class":38,"line":39},[36,124993,124987],{},[19,124995,124996],{},"启动后可使用如下命令查看服务是否正常运行：",[26,124998,125000],{"className":123155,"code":124999,"language":123157,"meta":123158,"style":31},"ps -e | grep ssh\n",[33,125001,125002],{"__ignoreMap":31},[36,125003,125004],{"class":38,"line":39},[36,125005,124999],{},[19,125007,125008],{},"如果启动成功，会包含 sshd 程序。",[19,125010,125011],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,125013,125015],{"className":123155,"code":125014,"language":123157,"meta":123158,"style":31},"sudo systemctl enable ssh\n",[33,125016,125017],{"__ignoreMap":31},[36,125018,125019],{"class":38,"line":39},[36,125020,125014],{},[19,125022,125023],{},"3.本地远程登录",[19,125025,125026],{},"登录远程主机可以调用如下命令:",[26,125028,125030],{"className":119635,"code":125029,"language":119637,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,125031,125032],{"__ignoreMap":31},[36,125033,125034,125036,125039],{"class":38,"line":39},[36,125035,123986],{"class":79},[36,125037,125038],{"class":62}," -X",[36,125040,125041],{"class":50}," 用户名@ip地址\n",[19,125043,125044],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125046,125047],{},"如果退出，可以调用exit命令：",[26,125049,125051],{"className":123155,"code":125050,"language":123157,"meta":123158,"style":31},"exit\n",[33,125052,125053],{"__ignoreMap":31},[36,125054,125055],{"class":38,"line":39},[36,125056,125050],{},[19,125058,125059],{},[667,125060,125061],{},"4.实现数据传输",[19,125063,125064],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125066,125067],{},"上传文件指令格式如下：",[26,125069,125071],{"className":123155,"code":125070,"language":123157,"meta":123158,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,125072,125073],{"__ignoreMap":31},[36,125074,125075],{"class":38,"line":39},[36,125076,125070],{},[19,125078,125079],{},"上传文件夹指令格式如下：",[26,125081,125083],{"className":123155,"code":125082,"language":123157,"meta":123158,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,125084,125085],{"__ignoreMap":31},[36,125086,125087],{"class":38,"line":39},[36,125088,125082],{},[19,125090,125091],{},"下载文件指令格式如下：",[26,125093,125095],{"className":123155,"code":125094,"language":123157,"meta":123158,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,125096,125097],{"__ignoreMap":31},[36,125098,125099],{"class":38,"line":39},[36,125100,125094],{},[19,125102,125103],{},"下载文件夹指令格式如下：",[26,125105,125107],{"className":123155,"code":125106,"language":123157,"meta":123158,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,125108,125109],{"__ignoreMap":31},[36,125110,125111],{"class":38,"line":39},[36,125112,125106],{},[19,125114,125115],{},[667,125116,125117],{},"优化",[19,125119,125120],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[650,125122,125123,125126],{},[653,125124,125125],{},"本地生成密钥对；",[653,125127,125128],{},"将公钥上传至远程主机。",[19,125130,125131],{},[667,125132,125133],{},"1.生成密钥对",[19,125135,125136],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,125138,125140],{"className":123155,"code":125139,"language":123157,"meta":123158,"style":31},"ssh-keygen\n",[33,125141,125142],{"__ignoreMap":31},[36,125143,125144],{"class":38,"line":39},[36,125145,125139],{},[19,125147,125148],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[650,125150,125151,125154],{},[653,125152,125153],{},"id_rsa （私钥）；",[653,125155,125156],{},"id_rsa.pub (公钥)。",[19,125158,125159],{},[667,125160,125161],{},"2.公钥上传",[19,125163,125164],{},"上传指令如下：",[26,125166,125168],{"className":123155,"code":125167,"language":123157,"meta":123158,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,125169,125170],{"__ignoreMap":31},[36,125171,125172],{"class":38,"line":39},[36,125173,125167],{},[19,125175,125176],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125178,125179],{},"以后再远程登录就无需录入密码了。",[1752,125181,125183],{"id":125182},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125185,125186],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125188,125189],{},[667,125190,125191],{},"1.准备工作",[19,125193,125194],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125196,125197],{},[667,125198,125199],{},"2.为VScode安装远程开发插件",[19,125201,125202,125203,125206,125207,125210,125211,676],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,125204,125205],{},"扩展：商店","的搜索栏输入",[33,125208,125209],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,125212,125213],{},"安装",[19,125215,125216],{},[3879,125217],{"alt":31,"src":125218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125220,125221],{},[667,125222,125223],{},"3.配置远程连接",[19,125225,125226,125227,125230,125231,125234],{},"步骤1：使用快捷键",[33,125228,125229],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,125232,125233],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125236,125237],{},[3879,125238],{"alt":31,"src":125239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125241,125242,125243,676],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,125244,125245],{},"Add New SSH Host",[19,125247,125248],{},[3879,125249],{"alt":31,"src":125250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125252,125253,125254,125257,125258,125261,125262,125265],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,125255,125256],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,125259,125260],{},"ubuntu","需要替换为你的登录用户名，",[33,125263,125264],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125267,125268],{},[3879,125269],{"alt":31,"src":125270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125272,125273],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125275,125276],{},[3879,125277],{"alt":31,"src":125278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125280,125281],{},[3879,125282],{"alt":31,"src":125283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125285,125286],{},[667,125287,125288],{},"4.使用",[19,125290,125291,125292,125230,125294,125296],{},"步骤1：继续使用快捷键",[33,125293,125229],{},[33,125295,125233],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125298,125299],{},[3879,125300],{"alt":31,"src":125301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125303,125304,125305,125308],{},"或者，也可以点击侧边栏的",[33,125306,125307],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125310,125311],{},[3879,125312],{"alt":31,"src":125313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125315,125316,125317,125320,125321,125324],{},"步骤2：选择菜单栏的",[33,125318,125319],{},"文件","下的",[33,125322,125323],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125326,125327],{},[3879,125328],{"alt":31,"src":125329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125331,125332],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125334,125336],{"id":125335},"_73-远程桌面","7.3 远程桌面",[19,125338,125339],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125341,125342],{},"我们选择使用VNC来看。",[650,125344,125345],{},[653,125346,125347],{},"安装VNC服务器：",[19,125349,125350],{},"这里以TigerVNC为例进行安装：",[26,125352,125354],{"className":119635,"code":125353,"language":119637,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,125355,125356],{"__ignoreMap":31},[36,125357,125358,125360,125362,125364,125367],{"class":38,"line":39},[36,125359,26947],{"class":79},[36,125361,119656],{"class":50},[36,125363,26204],{"class":50},[36,125365,125366],{"class":50}," tigervnc-standalone-server",[36,125368,125369],{"class":50}," tigervnc-common\n",[650,125371,125372],{"start":54},[653,125373,125374],{},"设置VNC密码：",[19,125376,125377],{},"为VNC用户设置密码，运行以下命令：",[26,125379,125381],{"className":119635,"code":125380,"language":119637,"meta":31,"style":31},"vncpasswd\n",[33,125382,125383],{"__ignoreMap":31},[36,125384,125385],{"class":38,"line":39},[36,125386,125380],{"class":79},[650,125388,125389],{"start":66},[653,125390,125391],{},"配置VNC启动脚本:",[19,125393,125394],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,125396,125398],{"className":119635,"code":125397,"language":119637,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,125399,125400,125409],{"__ignoreMap":31},[36,125401,125402,125404,125406],{"class":38,"line":39},[36,125403,103606],{"class":79},[36,125405,31585],{"class":62},[36,125407,125408],{"class":50}," ~\u002F.vnc\n",[36,125410,125411,125414],{"class":38,"line":54},[36,125412,125413],{"class":79},"nano",[36,125415,125416],{"class":50}," ~\u002F.vnc\u002Fxstartup\n",[19,125418,125419],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,125421,125423],{"className":119635,"code":125422,"language":119637,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,125424,125425,125430,125438,125445],{"__ignoreMap":31},[36,125426,125427],{"class":38,"line":39},[36,125428,125429],{"class":2621},"#!\u002Fbin\u002Fsh\n",[36,125431,125432,125435],{"class":38,"line":54},[36,125433,125434],{"class":62},"unset",[36,125436,125437],{"class":50}," SESSION_MANAGER\n",[36,125439,125440,125442],{"class":38,"line":66},[36,125441,125434],{"class":62},[36,125443,125444],{"class":50}," DBUS_SESSION_BUS_ADDRESS\n",[36,125446,125447],{"class":38,"line":73},[36,125448,125449],{"class":79},"gnome-session\n",[19,125451,125452],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[650,125454,125455],{"start":73},[653,125456,125457],{},"给予执行权限：",[19,125459,125460],{},"为xstartup文件设置执行权限：",[26,125462,125464],{"className":119635,"code":125463,"language":119637,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,125465,125466],{"__ignoreMap":31},[36,125467,125468,125470,125473],{"class":38,"line":39},[36,125469,26982],{"class":79},[36,125471,125472],{"class":50}," +x",[36,125474,125416],{"class":50},[650,125476,125477],{"start":86},[653,125478,125479],{},"启动VNC服务器：",[26,125481,125483],{"className":119635,"code":125482,"language":119637,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,125484,125485],{"__ignoreMap":31},[36,125486,125487,125490,125493,125496],{"class":38,"line":39},[36,125488,125489],{"class":79},"vncserver",[36,125491,125492],{"class":62}," -geometry",[36,125494,125495],{"class":50}," 1920x1080",[36,125497,125498],{"class":62}," -localhost=0\n",[19,125500,125501],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125503,125504],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[650,125506,125507],{"start":126},[653,125508,125509],{},"查看已开启的VNC服务器：",[26,125511,125513],{"className":119635,"code":125512,"language":119637,"meta":31,"style":31},"vncserver -list\n",[33,125514,125515],{"__ignoreMap":31},[36,125516,125517,125519],{"class":38,"line":39},[36,125518,125489],{"class":79},[36,125520,125521],{"class":62}," -list\n",[19,125523,125524],{},[3879,125525],{"alt":31,"src":125526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[650,125528,125529],{"start":131},[653,125530,125531],{},"连接到VNC服务器：",[19,125533,125534],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[650,125536,125537],{"start":225},[653,125538,125539],{},"停止VNC服务器：",[19,125541,125542],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,125544,125546],{"className":119635,"code":125545,"language":119637,"meta":31,"style":31},"vncserver -kill :1\n",[33,125547,125548],{"__ignoreMap":31},[36,125549,125550,125552,125555],{"class":38,"line":39},[36,125551,125489],{"class":79},[36,125553,125554],{"class":62}," -kill",[36,125556,125557],{"class":50}," :1\n",[19,125559,125560],{},"将:1替换为你实际使用的显示编号。",[19,125562,125563],{},[3879,125564],{"alt":31,"src":125565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125567,125568],{},[3879,125569],{"alt":31,"src":125570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125572,125574],{"id":125573},"_74-usb端口设置","7.4 USB端口设置",[19,125576,125577],{},[667,125578,125579],{},"首先先配置好权限",[26,125581,125583],{"className":119635,"code":125582,"language":119637,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,125584,125585,125590,125603,125610,125615],{"__ignoreMap":31},[36,125586,125587],{"class":38,"line":39},[36,125588,125589],{"class":2621},"# 将用户权限提高\n",[36,125591,125592,125594,125596,125598,125601],{"class":38,"line":54},[36,125593,26947],{"class":79},[36,125595,28944],{"class":50},[36,125597,28947],{"class":62},[36,125599,125600],{"class":50}," dialout",[36,125602,28952],{"class":42},[36,125604,125605,125607],{"class":38,"line":66},[36,125606,28971],{"class":79},[36,125608,125609],{"class":50}," dialout\n",[36,125611,125612],{"class":38,"line":73},[36,125613,125614],{"class":2621},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,125616,125617],{"class":38,"line":86},[36,125618,125619],{"class":79},"groups\n",[19,125621,125622],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1752,125624,125626],{"id":125625},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125628,125629,125632],{},[667,125630,125631],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125634,125635,125638],{},[667,125636,125637],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125640,125641],{},[667,125642,125643],{},"流程如下：",[19,125645,125646],{},"（1）.查找设备idVendor和idProduct",[19,125648,125649,125650,125653],{},"接入两个USB设备，在终端调用指令",[33,125651,125652],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125655,125656],{},[3879,125657],{"alt":31,"src":125658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125660,125661,125662,125665],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,125663,125664],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125667,125668],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125670,125671],{},"（2）.编写映射规则",[19,125673,125674,125675,125678],{},"在",[33,125676,125677],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,125680,125682],{"className":119635,"code":125681,"language":119637,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,125683,125684],{"__ignoreMap":31},[36,125685,125686,125688,125690],{"class":38,"line":39},[36,125687,26947],{"class":79},[36,125689,120922],{"class":50},[36,125691,125692],{"class":50}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125694,125695],{},"输入如下内容：",[26,125697,125699],{"className":119635,"code":125698,"language":119637,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[33,125700,125701,125731],{"__ignoreMap":31},[36,125702,125703,125706,125708,125711,125714,125717,125720,125722,125725,125728],{"class":38,"line":39},[36,125704,125705],{"class":42},"KERNEL",[36,125707,47],{"class":46},[36,125709,125710],{"class":50},"=\"ttyUSB*\",",[36,125712,125713],{"class":79}," ATTRS",[36,125715,125716],{"class":50},"{idVendor}==",[36,125718,125719],{"class":79},"\"10c4\"",[36,125721,2934],{"class":79},[36,125723,125724],{"class":50}," ATTRS{idProduct}==\"ea60\",",[36,125726,125727],{"class":50}," MODE:=\"0777\",",[36,125729,125730],{"class":50}," SYMLINK+=\"mylidar\"\n",[36,125732,125733,125735,125737,125739,125741,125743,125746,125748,125751,125753],{"class":38,"line":54},[36,125734,125705],{"class":42},[36,125736,47],{"class":46},[36,125738,125710],{"class":50},[36,125740,125713],{"class":79},[36,125742,125716],{"class":50},[36,125744,125745],{"class":79},"\"1a86\"",[36,125747,2934],{"class":79},[36,125749,125750],{"class":50}," ATTRS{idProduct}==\"7523\",",[36,125752,125727],{"class":50},[36,125754,125755],{"class":50}," SYMLINK+=\"mycar\"\n",[19,125757,125758],{},"代码解释：",[3557,125760,125761,125764,125767,125770],{},[653,125762,125763],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[653,125765,125766],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[653,125768,125769],{},"SYMLINK是符号连接，即绑定的别名；",[653,125771,125772],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125774,125775,125776,125779,125782],{},"***小提示：***",[25923,125777,125778],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,125780,125781],{},"\u002Fetc\u002Fudev\u002Frule.d",[25923,125783,125784],{},"目录即可。",[19,125786,125787],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125789,125790],{},"（3）.使规则生效",[19,125792,125793],{},"在终端下输入如下指令：",[26,125795,125797],{"className":119635,"code":125796,"language":119637,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,125798,125799,125804,125816,125827,125831,125836,125849],{"__ignoreMap":31},[36,125800,125801],{"class":38,"line":39},[36,125802,125803],{"class":2621},"# Ubuntu用下方命令\n",[36,125805,125806,125808,125810,125813],{"class":38,"line":54},[36,125807,26947],{"class":79},[36,125809,122387],{"class":50},[36,125811,125812],{"class":50}," udev",[36,125814,125815],{"class":50}," reload\n",[36,125817,125818,125820,125822,125824],{"class":38,"line":66},[36,125819,26947],{"class":79},[36,125821,122387],{"class":50},[36,125823,125812],{"class":50},[36,125825,125826],{"class":50}," restart\n",[36,125828,125829],{"class":38,"line":73},[36,125830,70],{"emptyLinePlaceholder":69},[36,125832,125833],{"class":38,"line":86},[36,125834,125835],{"class":2621},"#Fedora用下方命令\n",[36,125837,125838,125840,125843,125846],{"class":38,"line":126},[36,125839,26947],{"class":79},[36,125841,125842],{"class":50}," udevadm",[36,125844,125845],{"class":50}," control",[36,125847,125848],{"class":62}," --reload\n",[36,125850,125851,125853,125855],{"class":38,"line":131},[36,125852,26947],{"class":79},[36,125854,125842],{"class":50},[36,125856,125857],{"class":50}," trigger\n",[19,125859,125860],{},"再重新插拔设备即可。",[19,125862,125863],{},"（4）.测试",[19,125865,125866],{},"终端下输入如下指令",[26,125868,125870],{"className":119635,"code":125869,"language":119637,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,125871,125872],{"__ignoreMap":31},[36,125873,125874,125877,125880,125882,125884],{"class":38,"line":39},[36,125875,125876],{"class":79},"ll",[36,125878,125879],{"class":50}," \u002Fdev",[36,125881,27480],{"class":46},[36,125883,32605],{"class":79},[36,125885,125886],{"class":50}," ttyUSB\n",[19,125888,125889],{},"运行结果如下：",[19,125891,125892],{},[3879,125893],{"alt":31,"src":125894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125896,125897,125898,125901],{},"也可以多次插拔USB设备，会发现设备端口",[33,125899,125900],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125903,125904],{},[667,125905,120303],{},[19,125907,125908],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1752,125910,125912],{"id":125911},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125914,125915,125917],{},[667,125916,125631],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125919,125920,125922],{},[667,125921,125637],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125924,125925],{},[667,125926,125643],{},[19,125928,125929],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125931,125932],{},"调用如下指令查看第一台雷达的USB信息：",[26,125934,125936],{"className":119635,"code":125935,"language":119637,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,125937,125938,125958],{"__ignoreMap":31},[36,125939,125940,125943,125945,125948,125951,125953,125955],{"class":38,"line":39},[36,125941,125942],{"class":79},"udevadm",[36,125944,72167],{"class":50},[36,125946,125947],{"class":62}," --attribute-walk",[36,125949,125950],{"class":62}," --name=\u002Fdev\u002FttyUSB0",[36,125952,27480],{"class":46},[36,125954,32605],{"class":79},[36,125956,125957],{"class":50}," KERNELS\n",[36,125959,125960,125962,125964,125966,125969,125971,125973],{"class":38,"line":54},[36,125961,125942],{"class":79},[36,125963,72167],{"class":50},[36,125965,125947],{"class":62},[36,125967,125968],{"class":62}," --name=\u002Fdev\u002FttyACM0",[36,125970,27480],{"class":46},[36,125972,32605],{"class":79},[36,125974,125957],{"class":50},[19,125976,125977],{},[3879,125978],{"alt":31,"src":125979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125981,125982],{},"调用如下指令查看第二台雷达的USB信息：",[26,125984,125986],{"className":119635,"code":125985,"language":119637,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,125987,125988],{"__ignoreMap":31},[36,125989,125990,125992,125994,125996,125999,126001,126003],{"class":38,"line":39},[36,125991,125942],{"class":79},[36,125993,72167],{"class":50},[36,125995,125947],{"class":62},[36,125997,125998],{"class":62}," --name=\u002Fdev\u002FttyUSB1",[36,126000,27480],{"class":46},[36,126002,32605],{"class":79},[36,126004,125957],{"class":50},[19,126006,126007,126008,126011,126012,126015,126016,126019],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,126009,126010],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,126013,126014],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[667,126017,126018],{},"唯一性标识","”。",[19,126021,125671],{},[19,126023,125674,126024,126026],{},[33,126025,125677],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,126028,126029],{"className":119635,"code":125681,"language":119637,"meta":31,"style":31},[33,126030,126031],{"__ignoreMap":31},[36,126032,126033,126035,126037],{"class":38,"line":39},[36,126034,26947],{"class":79},[36,126036,120922],{"class":50},[36,126038,125692],{"class":50},[26,126040,126042],{"className":119635,"code":126041,"language":119637,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[33,126043,126044,126073],{"__ignoreMap":31},[36,126045,126046,126048,126050,126052,126055,126057,126060,126063,126065,126068,126070],{"class":38,"line":39},[36,126047,125705],{"class":42},[36,126049,47],{"class":46},[36,126051,125710],{"class":50},[36,126053,126054],{"class":42}," KERNELS",[36,126056,47],{"class":46},[36,126058,126059],{"class":50},"=\"1-1.3:1.0\",",[36,126061,126062],{"class":79}," MODE:",[36,126064,47],{"class":50},[36,126066,126067],{"class":79},"\"0777\"",[36,126069,2934],{"class":79},[36,126071,126072],{"class":50}," SYMLINK+=\"rplidar_front\"\n",[36,126074,126075,126077,126079,126081,126083,126085,126088,126090,126092,126094,126096],{"class":38,"line":54},[36,126076,125705],{"class":42},[36,126078,47],{"class":46},[36,126080,125710],{"class":50},[36,126082,126054],{"class":42},[36,126084,47],{"class":46},[36,126086,126087],{"class":50},"=\"1-1.4:1.0\",",[36,126089,126062],{"class":79},[36,126091,47],{"class":50},[36,126093,126067],{"class":79},[36,126095,2934],{"class":79},[36,126097,126098],{"class":50}," SYMLINK+=\"rplidar_back\"\n",[19,126100,125790],{},[19,126102,125793],{},[26,126104,126105],{"className":119635,"code":125796,"language":119637,"meta":31,"style":31},[33,126106,126107,126111,126121,126131,126135,126139,126149],{"__ignoreMap":31},[36,126108,126109],{"class":38,"line":39},[36,126110,125803],{"class":2621},[36,126112,126113,126115,126117,126119],{"class":38,"line":54},[36,126114,26947],{"class":79},[36,126116,122387],{"class":50},[36,126118,125812],{"class":50},[36,126120,125815],{"class":50},[36,126122,126123,126125,126127,126129],{"class":38,"line":66},[36,126124,26947],{"class":79},[36,126126,122387],{"class":50},[36,126128,125812],{"class":50},[36,126130,125826],{"class":50},[36,126132,126133],{"class":38,"line":73},[36,126134,70],{"emptyLinePlaceholder":69},[36,126136,126137],{"class":38,"line":86},[36,126138,125835],{"class":2621},[36,126140,126141,126143,126145,126147],{"class":38,"line":126},[36,126142,26947],{"class":79},[36,126144,125842],{"class":50},[36,126146,125845],{"class":50},[36,126148,125848],{"class":62},[36,126150,126151,126153,126155],{"class":38,"line":131},[36,126152,26947],{"class":79},[36,126154,125842],{"class":50},[36,126156,125857],{"class":50},[19,126158,125860],{},[19,126160,125863],{},[19,126162,125866,126163,126166],{},[33,126164,126165],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126168,126169],{},[3879,126170],{"alt":31,"src":126171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126173,126174],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126176,126177,126179],{},[667,126178,120303],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1752,126181,126183],{"id":126182},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126185,126186],{},"（1）.查看所连接的主机USB接口的信息",[26,126188,126190],{"className":119635,"code":126189,"language":119637,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,126191,126192,126222],{"__ignoreMap":31},[36,126193,126194,126196,126198,126201,126203,126205,126207,126209,126212,126215,126217,126220],{"class":38,"line":39},[36,126195,125942],{"class":79},[36,126197,72167],{"class":50},[36,126199,126200],{"class":62}," -a",[36,126202,31585],{"class":62},[36,126204,30791],{"class":42},[36,126206,125942],{"class":79},[36,126208,72167],{"class":50},[36,126210,126211],{"class":62}," -q",[36,126213,126214],{"class":50}," path",[36,126216,27486],{"class":62},[36,126218,126219],{"class":50}," \u002Fdev\u002FttyACM0",[36,126221,123],{"class":42},[36,126223,126224,126226,126228,126230,126232,126234,126236,126238,126240,126242,126244,126247],{"class":38,"line":54},[36,126225,125942],{"class":79},[36,126227,72167],{"class":50},[36,126229,126200],{"class":62},[36,126231,31585],{"class":62},[36,126233,30791],{"class":42},[36,126235,125942],{"class":79},[36,126237,72167],{"class":50},[36,126239,126211],{"class":62},[36,126241,126214],{"class":50},[36,126243,27486],{"class":62},[36,126245,126246],{"class":50}," \u002Fdev\u002FttyUSB0",[36,126248,123],{"class":42},[19,126250,126251],{},[3879,126252],{"alt":31,"src":126253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126255,126256],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126258,125671],{},[19,126260,125674,126261,126026],{},[33,126262,125677],{},[26,126264,126265],{"className":119635,"code":125681,"language":119637,"meta":31,"style":31},[33,126266,126267],{"__ignoreMap":31},[36,126268,126269,126271,126273],{"class":38,"line":39},[36,126270,26947],{"class":79},[36,126272,120922],{"class":50},[36,126274,125692],{"class":50},[26,126276,126278],{"className":119635,"code":126277,"language":119637,"meta":31,"style":31},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[33,126279,126280,126308,126334],{"__ignoreMap":31},[36,126281,126282,126284,126286,126289,126291,126293,126295,126297,126300,126303,126305],{"class":38,"line":39},[36,126283,125705],{"class":42},[36,126285,47],{"class":46},[36,126287,126288],{"class":50},"=\"ttyACM*\",",[36,126290,125713],{"class":79},[36,126292,125716],{"class":50},[36,126294,125745],{"class":79},[36,126296,2934],{"class":79},[36,126298,126299],{"class":50}," ATTRS{idProduct}==\"55d4\",",[36,126301,126302],{"class":50}," ATTRS{serial}==\"0001\",",[36,126304,125727],{"class":50},[36,126306,126307],{"class":50}," SYMLINK+=\"ttyACM_MCU\"\n",[36,126309,126310,126312,126314,126316,126318,126320,126322,126324,126326,126329,126331],{"class":38,"line":54},[36,126311,125705],{"class":42},[36,126313,47],{"class":46},[36,126315,126288],{"class":50},[36,126317,125713],{"class":79},[36,126319,125716],{"class":50},[36,126321,125745],{"class":79},[36,126323,2934],{"class":79},[36,126325,126299],{"class":50},[36,126327,126328],{"class":50}," ATTRS{serial}==\"0002\",",[36,126330,125727],{"class":50},[36,126332,126333],{"class":50}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,126335,126336,126338,126340,126342,126344,126346,126348,126350,126352,126354],{"class":38,"line":66},[36,126337,125705],{"class":42},[36,126339,47],{"class":46},[36,126341,125710],{"class":50},[36,126343,125713],{"class":79},[36,126345,125716],{"class":50},[36,126347,125745],{"class":79},[36,126349,2934],{"class":79},[36,126351,125750],{"class":50},[36,126353,125727],{"class":50},[36,126355,126356],{"class":50}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126358,125790],{},[19,126360,125793],{},[26,126362,126363],{"className":119635,"code":125796,"language":119637,"meta":31,"style":31},[33,126364,126365,126369,126379,126389,126393,126397,126407],{"__ignoreMap":31},[36,126366,126367],{"class":38,"line":39},[36,126368,125803],{"class":2621},[36,126370,126371,126373,126375,126377],{"class":38,"line":54},[36,126372,26947],{"class":79},[36,126374,122387],{"class":50},[36,126376,125812],{"class":50},[36,126378,125815],{"class":50},[36,126380,126381,126383,126385,126387],{"class":38,"line":66},[36,126382,26947],{"class":79},[36,126384,122387],{"class":50},[36,126386,125812],{"class":50},[36,126388,125826],{"class":50},[36,126390,126391],{"class":38,"line":73},[36,126392,70],{"emptyLinePlaceholder":69},[36,126394,126395],{"class":38,"line":86},[36,126396,125835],{"class":2621},[36,126398,126399,126401,126403,126405],{"class":38,"line":126},[36,126400,26947],{"class":79},[36,126402,125842],{"class":50},[36,126404,125845],{"class":50},[36,126406,125848],{"class":62},[36,126408,126409,126411,126413],{"class":38,"line":131},[36,126410,26947],{"class":79},[36,126412,125842],{"class":50},[36,126414,125857],{"class":50},[19,126416,126417,126418],{},"再重新插拔设备即可，或者 ",[667,126419,126420],{},"直接重启系统。",[19,126422,125863],{},[19,126424,125866,126425,126166],{},[33,126426,126165],{},[19,126428,126429],{},[3879,126430],{"alt":31,"src":126431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126433,126174],{},[19,126435,126436,126438],{},[667,126437,120303],{}," 一些设备可能没有串口号等。",[1752,126440,126442],{"id":126441},"_744-其他注意事项","7.4.4 其他注意事项",[19,126444,126445,126446,126448,126449,126452,126453,20781,126456,126459,126460,126462],{},"并非所有的USB设备端口号都是",[33,126447,125900],{},"的格式，比如Arduino的端口号可能是",[33,126450,126451],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,126454,126455],{},"videon",[33,126457,126458],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,126461,126455],{},"端口，绑定时需要关联的也是该接口。",[19,126464,126465,126466,126469,126470,126473,126474,126476,126477,126480,126481,126484,126485,126488,126489,126488,126492,126488,126495,676],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,126467,126468],{},"KERNEL==\"ttyUSB*\"","修改为",[33,126471,126472],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,126475,126468],{},"修改为类似于",[33,126478,126479],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,126482,126483],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,126486,126487],{},"video0","或",[33,126490,126491],{},"video2",[33,126493,126494],{},"video4",[33,126496,126497],{},"video6",[14,126499,126501],{"id":126500},"_75-挂载内网网页","7.5 挂载内网网页",[19,126503,126504],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126506,126507],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126509,126510],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126512,126513,126514],{},"Termux 下载地址（F-Droid）：",[2796,126515,126516],{"href":126516,"rel":126517},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26235],[19,126519,126520],{},"首先打开app后，先更新软件缓存：",[26,126522,126524],{"className":119635,"code":126523,"language":119637,"meta":31,"style":31},"pkg update\n",[33,126525,126526],{"__ignoreMap":31},[36,126527,126528,126531],{"class":38,"line":39},[36,126529,126530],{"class":79},"pkg",[36,126532,28612],{"class":50},[19,126534,126535],{},"然后换源",[26,126537,126539],{"className":119635,"code":126538,"language":119637,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,126540,126541],{"__ignoreMap":31},[36,126542,126543,126545,126548],{"class":38,"line":39},[36,126544,125413],{"class":79},[36,126546,126547],{"class":42}," $PREFIX",[36,126549,126550],{"class":50},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126552,126553],{},"将该文件内容替换为下面：",[26,126555,126557],{"className":119635,"code":126556,"language":119637,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,126558,126559],{"__ignoreMap":31},[36,126560,126561,126564,126567,126570],{"class":38,"line":39},[36,126562,126563],{"class":79},"deb",[36,126565,126566],{"class":50}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,126568,126569],{"class":50}," stable",[36,126571,126572],{"class":50}," main\n",[3557,126574,126575,126602],{},[653,126576,126577,126578,126580,126581],{},"如果你使用的是",[33,126579,125413],{},"编辑器：",[3557,126582,126583,126590,126596],{},[653,126584,126585,126586,126589],{},"按 ",[33,126587,126588],{},"Ctrl+O"," 保存文件。",[653,126591,126585,126592,126595],{},[33,126593,126594],{},"Enter"," 确认文件名。",[653,126597,126585,126598,126601],{},[33,126599,126600],{},"Ctrl+X"," 退出编辑器。",[653,126603,126577,126604,126580,126607],{},[33,126605,126606],{},"vim",[3557,126608,126609,126615],{},[653,126610,126585,126611,126614],{},[33,126612,126613],{},"Esc"," 退出编辑模式。",[653,126616,126617,126618,126620],{},"输入 ",[33,126619,121560],{}," 保存并退出。",[19,126622,126623],{},"接下来重新更新软件源：",[26,126625,126627],{"className":119635,"code":126626,"language":119637,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,126628,126629],{"__ignoreMap":31},[36,126630,126631,126633,126635,126637,126639],{"class":38,"line":39},[36,126632,126530],{"class":79},[36,126634,119686],{"class":50},[36,126636,28560],{"class":42},[36,126638,126530],{"class":79},[36,126640,119672],{"class":50},[19,126642,126643],{},"安装python：",[26,126645,126647],{"className":119635,"code":126646,"language":119637,"meta":31,"style":31},"pkg install python\n",[33,126648,126649],{"__ignoreMap":31},[36,126650,126651,126653,126655],{"class":38,"line":39},[36,126652,126530],{"class":79},[36,126654,26204],{"class":50},[36,126656,126657],{"class":50}," python\n",[19,126659,126660,28843],{},[667,126661,126662],{},"通过Termux访问设备存储",[19,126664,126665],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,126667,126669],{"className":119635,"code":126668,"language":119637,"meta":31,"style":31},"termux-setup-storage\n",[33,126670,126671],{"__ignoreMap":31},[36,126672,126673],{"class":38,"line":39},[36,126674,126668],{"class":79},[650,126676,126677],{},[653,126678,126679,28843,126682],{},[667,126680,126681],{},"进入HTML文件所在的目录",[650,126683,126684],{},[653,126685,126686,126687,126689],{},"使用",[33,126688,103616],{},"命令进入HTML文件所在的目录：",[26,126691,126693],{"className":119635,"code":126692,"language":119637,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,126694,126695],{"__ignoreMap":31},[36,126696,126697,126699],{"class":38,"line":39},[36,126698,103616],{"class":62},[36,126700,126701],{"class":50}," ~\u002Fyour_html_folder\n",[650,126703,126704],{"start":54},[653,126705,126706,28843,126709,126714,126731],{},[667,126707,126708],{},"启动Python HTTP服务器",[650,126710,126711],{},[653,126712,126713],{},"运行以下命令启动一个简单的HTTP服务器：",[26,126715,126717],{"className":119635,"code":126716,"language":119637,"meta":31,"style":31},"python -m http.server 8000\n",[33,126718,126719],{"__ignoreMap":31},[36,126720,126721,126723,126725,126728],{"class":38,"line":39},[36,126722,30],{"class":79},[36,126724,103223],{"class":62},[36,126726,126727],{"class":50}," http.server",[36,126729,126730],{"class":62}," 8000\n",[650,126732,126733],{"start":66},[653,126734,126735,126736,126739],{},"这会在端口",[33,126737,126738],{},"8000","上启动一个Web服务器。",[3557,126741,126742],{},[653,126743,126744],{},"启动服务器后，Termux会显示日志信息，例如：",[26,126746,126748],{"className":123155,"code":126747,"language":123157,"meta":123158,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,126749,126750],{"__ignoreMap":31},[36,126751,126752],{"class":38,"line":39},[36,126753,126747],{},[3557,126755,126756],{},[653,126757,126758],{},"这表示服务器已成功启动。",[19,126760,126761],{},[667,126762,126763],{},"在浏览器中访问HTML文件",[650,126765,126766],{},[653,126767,126768,28843,126771,126776],{},[667,126769,126770],{},"在同一设备上访问",[650,126772,126773],{},[653,126774,126775],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,126777,126780],{"className":126778,"code":126779,"language":74009,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,126781,126782],{"__ignoreMap":31},[36,126783,126784,126787],{"class":38,"line":39},[36,126785,126786],{"class":42},"http:",[36,126788,126789],{"class":2621},"\u002F\u002Flocalhost:8000\n",[3557,126791,126792],{},[653,126793,126794,126795,126798],{},"如果HTML文件中有",[33,126796,126797],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126800,126802],{"id":126801},"_76-linux重点知识","7.6 Linux重点知识",[1752,126804,126806],{"id":126805},"_761-关于点的说明","7.6.1 关于点的说明",[19,126808,126809],{},[3879,126810],{"alt":31,"src":126811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126813,126814],{},"一点本目录，两点上目录",[1752,126816,126818],{"id":126817},"_762-目录","7.6.2 目录",[24368,126820,126822],{"id":126821},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126824,126825],{},[667,126826,126827],{},"\u002Fboot:",[19,126829,126830],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126832,126833],{},[667,126834,126835],{},"\u002Fetc:",[19,126837,126838],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126840,126841],{},[667,126842,126843],{},"\u002Flib：",[19,126845,126846],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126848,126849],{},[667,126850,126851],{},"\u002Fsys:",[19,126853,126854],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24368,126856,126858],{"id":126857},"_7622-指令集合","7.6.2.2 指令集合",[19,126860,126861],{},[667,126862,126863],{},"\u002Fbin:",[19,126865,126866],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126868,126869],{},[667,126870,126871],{},"\u002Fsbin:",[19,126873,126874],{},"只有系统管理员才能使用的程序和指令",[24368,126876,126878],{"id":126877},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126880,126881],{},[667,126882,126883],{},"\u002Fdev:",[19,126885,126886],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126888,126889],{},[667,126890,126891],{},"\u002Fmedia:",[19,126893,126894],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126896,126897],{},[667,126898,126899],{},"\u002Fmnt:",[19,126901,126902],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24368,126904,126906],{"id":126905},"_7624-临时文件","7.6.2.4 临时文件",[19,126908,126909],{},[667,126910,126911],{},"\u002Frun:",[19,126913,126914],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126916,126917],{},[667,126918,126919],{},"\u002Flost+found:",[19,126921,126922],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126924,126925],{},[667,126926,126927],{},"\u002Ftmp:",[19,126929,126930],{},"这个目录是用来存放一些临时文件的",[24368,126932,126934],{"id":126933},"_7625-账户","7.6.2.5 账户",[19,126936,126937],{},[667,126938,126939],{},"\u002Froot：",[19,126941,126942],{},"系统管理员的用户主目录",[19,126944,126945,28843],{},[667,126946,126947],{},"\u002Fhome",[19,126949,126950],{},"用户的主目录，以用户的账号命名的",[19,126952,126953,28843],{},[667,126954,126955],{},"\u002Fusr",[19,126957,126958],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126960,126961],{},[667,126962,126963],{},"\u002Fusr\u002Fbin：",[19,126965,126966],{},"系统用户使用的应用程序与指令",[19,126968,126969],{},[667,126970,126971],{},"\u002Fusr\u002Fsbin：",[19,126973,126974],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126976,126977],{},[667,126978,126979],{},"\u002Fusr\u002Fsrc：",[19,126981,126982],{},"内核源代码默认的放置目录",[24368,126984,126986],{"id":126985},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126988,126989],{},[667,126990,126991],{},"\u002Fvar：",[19,126993,126994],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126996,126997],{},[667,126998,126999],{},"\u002Fproc:",[19,127001,127002,127003,127006],{},"管理 ",[667,127004,127005],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24368,127008,127010],{"id":127009},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127012,127013],{},[667,127014,127015],{},"\u002Fopt:",[19,127017,127018],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127020,127021],{},[667,127022,127023],{},"\u002Fsrv:",[19,127025,127026],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1752,127028,127030],{"id":127029},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127032,127033],{},[3879,127034],{"alt":31,"src":127035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127037,127038],{},"windows-->linux:",[19,127040,127041],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127043,127044],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127046,127047],{},"linux传输文件到windows",[19,127049,127050],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1752,127052,127054],{"id":127053},"_764-易忘知识","7.6.4 易忘知识",[19,127056,127057],{},"操作系统内核查看",[26,127059,127060],{"className":119635,"code":123629,"language":119637,"meta":31,"style":31},[33,127061,127062],{"__ignoreMap":31},[36,127063,127064,127066],{"class":38,"line":39},[36,127065,72550],{"class":79},[36,127067,123638],{"class":62},[19,127069,127070],{},[3879,127071],{"alt":31,"src":127072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127074,127075],{},[3879,127076],{"alt":31,"src":127077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,127079,127081],{"className":119635,"code":127080,"language":119637,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,127082,127083,127095],{"__ignoreMap":31},[36,127084,127085,127087,127090,127093],{"class":38,"line":39},[36,127086,123846],{"class":79},[36,127088,127089],{"class":50}," mvtest",[36,127091,127092],{"class":50}," mvtest2",[36,127094,5059],{"class":42},[36,127096,127097],{"class":38,"line":54},[36,127098,127099],{"class":79},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127101,127102],{},[3879,127103],{"alt":31,"src":127104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127106,127107],{},[3879,127108],{"alt":31,"src":127109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127111,127112,127113,127116],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,127114,127115],{},"du -a"," 可以快速查看磁盘使用细节。",[1752,127118,127120],{"id":127119},"_765-vim","7.6.5 Vim",[19,127122,127123],{},[3879,127124],{"alt":31,"src":127125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127127,127128],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127130,127131],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127133,127134],{},[667,127135,127136],{},"1.命令模式：",[19,127138,127139],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127141,127142],{},"x 删除当前光标所在处的字符",[19,127144,127145],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127147,127148],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127150,127151],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127153,127154],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127156,127157],{},"dd 剪切当前行",[19,127159,127160],{},"yy 复制当前行",[19,127162,127163],{},"p 粘贴剪贴板内容到光标下方",[19,127165,127166],{},"P 粘贴剪贴板内容到光标上方",[19,127168,127169],{},"u 撤销上一次操作",[19,127171,127172],{},"ctrl+r 重做上一次操作",[19,127174,127175,127177],{},[3349,127176],{}," 保存文件",[19,127179,127180,127182],{},[3200,127181],{}," 退出Vim编辑器",[19,127184,127185,127187],{},[3200,127186],{},"! 强制退出Vim编辑器，不保存修改",[19,127189,127190],{},[667,127191,127192],{},"2.输入模式：",[19,127194,127195],{},[3879,127196],{"alt":31,"src":127197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127199,127200],{},[667,127201,127202],{},"3.底线命令模式：",[19,127204,127205],{},[3879,127206],{"alt":31,"src":127207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127209,127210],{},"按下esc可以退出底线命令模式",[1752,127212,127214],{"id":127213},"_766-apt","7.6.6 apt",[19,127216,127217],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1752,127219,127221],{"id":127220},"_767-home与root的区别","7.6.7 home与root的区别",[19,127223,127224],{},[3879,127225],{"alt":31,"src":127226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127228,127229],{},[3879,127230],{"alt":31,"src":127231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127233,127234],{},[3879,127235],{"alt":31,"src":127236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127238,127239],{},[3879,127240],{"alt":31,"src":127241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1752,127243,127245],{"id":127244},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127247,127248],{},[2796,127249,127250],{"href":127250,"rel":127251},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26235],[650,127253,127254,127257],{},[653,127255,127256],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[653,127258,127259],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127261,127262],{},[3879,127263],{"alt":31,"src":127264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127266,127267],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127269,127270],{},[3879,127271],{"alt":31,"src":127272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,127274,127276],{"className":123155,"code":127275,"language":123157,"meta":123158,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,127277,127278,127283],{"__ignoreMap":31},[36,127279,127280],{"class":38,"line":39},[36,127281,127282],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,127284,127285],{"class":38,"line":54},[36,127286,127287],{},".\u002Fpycharm.sh\n",[19,127289,127290],{},"3️⃣创建.desktop文件",[19,127292,127293],{},[667,127294,127295],{},"原理：",[3557,127297,127298,127308],{},[653,127299,127300,127301,127307],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[667,127302,127303,127306],{},[33,127304,127305],{},".desktop"," 文件"," 来识别应用。",[653,127309,127310,127312,127313],{},[33,127311,127305],{}," 文件相当于一个“应用注册表”，告诉系统：",[3557,127314,127315,127318,127321,127324,127327],{},[653,127316,127317],{},"应用名字（Name）",[653,127319,127320],{},"图标（Icon）",[653,127322,127323],{},"执行命令（Exec）",[653,127325,127326],{},"分类（Categories）",[653,127328,127329],{},"是否需要终端（Terminal）",[26,127331,127333],{"className":123155,"code":127332,"language":123157,"meta":123158,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,127334,127335,127340],{"__ignoreMap":31},[36,127336,127337],{"class":38,"line":39},[36,127338,127339],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,127341,127342],{"class":38,"line":54},[36,127343,127344],{},"nano pycharm.desktop\n",[19,127346,127347],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,127349,127351],{"className":123155,"code":127350,"language":123157,"meta":123158,"style":31},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[33,127352,127353,127358,127363,127368,127373,127378,127383,127388,127393,127398],{"__ignoreMap":31},[36,127354,127355],{"class":38,"line":39},[36,127356,127357],{},"[Desktop Entry]\n",[36,127359,127360],{"class":38,"line":54},[36,127361,127362],{},"Version=1.0\n",[36,127364,127365],{"class":38,"line":66},[36,127366,127367],{},"Type=Application\n",[36,127369,127370],{"class":38,"line":73},[36,127371,127372],{},"Name=PyCharm\n",[36,127374,127375],{"class":38,"line":86},[36,127376,127377],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,127379,127380],{"class":38,"line":126},[36,127381,127382],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,127384,127385],{"class":38,"line":131},[36,127386,127387],{},"Comment=JetBrains PyCharm IDE\n",[36,127389,127390],{"class":38,"line":225},[36,127391,127392],{},"Categories=Development;IDE;\n",[36,127394,127395],{"class":38,"line":235},[36,127396,127397],{},"Terminal=false\n",[36,127399,127400],{"class":38,"line":377},[36,127401,127402],{},"StartupWMClass=jetbrains-pycharm\n",[3557,127404,127405,127411,127417,127423],{},[653,127406,127407,127410],{},[33,127408,127409],{},"Exec"," → 点击图标时执行的命令",[653,127412,127413,127416],{},[33,127414,127415],{},"Icon"," → 显示在菜单和桌面上的图标",[653,127418,127419,127422],{},[33,127420,127421],{},"Terminal=false"," → 不打开终端",[653,127424,127425,127428],{},[33,127426,127427],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127430,127431,127432],"blockquote",{},[19,127433,127434,127435,127437,127438],{},"可以理解成 ",[33,127436,127305],{}," 文件是 Linux 的 ",[667,127439,127440],{},"快捷方式配置文件",[19,127442,127443],{},"4️⃣设置可执行权限",[26,127445,127447],{"className":123155,"code":127446,"language":123157,"meta":123158,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,127448,127449],{"__ignoreMap":31},[36,127450,127451],{"class":38,"line":39},[36,127452,127446],{},[19,127454,127455],{},"5️⃣桌面图标启动的话如下：",[26,127457,127459],{"className":123155,"code":127458,"language":123157,"meta":123158,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,127460,127461,127466],{"__ignoreMap":31},[36,127462,127463],{"class":38,"line":39},[36,127464,127465],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,127467,127468],{"class":38,"line":54},[36,127469,127470],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[650,127472,127473],{"start":66},[653,127474,127475],{},"下载Appimage文件实现软件的安装",[19,127477,127478],{},"1️⃣先下载appimage",[19,127480,127481],{},[2796,127482,127483],{"href":127483,"rel":127484},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26235],[19,127486,127487],{},[3879,127488],{"alt":31,"src":127489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127491,127492],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127494,127495],{},[3879,127496],{"alt":31,"src":127497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127499,127500],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127502,127503],{},[3879,127504],{"alt":31,"src":127505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127507,127508],{},[3879,127509],{"alt":31,"src":127510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127512,127513,127514,127517],{},"3️⃣给他们放在",[33,127515,127516],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127519,127520],{},"4️⃣给软件执行权限",[26,127522,127524],{"className":123155,"code":127523,"language":123157,"meta":123158,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,127525,127526,127531],{"__ignoreMap":31},[36,127527,127528],{"class":38,"line":39},[36,127529,127530],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,127532,127533],{"class":38,"line":54},[36,127534,127535],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127537,127538],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,127540,127542],{"className":119635,"code":127541,"language":119637,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,127543,127544,127551,127558,127564],{"__ignoreMap":31},[36,127545,127546,127548],{"class":38,"line":39},[36,127547,103616],{"class":62},[36,127549,127550],{"class":50}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,127552,127553,127555],{"class":38,"line":54},[36,127554,103623],{"class":79},[36,127556,127557],{"class":50}," .\u002Fqqmusic.desktop\n",[36,127559,127560,127562],{"class":38,"line":66},[36,127561,126606],{"class":79},[36,127563,127557],{"class":50},[36,127565,127566,127568,127570,127572],{"class":38,"line":73},[36,127567,26947],{"class":79},[36,127569,26950],{"class":50},[36,127571,125472],{"class":50},[36,127573,127557],{"class":50},[19,127575,127576,127578],{},[33,127577,103623],{},"：一个 Linux 命令，主要功能是：",[3557,127580,127581,127584],{},[653,127582,127583],{},"如果文件不存在，就创建一个新的空文件",[653,127585,127586],{},"如果文件已存在，就更新该文件的最后修改时间",[26,127588,127590],{"className":123155,"code":127589,"language":123157,"meta":123158,"style":31},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[33,127591,127592,127596,127601,127606,127611,127615,127620],{"__ignoreMap":31},[36,127593,127594],{"class":38,"line":39},[36,127595,127357],{},[36,127597,127598],{"class":38,"line":54},[36,127599,127600],{},"Name=QQ音乐\n",[36,127602,127603],{"class":38,"line":66},[36,127604,127605],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,127607,127608],{"class":38,"line":73},[36,127609,127610],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,127612,127613],{"class":38,"line":86},[36,127614,127367],{},[36,127616,127617],{"class":38,"line":126},[36,127618,127619],{},"Categories=Audio;Music;Player;\n",[36,127621,127622],{"class":38,"line":131},[36,127623,127624],{},"Comment=QQ Music Client for Linux\n",[19,127626,127627],{},"将文件复制进去",[19,127629,127630],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127632,127633],{},[3879,127634],{"alt":31,"src":127635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127637,127638],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127640,127641],{},[3879,127642],{"alt":31,"src":127643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127645,127646,127647,127650,127651,127654],{},"如果你用的不是KDE，那么也可以直接修改",[33,127648,127649],{},"qqmuic.desktop","：在exec的末尾加上",[33,127652,127653],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,127656,127658],{"className":123155,"code":127657,"language":123157,"meta":123158,"style":31},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[33,127659,127660,127664,127668,127673,127677,127681,127685],{"__ignoreMap":31},[36,127661,127662],{"class":38,"line":39},[36,127663,127357],{},[36,127665,127666],{"class":38,"line":54},[36,127667,127600],{},[36,127669,127670],{"class":38,"line":66},[36,127671,127672],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,127674,127675],{"class":38,"line":73},[36,127676,127610],{},[36,127678,127679],{"class":38,"line":86},[36,127680,127367],{},[36,127682,127683],{"class":38,"line":126},[36,127684,127619],{},[36,127686,127687],{"class":38,"line":131},[36,127688,127624],{},[19,127690,127691],{},[3879,127692],{"alt":31,"src":127693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127695,127696],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,127698,127700],{"className":123155,"code":127699,"language":123157,"meta":123158,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,127701,127702],{"__ignoreMap":31},[36,127703,127704],{"class":38,"line":39},[36,127705,127699],{},[650,127707,127708],{"start":73},[653,127709,127710],{},"去Flathub上安装软件",[19,127712,127713],{},[2796,127714,127715],{"href":127715,"rel":127716},"https:\u002F\u002Fflathub.org\u002F",[26235],[19,127718,127719],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127721,127722],{},[3879,127723],{"alt":31,"src":127724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,127726,127728],{"className":123155,"code":127727,"language":123157,"meta":123158,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,127729,127730],{"__ignoreMap":31},[36,127731,127732],{"class":38,"line":39},[36,127733,127727],{},[19,127735,127736],{},[3879,127737],{"alt":31,"src":127738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127740,127741],{},"2️⃣运行软件",[19,127743,127744],{},"a.官方方式：",[19,127746,127747],{},[3879,127748],{"alt":31,"src":127749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,127751,127752],{"className":123155,"code":127727,"language":123157,"meta":123158,"style":31},[33,127753,127754],{"__ignoreMap":31},[36,127755,127756],{"class":38,"line":39},[36,127757,127727],{},[19,127759,127760],{},"b.当普通软件运行：",[19,127762,127763],{},[3879,127764],{"alt":31,"src":127765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127767,127768],{},[3879,127769],{"alt":31,"src":127770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2467,127772,127773],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":127775},[127776,127777,127782,127783,127789,127790],{"id":124508,"depth":54,"text":124509},{"id":124850,"depth":54,"text":124851,"children":127778},[127779,127780,127781],{"id":124854,"depth":66,"text":124855},{"id":124921,"depth":66,"text":124922},{"id":125182,"depth":66,"text":125183},{"id":125335,"depth":54,"text":125336},{"id":125573,"depth":54,"text":125574,"children":127784},[127785,127786,127787,127788],{"id":125625,"depth":66,"text":125626},{"id":125911,"depth":66,"text":125912},{"id":126182,"depth":66,"text":126183},{"id":126441,"depth":66,"text":126442},{"id":126500,"depth":54,"text":126501},{"id":126801,"depth":54,"text":126802,"children":127791},[127792,127793,127794,127795,127796,127797,127798,127799],{"id":126805,"depth":66,"text":126806},{"id":126817,"depth":66,"text":126818},{"id":127029,"depth":66,"text":127030},{"id":127053,"depth":66,"text":127054},{"id":127119,"depth":66,"text":127120},{"id":127213,"depth":66,"text":127214},{"id":127220,"depth":66,"text":127221},{"id":127244,"depth":66,"text":127245},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124500,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127806,"title":127807,"body":127808,"description":2493,"extension":2494,"meta":127812,"navigation":69,"path":127813,"seo":127814,"stem":127815,"__hash__":127816},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127809,"toc":127810},[],{"title":31,"searchDepth":54,"depth":54,"links":127811},[],{"category":32632},"\u002Fwiki\u002F2025-01-27-linux",{"title":127807,"description":2493},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127818,"title":127819,"body":127820,"description":127824,"extension":2494,"meta":128215,"navigation":69,"path":128216,"seo":128217,"stem":128218,"__hash__":128219},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127821,"toc":128213},[127822,127825,127829,127846,127849,127902,127906,127908,127948,127957,127961,127964,128205,128210],[19,127823,127824],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127826,127828],{"id":127827},"_1ubuntu环境配置","1.Ubuntu环境配置",[650,127830,127831,127834,127837,127840,127843],{},[653,127832,127833],{},"ubuntu环境换源",[653,127835,127836],{},"安装cuda",[653,127838,127839],{},"安装miniconda",[653,127841,127842],{},"安装pytorch",[653,127844,127845],{},"安装genesis",[19,127847,127848],{},"参考链接：",[26,127850,127852],{"className":26192,"code":127851,"language":26194,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,127853,127854],{"__ignoreMap":31},[36,127855,127856,127859,127862,127865,127867,127870,127873,127875,127878,127881,127883,127886,127889,127891,127894,127897,127899],{"class":38,"line":39},[36,127857,127858],{"class":79},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,127860,127861],{"class":50},"=blogdetail",[36,127863,127864],{"class":42},"&sharetype",[36,127866,47],{"class":46},[36,127868,127869],{"class":50},"blogdetail",[36,127871,127872],{"class":42},"&sharerId",[36,127874,47],{"class":46},[36,127876,127877],{"class":50},"144728092",[36,127879,127880],{"class":42},"&sharerefer",[36,127882,47],{"class":46},[36,127884,127885],{"class":50},"PC",[36,127887,127888],{"class":42},"&sharesource",[36,127890,47],{"class":46},[36,127892,127893],{"class":50},"qq_69379513",[36,127895,127896],{"class":42},"&sharefrom",[36,127898,47],{"class":46},[36,127900,127901],{"class":50},"from_link\n",[10,127903,127905],{"id":127904},"_2genesis-报错issue","2.Genesis 报错issue",[19,127907,127848],{},[26,127909,127910],{"className":26192,"code":127851,"language":26194,"meta":31,"style":31},[33,127911,127912],{"__ignoreMap":31},[36,127913,127914,127916,127918,127920,127922,127924,127926,127928,127930,127932,127934,127936,127938,127940,127942,127944,127946],{"class":38,"line":39},[36,127915,127858],{"class":79},[36,127917,127861],{"class":50},[36,127919,127864],{"class":42},[36,127921,47],{"class":46},[36,127923,127869],{"class":50},[36,127925,127872],{"class":42},[36,127927,47],{"class":46},[36,127929,127877],{"class":50},[36,127931,127880],{"class":42},[36,127933,47],{"class":46},[36,127935,127885],{"class":50},[36,127937,127888],{"class":42},[36,127939,47],{"class":46},[36,127941,127893],{"class":50},[36,127943,127896],{"class":42},[36,127945,47],{"class":46},[36,127947,127901],{"class":50},[26,127949,127951],{"className":26192,"code":127950,"language":26194,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,127952,127953],{"__ignoreMap":31},[36,127954,127955],{"class":38,"line":39},[36,127956,127950],{"class":79},[10,127958,127960],{"id":127959},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127962,127963],{},"hello_robot.py",[26,127965,127967],{"className":28,"code":127966,"language":30,"meta":31,"style":31},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[33,127968,127969,127975,127990,127994,128006,128018,128022,128035,128039,128058,128068,128078,128092,128096,128100,128105,128109,128119,128126,128140,128147,128157,128162,128166,128184,128189,128193,128200],{"__ignoreMap":31},[36,127970,127971,127973],{"class":38,"line":39},[36,127972,1943],{"class":46},[36,127974,47654],{"class":42},[36,127976,127977,127980,127983,127985,127987],{"class":38,"line":54},[36,127978,127979],{"class":42},"os.environ[",[36,127981,127982],{"class":50},"'PYOPENGL_PLATFORM'",[36,127984,6826],{"class":42},[36,127986,47],{"class":46},[36,127988,127989],{"class":50}," 'glx'\n",[36,127991,127992],{"class":38,"line":66},[36,127993,70],{"emptyLinePlaceholder":69},[36,127995,127996,127998,128001,128003],{"class":38,"line":73},[36,127997,1943],{"class":46},[36,127999,128000],{"class":42}," genesis ",[36,128002,33737],{"class":46},[36,128004,128005],{"class":42}," gs\n",[36,128007,128008,128010,128013,128015],{"class":38,"line":86},[36,128009,1937],{"class":46},[36,128011,128012],{"class":42}," pynput ",[36,128014,1943],{"class":46},[36,128016,128017],{"class":42}," keyboard\n",[36,128019,128020],{"class":38,"line":126},[36,128021,70],{"emptyLinePlaceholder":69},[36,128023,128024,128027,128030,128032],{"class":38,"line":131},[36,128025,128026],{"class":42},"gs.init(",[36,128028,128029],{"class":7598},"backend",[36,128031,47],{"class":46},[36,128033,128034],{"class":42},"gs.gpu)\n",[36,128036,128037],{"class":38,"line":225},[36,128038,70],{"emptyLinePlaceholder":69},[36,128040,128041,128044,128046,128049,128052,128054,128056],{"class":38,"line":235},[36,128042,128043],{"class":42},"scene ",[36,128045,47],{"class":46},[36,128047,128048],{"class":42}," gs.Scene(",[36,128050,128051],{"class":7598},"show_viewer",[36,128053,47],{"class":46},[36,128055,33830],{"class":62},[36,128057,123],{"class":42},[36,128059,128060,128063,128065],{"class":38,"line":377},[36,128061,128062],{"class":42},"plane ",[36,128064,47],{"class":46},[36,128066,128067],{"class":42}," scene.add_entity(gs.morphs.Plane())\n",[36,128069,128070,128073,128075],{"class":38,"line":617},[36,128071,128072],{"class":42},"franka ",[36,128074,47],{"class":46},[36,128076,128077],{"class":42}," scene.add_entity(\n",[36,128079,128080,128083,128085,128087,128090],{"class":38,"line":643},[36,128081,128082],{"class":42},"    gs.morphs.MJCF(",[36,128084,47703],{"class":7598},[36,128086,47],{"class":46},[36,128088,128089],{"class":50},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,128091,40398],{"class":42},[36,128093,128094],{"class":38,"line":921},[36,128095,123],{"class":42},[36,128097,128098],{"class":38,"line":934},[36,128099,70],{"emptyLinePlaceholder":69},[36,128101,128102],{"class":38,"line":939},[36,128103,128104],{"class":42},"scene.build()\n",[36,128106,128107],{"class":38,"line":949},[36,128108,70],{"emptyLinePlaceholder":69},[36,128110,128111,128113,128116],{"class":38,"line":962},[36,128112,76],{"class":46},[36,128114,128115],{"class":79}," on_press",[36,128117,128118],{"class":42},"(key):\n",[36,128120,128121,128124],{"class":38,"line":974},[36,128122,128123],{"class":46},"    try",[36,128125,153],{"class":42},[36,128127,128128,128130,128133,128135,128138],{"class":38,"line":979},[36,128129,890],{"class":46},[36,128131,128132],{"class":42}," key.char ",[36,128134,5334],{"class":46},[36,128136,128137],{"class":50}," 'q'",[36,128139,153],{"class":42},[36,128141,128142,128144],{"class":38,"line":994},[36,128143,18105],{"class":46},[36,128145,128146],{"class":62}," False\n",[36,128148,128149,128152,128155],{"class":38,"line":1006},[36,128150,128151],{"class":46},"    except",[36,128153,128154],{"class":62}," AttributeError",[36,128156,153],{"class":42},[36,128158,128159],{"class":38,"line":1011},[36,128160,128161],{"class":46},"        pass\n",[36,128163,128164],{"class":38,"line":1023},[36,128165,70],{"emptyLinePlaceholder":69},[36,128167,128168,128171,128173,128176,128179,128181],{"class":38,"line":1028},[36,128169,128170],{"class":42},"listener ",[36,128172,47],{"class":46},[36,128174,128175],{"class":42}," keyboard.Listener(",[36,128177,128178],{"class":7598},"on_press",[36,128180,47],{"class":46},[36,128182,128183],{"class":42},"on_press)\n",[36,128185,128186],{"class":38,"line":1033},[36,128187,128188],{"class":42},"listener.start()\n",[36,128190,128191],{"class":38,"line":1053},[36,128192,70],{"emptyLinePlaceholder":69},[36,128194,128195,128197],{"class":38,"line":1064},[36,128196,111002],{"class":46},[36,128198,128199],{"class":42}," listener.running:\n",[36,128201,128202],{"class":38,"line":1075},[36,128203,128204],{"class":42},"    scene.step()\n",[19,128206,128207],{},[3879,128208],{"alt":31,"src":128209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2467,128211,128212],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":128214},[],{"category":25748},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127819,"description":127824},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128221,"title":128222,"body":128223,"description":2493,"extension":2494,"meta":128238,"navigation":69,"path":128239,"seo":128240,"stem":128241,"__hash__":128242},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128224,"toc":128235},[128225,128228,128232],[10,128226,128222],{"id":128227},"_1-基础知识",[14,128229,128231],{"id":128230},"_11-js的组成","1.1 js的组成",[19,128233,128234],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":54,"depth":54,"links":128236},[128237],{"id":128230,"depth":54,"text":128231},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128222,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128244,"title":128245,"body":128246,"description":2493,"extension":2494,"meta":128385,"navigation":69,"path":128386,"seo":128387,"stem":128388,"__hash__":128389},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128247,"toc":128373},[128248,128251,128255,128258,128262,128272,128276,128279,128282,128285,128289,128296,128302,128306,128312,128323,128327,128330,128334,128337,128341,128344,128348,128351,128355,128358,128361,128364,128367,128370],[10,128249,128245],{"id":128250},"_2-vscode必备内容",[14,128252,128254],{"id":128253},"_21-标签分类","2.1 标签分类",[19,128256,128257],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128259,128261],{"id":128260},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128263,128264,128265,128267,128268,128271],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,128266,2784],{}," 然后按 ",[33,128269,128270],{},"Tab","，快速自动生成基本结构。",[14,128273,128275],{"id":128274},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128277,128278],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128280,128281],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128283,128284],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128286,128288],{"id":128287},"_24-视图缩放","2.4 视图缩放",[19,128290,128291,128292,128295],{},"缩放视图 ",[33,128293,128294],{},"ctrl+"," 可实现代码增大。",[19,128297,128298,128301],{},[33,128299,128300],{},"ctrl-"," 可实现代码减小。",[14,128303,128305],{"id":128304},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128307,128308,128309,676],{},"VSCode 新建文件快捷键为 ",[33,128310,128311],{},"ctrl+N",[19,128313,128314,128315,128318,128319,128322],{},"保存快捷键为 ",[33,128316,128317],{},"ctrl+S","，将文本保存为 ",[33,128320,128321],{},".html"," 文件。",[14,128324,128326],{"id":128325},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128328,128329],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128331,128333],{"id":128332},"_27-vscode-icons","2.7 vscode-icons",[19,128335,128336],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128338,128340],{"id":128339},"_28-easy-less","2.8 Easy LESS",[19,128342,128343],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128345,128347],{"id":128346},"_29-会了吧插件","2.9 会了吧插件",[19,128349,128350],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128352,128354],{"id":128353},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128356,128357],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128359,128360],{},"②选定多个相同的单词:ctrl+D",[19,128362,128363],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128365,128366],{},"④全局替换某些单词:ctrl+h",[19,128368,128369],{},"⑤快速定位到某一行:ctrl+g",[19,128371,128372],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":54,"depth":54,"links":128374},[128375,128376,128377,128378,128379,128380,128381,128382,128383,128384],{"id":128253,"depth":54,"text":128254},{"id":128260,"depth":54,"text":128261},{"id":128274,"depth":54,"text":128275},{"id":128287,"depth":54,"text":128288},{"id":128304,"depth":54,"text":128305},{"id":128325,"depth":54,"text":128326},{"id":128332,"depth":54,"text":128333},{"id":128339,"depth":54,"text":128340},{"id":128346,"depth":54,"text":128347},{"id":128353,"depth":54,"text":128354},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128245,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128391,"title":128392,"body":128393,"description":2493,"extension":2494,"meta":128552,"navigation":69,"path":128553,"seo":128554,"stem":128555,"__hash__":128556},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128394,"toc":128544},[128395,128398,128402,128412,128418,128424,128428,128437,128441,128446,128449,128452,128456,128459,128469,128478,128487,128496,128506,128513,128518,128523,128536],[10,128396,128392],{"id":128397},"_3-html文本与容器标签",[14,128399,128401],{"id":128400},"_31-标题标签","3.1 标题标签",[19,128403,128404,128407,128408,128411],{},[33,128405,128406],{},"\u003Ch1>","我是一级标签",[33,128409,128410],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128413,128414,128407,128416],{},[33,128415,128406],{},[33,128417,128410],{},[19,128419,125674,128420,128423],{},[33,128421,128422],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128425,128427],{"id":128426},"_32-段落标签","3.2 段落标签",[19,128429,128430,128433,128434],{},[33,128431,128432],{},"\u003Cp>","....",[33,128435,128436],{},"\u003C\u002Fp>",[14,128438,128440],{"id":128439},"_33-换行标签","3.3 换行标签",[19,128442,128443],{},[33,128444,128445],{},"\u003Cbr \u002F>",[19,128447,128448],{},"具有强制换行的作用",[19,128450,128451],{},"单标签",[14,128453,128455],{"id":128454},"_34-文本格式化标签","3.4 文本格式化标签",[19,128457,128458],{},"提供粗体、斜体和下划线等效果",[19,128460,128461,128462,84881,128465,128468],{},"加粗：",[33,128463,128464],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,128466,128467],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128470,128471,128472,84881,128475,128468],{},"斜体：",[33,128473,128474],{},"\u003Cem>...\u003C\u002Fem>",[33,128476,128477],{},"\u003Ci>...\u003C\u002Fi>",[19,128479,128480,128481,84881,128484,128468],{},"删除线：",[33,128482,128483],{},"\u003Cdel>...\u003C\u002Fdel>",[33,128485,128486],{},"\u003Cs>...\u003C\u002Fs>",[19,128488,128489,128490,84881,128493,128468],{},"下划线：",[33,128491,128492],{},"\u003Cins>...\u003C\u002Fins>",[33,128494,128495],{},"\u003Cu>...\u003C\u002Fu>",[14,128497,128499,128500,20781,128503,105033],{"id":128498},"_35-div和span标签","3.5 ",[33,128501,128502],{},"\u003Cdiv>",[33,128504,128505],{},"\u003Cspan>",[19,128507,128508,302,128510,128512],{},[33,128509,128502],{},[33,128511,128505],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128514,128515],{},[33,128516,128517],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128519,128520],{},[33,128521,128522],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128524,128525,128526,128528,128529,128531,128532,128535],{},"两者特点：①",[33,128527,128502],{}," 标签用来布局，但一行通常只放一个 ",[33,128530,128502],{},"。可以理解为一个大盒子，独占一行，在 ",[33,128533,128534],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128537,79594,128538,128540,128541,128543],{},[33,128539,128505],{}," 标签也可用于布局，一行可以放多个 ",[33,128542,128505],{},"，可理解为小盒子。",{"title":31,"searchDepth":54,"depth":54,"links":128545},[128546,128547,128548,128549,128550],{"id":128400,"depth":54,"text":128401},{"id":128426,"depth":54,"text":128427},{"id":128439,"depth":54,"text":128440},{"id":128454,"depth":54,"text":128455},{"id":128498,"depth":54,"text":128551},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128392,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128558,"title":128559,"body":128560,"description":2493,"extension":2494,"meta":128757,"navigation":69,"path":128758,"seo":128759,"stem":128760,"__hash__":128761},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128561,"toc":128749},[128562,128565,128569,128572,128578,128585,128591,128597,128600,128603,128606,128609,128612,128615,128618,128622,128625,128628,128631,128637,128643,128649,128656,128660,128666,128672,128675,128678,128684,128690,128696,128699,128702,128706,128709,128719,128725,128729,128738,128742,128745],[10,128563,128559],{"id":128564},"_4-html图像与链接",[14,128566,128568],{"id":128567},"_41-图像标签","4.1 图像标签",[19,128570,128571],{},"（1）标签",[19,128573,128574,128577],{},[33,128575,128576],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128579,128580,128581,128584],{},"src是",[33,128582,128583],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128586,128587,128588],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,128589,128590],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128592,128593,128594],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,128595,128596],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128598,128599],{},"width:像素，设置图像的宽度",[19,128601,128602],{},"height:像素，设置图像的高度",[19,128604,128605],{},"border：像素，设置图像的边框粗细",[19,128607,128608],{},"（2）图像标签属性的注意点：",[19,128610,128611],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128613,128614],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128616,128617],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128619,128621],{"id":128620},"_42-路径注意要点","4.2 路径注意要点：",[19,128623,128624],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128626,128627],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128629,128630],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128632,128633,128634],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,128635,128636],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128638,128639,128640],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,128641,128642],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128644,128645,128646],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,128647,128648],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128650,128651,128652,604],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2796,128653,128654],{"href":128654,"rel":128655},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26235],[14,128657,128659],{"id":128658},"_43-超链接标签","4.3 超链接标签",[19,128661,128662,128665],{},[33,128663,128664],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128667,128668,128669],{},"①语法格式：",[33,128670,128671],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128673,128674],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128676,128677],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128679,128680,128681],{},"③链接分类：外部链接：",[33,128682,128683],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128685,128686,128687],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,128688,128689],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128691,128692,128693],{},"空链接：如果当时没有确定链接目标时，",[33,128694,128695],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128697,128698],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128700,128701],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128703,128705],{"id":128704},"_44-锚点链接","4.4 锚点链接",[19,128707,128708],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128710,128711,128712,128715,128716],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,128713,128714],{},"\u003Ca href=\"#two\">","第二级",[33,128717,128718],{},"\u003C\u002Fa>",[19,128720,128721,128722],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,128723,128724],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128726,128728],{"id":128727},"_45-注释标签","4.5 注释标签",[19,128730,128731,128734,128735],{},[33,128732,128733],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,128736,128737],{},"ctrl+\u002F",[14,128739,128741],{"id":128740},"_46-特殊字符","4.6 特殊字符",[19,128743,128744],{},"可以实现添加多个空格",[3879,128746],{"style":128747,"src":128748},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":54,"depth":54,"links":128750},[128751,128752,128753,128754,128755,128756],{"id":128567,"depth":54,"text":128568},{"id":128620,"depth":54,"text":128621},{"id":128658,"depth":54,"text":128659},{"id":128704,"depth":54,"text":128705},{"id":128727,"depth":54,"text":128728},{"id":128740,"depth":54,"text":128741},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128559,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128763,"title":128764,"body":128765,"description":2493,"extension":2494,"meta":129058,"navigation":69,"path":129059,"seo":129060,"stem":129061,"__hash__":129062},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128766,"toc":129049},[128767,128770,128774,128777,128780,128783,128786,128789,128792,128795,128798,128801,128821,128827,128831,128834,128837,128840,128843,128846,128849,128853,128856,128859,128862,128865,128878,128883,128886,128889,128904,128907,128910,128913,128916,128919,128923,128926,128933,128936,128939,128942,128945,128948,128954,128957,128960,128966,128969,128972,128975,128981,128984,128987,129001,129008,129011,129014,129021,129030,129033,129036,129039,129043,129046],[10,128768,128764],{"id":128769},"_5-html表格列表与表单",[14,128771,128773],{"id":128772},"_51-表格标签","5.1 表格标签",[19,128775,128776],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128778,128779],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128781,128782],{},"②表格基本语法：",[3879,128784],{"style":128747,"src":128785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128787,128788],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3879,128790],{"style":128747,"src":128791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128793,128794],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3879,128796],{"style":128747,"src":128797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128799,128800],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128802,128803,128806,128807,128809,128810,128813,128814,128816,128817,128820],{},[33,128804,128805],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,128808,128805],{},"内部必须拥有",[33,128811,128812],{},"\u003Ctr>","标签，一般位于第一行，",[33,128815,128805],{},"比",[33,128818,128819],{},"\u003Cth>","范围广",[19,128822,128823,128826],{},[33,128824,128825],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128828,128830],{"id":128829},"_52-合并单元格","5.2 合并单元格",[19,128832,128833],{},"（1）合并单元格方式：",[19,128835,128836],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128838,128839],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128841,128842],{},"（2）目标单元格：",[19,128844,128845],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128847,128848],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128850,128852],{"id":128851},"_53-列表标签","5.3 列表标签",[19,128854,128855],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128857,128858],{},"①无序列表：",[3879,128860],{"style":128747,"src":128861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128863,128864],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128866,128867,128870,128871,128874,128875,128877],{},[33,128868,128869],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,128872,128873],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,128876,128869],{},"中输入其他标签或文字是不对的",[19,128879,128880,128882],{},[33,128881,128873],{},"之间相当于一个容器，可以容纳所有元素",[19,128884,128885],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128887,128888],{},"在css中去除前边的小圆点采用如下代码:",[26,128890,128894],{"className":128891,"code":128892,"language":128893,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,128895,128896],{"__ignoreMap":31},[36,128897,128898,128901],{"class":38,"line":39},[36,128899,128900],{"class":53649},"list-style",[36,128902,128903],{"class":42},": none;\n",[19,128905,128906],{},"②有序列表：",[3879,128908],{"style":128747,"src":128909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128911,128912],{},"③自定义列表：",[3879,128914],{"style":128747,"src":128915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3879,128917],{"style":128747,"src":128918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128920,128922],{"id":128921},"_54-表单标签","5.4 表单标签",[19,128924,128925],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128927,128928,128929,128932],{},"（1）表单域：包含单元素的区域，",[33,128930,128931],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3879,128934],{"style":128747,"src":128935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128937,128938],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128940,128941],{},"表单元素提交必须有name属性",[19,128943,128944],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128946,128947],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128949,79571,128950,128953],{},[33,128951,128952],{},"\u003Cinput>","输入表单元素",[3879,128955],{"style":128747,"src":128956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3879,128958],{"style":128747,"src":128959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128961,128962,128963],{},"单选按钮：",[33,128964,128965],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3879,128967],{"style":128747,"src":128968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128970,128971],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3879,128973],{"style":128747,"src":128974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128976,128977,128980],{},[667,128978,128979],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128982,128983],{},"②select下拉表单元素：可以节约页面控件",[3879,128985],{"style":128747,"src":128986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128988,128989,16172,128991,128994,128995,128997,128998,129000],{},[667,128990,2595],{},[33,128992,128993],{},"\u003Cselect>","中至少包含一对",[33,128996,105054],{},"；在",[33,128999,105054],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129002,129003,129004,129007],{},"③",[33,129005,129006],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3879,129009],{"style":128747,"src":129010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129012,129013],{},"3行20列",[14,129015,129017,129018,105033],{"id":129016},"_55-lable标签","5.5 ",[33,129019,129020],{},"\u003Clable>",[19,129022,129023,129024,129026,129027,129029],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,129025,129020],{},"标签用于绑定一个表单标签，当点击",[33,129028,129020],{},"标签内的文本",[19,129031,129032],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3879,129034],{"style":128747,"src":129035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3879,129037],{"style":128747,"src":129038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129040,129042],{"id":129041},"_56-实例","5.6 实例",[3879,129044],{"style":128747,"src":129045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2467,129047,129048],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":129050},[129051,129052,129053,129054,129055,129057],{"id":128772,"depth":54,"text":128773},{"id":128829,"depth":54,"text":128830},{"id":128851,"depth":54,"text":128852},{"id":128921,"depth":54,"text":128922},{"id":129016,"depth":54,"text":129056},"5.5 \u003Clable>标签",{"id":129041,"depth":54,"text":129042},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128764,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129064,"title":129065,"body":129066,"description":2493,"extension":2494,"meta":129615,"navigation":69,"path":129616,"seo":129617,"stem":129618,"__hash__":129619},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129067,"toc":129590},[129068,129071,129075,129078,129081,129085,129088,129091,129094,129097,129100,129103,129106,129110,129113,129117,129120,129123,129126,129130,129133,129136,129139,129145,129148,129151,129154,129157,129160,129163,129166,129199,129203,129206,129209,129212,129216,129219,129222,129225,129228,129231,129235,129238,129241,129244,129248,129251,129255,129258,129262,129265,129270,129274,129277,129281,129284,129287,129290,129293,129320,129323,129327,129330,129333,129338,129341,129344,129348,129351,129356,129359,129362,129365,129369,129372,129375,129378,129382,129385,129388,129391,129395,129399,129402,129442,129445,129449,129456,129459,129463,129466,129512,129516,129519,129522,129525,129553,129557,129560,129587],[10,129069,129065],{"id":129070},"_6-css语法与文本样式",[14,129072,129074],{"id":129073},"_61-css语法规范","6.1 css语法规范",[19,129076,129077],{},"由两部分组成，选择器及一条或多条声明",[3879,129079],{"style":128747,"src":129080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129082,129083],{},[667,129084,2595],{},[19,129086,129087],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129089,129090],{},"②属性与属性值以“键值对”的形式出现",[19,129092,129093],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129095,129096],{},"④属性和属性值之间用英文“;”分开",[3879,129098],{"style":128747,"src":129099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3879,129101],{"style":128747,"src":129102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3879,129104],{"style":128747,"src":129105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129107,129109],{"id":129108},"_62-css选择器","6.2 css选择器",[19,129111,129112],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1752,129114,129116],{"id":129115},"_621-标签选择器","6.2.1 标签选择器",[19,129118,129119],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129121,129122],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3879,129124],{"style":128747,"src":129125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1752,129127,129129],{"id":129128},"_622-类选择器","6.2.2 类选择器",[19,129131,129132],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129134,129135],{},"②样例",[3879,129137],{"style":128747,"src":129138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129140,129141,129142,129144],{},"③ ",[667,129143,128979],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129146,129147],{},"可以理解为给这个标签起了个名字，来表示；",[19,129149,129150],{},"长名称或词组可以使用横线来为选择器命名；",[19,129152,129153],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129155,129156],{},"命名要有意义；",[3879,129158],{"style":128747,"src":129159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129161,129162],{},"类选择器也可以指定特殊的元素p.center{}",[19,129164,129165],{},"p.center和.center都对",[26,129167,129169],{"className":128891,"code":129168,"language":128893,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,129170,129171,129176,129185,129195],{"__ignoreMap":31},[36,129172,129173],{"class":38,"line":39},[36,129174,129175],{"class":2621},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,129177,129178,129180,129183],{"class":38,"line":54},[36,129179,19],{"class":53649},[36,129181,129182],{"class":79},".center",[36,129184,2150],{"class":42},[36,129186,129187,129189,129191,129193],{"class":38,"line":66},[36,129188,72871],{"class":62},[36,129190,2158],{"class":42},[36,129192,53940],{"class":62},[36,129194,3711],{"class":42},[36,129196,129197],{"class":38,"line":73},[36,129198,3982],{"class":42},[1752,129200,129202],{"id":129201},"_623-多类名使用","6.2.3 多类名使用",[19,129204,129205],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3879,129207],{"style":128747,"src":129208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129210,129211],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1752,129213,129215],{"id":129214},"_624-id选择器","6.2.4 id选择器",[19,129217,129218],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129220,129221],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3879,129223],{"style":128747,"src":129224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129226,129227],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129229,129230],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1752,129232,129234],{"id":129233},"_625-通配符选择器","6.2.5 通配符选择器",[19,129236,129237],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129239,129240],{},"* {",[19,129242,129243],{},"color=\"red\"}",[1752,129245,129247],{"id":129246},"_626-总结","6.2.6 总结",[3879,129249],{"style":128747,"src":129250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129252,129254],{"id":129253},"_63-css字体属性","6.3 css字体属性",[19,129256,129257],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1752,129259,129261],{"id":129260},"_631-字体系列","6.3.1 字体系列",[19,129263,129264],{},"font-family: '宋体';",[19,129266,129267,129269],{},[667,129268,2595],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1752,129271,129273],{"id":129272},"_632-字体大小","6.3.2 字体大小",[19,129275,129276],{},"font-size: 20px",[19,129278,129279,28843],{},[667,129280,128979],{},[19,129282,129283],{},"①px（像素）大小是网页的最常用单位",[19,129285,129286],{},"②谷歌浏览器默认为16px",[19,129288,129289],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129291,129292],{},"④可以给body指定整个页面的大小：会自动引用",[26,129294,129296],{"className":128891,"code":129295,"language":128893,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,129297,129298,129304,129316],{"__ignoreMap":31},[36,129299,129300,129302],{"class":38,"line":39},[36,129301,54148],{"class":53649},[36,129303,2150],{"class":42},[36,129305,129306,129308,129310,129312,129314],{"class":38,"line":54},[36,129307,72971],{"class":62},[36,129309,2158],{"class":42},[36,129311,3156],{"class":62},[36,129313,53840],{"class":46},[36,129315,3711],{"class":42},[36,129317,129318],{"class":38,"line":66},[36,129319,3982],{"class":42},[19,129321,129322],{},"⑤标题标签比较特殊，需要单独指定大小",[1752,129324,129326],{"id":129325},"_633-字体粗细","6.3.3 字体粗细",[19,129328,129329],{},"font-weight: bold;",[19,129331,129332],{},"font-weight: 100；",[19,129334,129335,129337],{},[667,129336,2595],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129339,129340],{},"font-weight= 400;",[19,129342,129343],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1752,129345,129347],{"id":129346},"_634-文字样式","6.3.4 文字样式",[19,129349,129350],{},"font-style: normal；",[19,129352,129353,28843],{},[667,129354,129355],{},"属性值",[19,129357,129358],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129360,129361],{},"②italic：浏览器会显示斜体的字体样式",[3879,129363],{"style":128747,"src":129364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1752,129366,129368],{"id":129367},"_635-字体符合属性","6.3.5 字体符合属性",[3879,129370],{"style":128747,"src":129371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3879,129373],{"style":128747,"src":129374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129376,129377],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129379,129380,28843],{},[667,129381,128979],{},[19,129383,129384],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129386,129387],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129389,129390],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129392,129394],{"id":129393},"_64-css-test文本属性","6.4 css test文本属性",[1752,129396,129398],{"id":129397},"_641-文本颜色","6.4.1 文本颜色",[19,129400,129401],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,129403,129405],{"className":128891,"code":129404,"language":128893,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,129406,129407,129412,129418,129428,129433,129438],{"__ignoreMap":31},[36,129408,129409],{"class":38,"line":39},[36,129410,129411],{"class":2621},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,129413,129414,129416],{"class":38,"line":54},[36,129415,19],{"class":53649},[36,129417,2150],{"class":42},[36,129419,129420,129422,129424,129426],{"class":38,"line":66},[36,129421,73250],{"class":62},[36,129423,2158],{"class":42},[36,129425,59769],{"class":62},[36,129427,3711],{"class":42},[36,129429,129430],{"class":38,"line":73},[36,129431,129432],{"class":2621},"  \u002F* color: #ff0000; *\u002F\n",[36,129434,129435],{"class":38,"line":86},[36,129436,129437],{"class":2621},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,129439,129440],{"class":38,"line":126},[36,129441,3982],{"class":42},[3879,129443],{"style":128747,"src":129444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1752,129446,129448],{"id":129447},"_642-对齐文本","6.4.2 对齐文本",[19,129450,129451,129452,129455],{},"text-align属于用于设置元素内文本内容的 ",[667,129453,129454],{},"水平对齐"," 方式",[19,129457,129458],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1752,129460,129462],{"id":129461},"_643-装饰文本","6.4.3 装饰文本",[19,129464,129465],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,129467,129469],{"className":128891,"code":129468,"language":128893,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,129470,129471,129477,129487,129491,129497,129508],{"__ignoreMap":31},[36,129472,129473,129475],{"class":38,"line":39},[36,129474,2796],{"class":53649},[36,129476,2150],{"class":42},[36,129478,129479,129481,129483,129485],{"class":38,"line":54},[36,129480,72847],{"class":62},[36,129482,2158],{"class":42},[36,129484,57085],{"class":62},[36,129486,3711],{"class":42},[36,129488,129489],{"class":38,"line":66},[36,129490,3982],{"class":42},[36,129492,129493,129495],{"class":38,"line":73},[36,129494,19],{"class":53649},[36,129496,2150],{"class":42},[36,129498,129499,129501,129503,129506],{"class":38,"line":86},[36,129500,72847],{"class":62},[36,129502,2158],{"class":42},[36,129504,129505],{"class":62},"underline",[36,129507,3711],{"class":42},[36,129509,129510],{"class":38,"line":126},[36,129511,3982],{"class":42},[1752,129513,129515],{"id":129514},"_644-文本缩进","6.4.4 文本缩进",[19,129517,129518],{},"实现文本的第一行首行缩进自己指定的距离",[19,129520,129521],{},"20px往右边走；-20px往左边走",[19,129523,129524],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,129526,129528],{"className":128891,"code":129527,"language":128893,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,129529,129530,129536,129549],{"__ignoreMap":31},[36,129531,129532,129534],{"class":38,"line":39},[36,129533,19],{"class":53649},[36,129535,2150],{"class":42},[36,129537,129538,129541,129543,129545,129547],{"class":38,"line":54},[36,129539,129540],{"class":62},"  text-indent",[36,129542,2158],{"class":42},[36,129544,1911],{"class":62},[36,129546,25923],{"class":46},[36,129548,3711],{"class":42},[36,129550,129551],{"class":38,"line":66},[36,129552,3982],{"class":42},[1752,129554,129556],{"id":129555},"_645-行间距","6.4.5 行间距",[19,129558,129559],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,129561,129563],{"className":128891,"code":129562,"language":128893,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,129564,129565,129571,129583],{"__ignoreMap":31},[36,129566,129567,129569],{"class":38,"line":39},[36,129568,19],{"class":53649},[36,129570,2150],{"class":42},[36,129572,129573,129576,129578,129581],{"class":38,"line":54},[36,129574,129575],{"class":62},"  line-height",[36,129577,2158],{"class":42},[36,129579,129580],{"class":62},"1.6",[36,129582,3711],{"class":42},[36,129584,129585],{"class":38,"line":66},[36,129586,3982],{"class":42},[2467,129588,129589],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":129591},[129592,129593,129601,129608],{"id":129073,"depth":54,"text":129074},{"id":129108,"depth":54,"text":129109,"children":129594},[129595,129596,129597,129598,129599,129600],{"id":129115,"depth":66,"text":129116},{"id":129128,"depth":66,"text":129129},{"id":129201,"depth":66,"text":129202},{"id":129214,"depth":66,"text":129215},{"id":129233,"depth":66,"text":129234},{"id":129246,"depth":66,"text":129247},{"id":129253,"depth":54,"text":129254,"children":129602},[129603,129604,129605,129606,129607],{"id":129260,"depth":66,"text":129261},{"id":129272,"depth":66,"text":129273},{"id":129325,"depth":66,"text":129326},{"id":129346,"depth":66,"text":129347},{"id":129367,"depth":66,"text":129368},{"id":129393,"depth":54,"text":129394,"children":129609},[129610,129611,129612,129613,129614],{"id":129397,"depth":66,"text":129398},{"id":129447,"depth":66,"text":129448},{"id":129461,"depth":66,"text":129462},{"id":129514,"depth":66,"text":129515},{"id":129555,"depth":66,"text":129556},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129065,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129621,"title":129622,"body":129623,"description":2493,"extension":2494,"meta":130272,"navigation":69,"path":130273,"seo":130274,"stem":130275,"__hash__":130276},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129624,"toc":130253},[129625,129628,129632,129636,129696,129700,129710,129713,129716,129720,129745,129749,129752,129755,129758,129761,129764,129768,129771,129774,129816,129819,129845,129851,129854,129858,129862,129868,129871,129874,129877,129880,129883,129886,129931,129935,129938,129941,129945,129949,129978,129981,129986,129989,129992,129995,129998,130002,130006,130009,130011,130014,130018,130021,130025,130028,130031,130034,130038,130042,130048,130058,130061,130064,130067,130070,130073,130196,130204,130212,130250],[10,129626,129622],{"id":129627},"_7-css引入方式与选择器进阶",[14,129629,129631],{"id":129630},"_71-css引入方式","7.1 css引入方式",[1752,129633,129635],{"id":129634},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,129637,129641],{"className":129638,"code":129639,"language":129640,"meta":31,"style":31},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[33,129642,129643,129651,129658,129670,129683,129688],{"__ignoreMap":31},[36,129644,129645,129647,129649],{"class":38,"line":39},[36,129646,3463],{"class":42},[36,129648,2467],{"class":53649},[36,129650,53656],{"class":42},[36,129652,129653,129656],{"class":38,"line":54},[36,129654,129655],{"class":53649},"  h1",[36,129657,2150],{"class":42},[36,129659,129660,129663,129665,129668],{"class":38,"line":66},[36,129661,129662],{"class":62},"    color",[36,129664,2158],{"class":42},[36,129666,129667],{"class":62},"blue",[36,129669,3711],{"class":42},[36,129671,129672,129675,129677,129679,129681],{"class":38,"line":73},[36,129673,129674],{"class":62},"    font-size",[36,129676,2158],{"class":42},[36,129678,3354],{"class":62},[36,129680,53840],{"class":46},[36,129682,3711],{"class":42},[36,129684,129685],{"class":38,"line":86},[36,129686,129687],{"class":42},"  }\n",[36,129689,129690,129692,129694],{"class":38,"line":126},[36,129691,54133],{"class":42},[36,129693,2467],{"class":53649},[36,129695,53656],{"class":42},[19,129697,129698,28843],{},[667,129699,128979],{},[19,129701,79571,129702,129705,129706,129709],{},[33,129703,129704],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,129707,129708],{},"\u003Chead>","标签中",[19,129711,129712],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129714,129715],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1752,129717,129719],{"id":129718},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,129721,129723],{"className":129638,"code":129722,"language":129640,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,129724,129725],{"__ignoreMap":31},[36,129726,129727,129729,129731,129733,129735,129738,129741,129743],{"class":38,"line":39},[36,129728,3463],{"class":42},[36,129730,19],{"class":53649},[36,129732,64974],{"class":79},[36,129734,47],{"class":42},[36,129736,129737],{"class":50},"\"color: red; font-size: 16px;\"",[36,129739,129740],{"class":42},">这是一个段落\u003C\u002F",[36,129742,19],{"class":53649},[36,129744,53656],{"class":42},[19,129746,129747,28843],{},[667,129748,128979],{},[19,129750,129751],{},"①style其实就是标签的属性",[19,129753,129754],{},"②在双引号中间，写法要符合css规范",[19,129756,129757],{},"③可以控制当前的标签设置样式",[19,129759,129760],{},"④书写繁琐，简单时才用",[19,129762,129763],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1752,129765,129767],{"id":129766},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129769,129770],{},"使用最多，单独建一个css文件，然后html引用",[19,129772,129773],{},"①css文件部分： style.css",[26,129775,129777],{"className":128891,"code":129776,"language":128893,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,129778,129779,129784,129790,129800,129812],{"__ignoreMap":31},[36,129780,129781],{"class":38,"line":39},[36,129782,129783],{"class":2621},"\u002F* style.css *\u002F\n",[36,129785,129786,129788],{"class":38,"line":54},[36,129787,10],{"class":53649},[36,129789,2150],{"class":42},[36,129791,129792,129794,129796,129798],{"class":38,"line":66},[36,129793,73250],{"class":62},[36,129795,2158],{"class":42},[36,129797,129667],{"class":62},[36,129799,3711],{"class":42},[36,129801,129802,129804,129806,129808,129810],{"class":38,"line":73},[36,129803,72971],{"class":62},[36,129805,2158],{"class":42},[36,129807,3354],{"class":62},[36,129809,53840],{"class":46},[36,129811,3711],{"class":42},[36,129813,129814],{"class":38,"line":86},[36,129815,3982],{"class":42},[19,129817,129818],{},"②html部分",[26,129820,129822],{"className":129638,"code":129821,"language":129640,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,129823,129824],{"__ignoreMap":31},[36,129825,129826,129828,129830,129832,129834,129836,129838,129840,129843],{"class":38,"line":39},[36,129827,3463],{"class":42},[36,129829,71352],{"class":53649},[36,129831,71355],{"class":79},[36,129833,47],{"class":42},[36,129835,71360],{"class":50},[36,129837,63405],{"class":79},[36,129839,47],{"class":42},[36,129841,129842],{"class":50},"\"style.css\"",[36,129844,53656],{"class":42},[19,129846,129847,129850],{},[33,129848,129849],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129852,129853],{},"ctrl+0回到页面原来大小",[14,129855,129857],{"id":129856},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1752,129859,129861],{"id":129860},"_721-快速生成html","7.2.1 快速生成html",[19,129863,129864,129865],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,129866,129867],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129869,129870],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129872,129873],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129875,129876],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129878,129879],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129881,129882],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129884,129885],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,129887,129889],{"className":129638,"code":129888,"language":129640,"meta":31,"style":31},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[33,129890,129891,129896,129901,129906,129911,129916,129921,129926],{"__ignoreMap":31},[36,129892,129893],{"class":38,"line":39},[36,129894,129895],{"class":2621},"\u003C!-- Emmet 语法示例 -->\n",[36,129897,129898],{"class":38,"line":54},[36,129899,129900],{"class":2621},"\u003C!-- div*3        → 生成3个div -->\n",[36,129902,129903],{"class":38,"line":66},[36,129904,129905],{"class":2621},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,129907,129908],{"class":38,"line":73},[36,129909,129910],{"class":2621},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,129912,129913],{"class":38,"line":86},[36,129914,129915],{"class":2621},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,129917,129918],{"class":38,"line":126},[36,129919,129920],{"class":2621},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,129922,129923],{"class":38,"line":131},[36,129924,129925],{"class":2621},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,129927,129928],{"class":38,"line":225},[36,129929,129930],{"class":2621},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1752,129932,129934],{"id":129933},"_722-快速生成css","7.2.2 快速生成css",[19,129936,129937],{},"简写开头",[19,129939,129940],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129942,129944],{"id":129943},"_73-css复合选择器","7.3 css复合选择器",[1752,129946,129948],{"id":129947},"_731-后代选择器","7.3.1 后代选择器",[26,129950,129952],{"className":128891,"code":129951,"language":128893,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,129953,129954,129964,129974],{"__ignoreMap":31},[36,129955,129956,129959,129962],{"class":38,"line":39},[36,129957,129958],{"class":79},".parent",[36,129960,129961],{"class":79}," .child",[36,129963,2150],{"class":42},[36,129965,129966,129968,129970,129972],{"class":38,"line":54},[36,129967,73250],{"class":62},[36,129969,2158],{"class":42},[36,129971,129667],{"class":62},[36,129973,3711],{"class":42},[36,129975,129976],{"class":38,"line":66},[36,129977,3982],{"class":42},[19,129979,129980],{},"元素1 元素2 {样式声明}",[19,129982,129983],{},[667,129984,129985],{},"注意点:",[19,129987,129988],{},"①元素1和元素2中间用空格隔开",[19,129990,129991],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129993,129994],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129996,129997],{},"④元素1和元素2可以是任意基础选择器",[1752,129999,130001],{"id":130000},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130003,130004],{},[667,130005,129985],{},[19,130007,130008],{},"①元素1和元素2中间用大于号隔开",[19,130010,129991],{},[19,130012,130013],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1752,130015,130017],{"id":130016},"_733-并集选择器","7.3.3 并集选择器",[19,130019,130020],{},"元素1，元素2 {样式声明}",[19,130022,130023],{},[667,130024,129985],{},[19,130026,130027],{},"①元素1和元素2中间用逗号隔开",[19,130029,130030],{},"②逗号可以理解为和的意思",[19,130032,130033],{},"③并集选择器通常用于集体声明",[1752,130035,130037],{"id":130036},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130039,130040],{},[667,130041,129985],{},[19,130043,130044,130045,130047],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71352,130046],{},"－:visited－:hover－:active。",[19,130049,130050,130051,130054,130055,28110],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130052,130053],"hover",{}," 、 ",[130056,130057],"first-child",{},[19,130059,130060],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130062,130063],{},"link对没访问的进行设置",[19,130065,130066],{},"vistied对已访问的进行改变",[19,130068,130069],{},"hover鼠标经过就会变",[19,130071,130072],{},"active常按(点)就会变",[26,130074,130076],{"className":128891,"code":130075,"language":128893,"meta":31,"style":31},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[33,130077,130078,130083,130092,130102,130112,130116,130125,130136,130140,130148,130158,130168,130172,130181,130192],{"__ignoreMap":31},[36,130079,130080],{"class":38,"line":39},[36,130081,130082],{"class":2621},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,130084,130085,130087,130090],{"class":38,"line":54},[36,130086,2796],{"class":53649},[36,130088,130089],{"class":79},":link",[36,130091,2150],{"class":42},[36,130093,130094,130096,130098,130100],{"class":38,"line":66},[36,130095,73250],{"class":62},[36,130097,2158],{"class":42},[36,130099,64717],{"class":62},[36,130101,3711],{"class":42},[36,130103,130104,130106,130108,130110],{"class":38,"line":73},[36,130105,72847],{"class":62},[36,130107,2158],{"class":42},[36,130109,57085],{"class":62},[36,130111,3711],{"class":42},[36,130113,130114],{"class":38,"line":86},[36,130115,3982],{"class":42},[36,130117,130118,130120,130123],{"class":38,"line":126},[36,130119,2796],{"class":53649},[36,130121,130122],{"class":79},":visited",[36,130124,2150],{"class":42},[36,130126,130127,130129,130131,130134],{"class":38,"line":131},[36,130128,73250],{"class":62},[36,130130,2158],{"class":42},[36,130132,130133],{"class":62},"purple",[36,130135,3711],{"class":42},[36,130137,130138],{"class":38,"line":225},[36,130139,3982],{"class":42},[36,130141,130142,130144,130146],{"class":38,"line":235},[36,130143,2796],{"class":53649},[36,130145,63288],{"class":79},[36,130147,2150],{"class":42},[36,130149,130150,130152,130154,130156],{"class":38,"line":377},[36,130151,73250],{"class":62},[36,130153,2158],{"class":42},[36,130155,57237],{"class":62},[36,130157,3711],{"class":42},[36,130159,130160,130162,130164,130166],{"class":38,"line":617},[36,130161,72847],{"class":62},[36,130163,2158],{"class":42},[36,130165,129505],{"class":62},[36,130167,3711],{"class":42},[36,130169,130170],{"class":38,"line":643},[36,130171,3982],{"class":42},[36,130173,130174,130176,130179],{"class":38,"line":921},[36,130175,2796],{"class":53649},[36,130177,130178],{"class":79},":active",[36,130180,2150],{"class":42},[36,130182,130183,130185,130187,130190],{"class":38,"line":934},[36,130184,73250],{"class":62},[36,130186,2158],{"class":42},[36,130188,130189],{"class":62},"green",[36,130191,3711],{"class":42},[36,130193,130194],{"class":38,"line":939},[36,130195,3982],{"class":42},[1752,130197,130199,130200,130203],{"id":130198},"_735-伪类选择器","7.3.5 ",[130201,130202],"focus",{},"伪类选择器",[19,130205,130206,130208,130209,130211],{},[130201,130207],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,130210,128952],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,130213,130215],{"className":128891,"code":130214,"language":128893,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,130216,130217,130225,130236,130246],{"__ignoreMap":31},[36,130218,130219,130221,130223],{"class":38,"line":39},[36,130220,56169],{"class":53649},[36,130222,64248],{"class":79},[36,130224,2150],{"class":42},[36,130226,130227,130230,130232,130234],{"class":38,"line":54},[36,130228,130229],{"class":62},"  border-color",[36,130231,2158],{"class":42},[36,130233,57237],{"class":62},[36,130235,3711],{"class":42},[36,130237,130238,130240,130242,130244],{"class":38,"line":66},[36,130239,73143],{"class":62},[36,130241,2158],{"class":42},[36,130243,57085],{"class":62},[36,130245,3711],{"class":42},[36,130247,130248],{"class":38,"line":73},[36,130249,3982],{"class":42},[2467,130251,130252],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":130254},[130255,130260,130264],{"id":129630,"depth":54,"text":129631,"children":130256},[130257,130258,130259],{"id":129634,"depth":66,"text":129635},{"id":129718,"depth":66,"text":129719},{"id":129766,"depth":66,"text":129767},{"id":129856,"depth":54,"text":129857,"children":130261},[130262,130263],{"id":129860,"depth":66,"text":129861},{"id":129933,"depth":66,"text":129934},{"id":129943,"depth":54,"text":129944,"children":130265},[130266,130267,130268,130269,130270],{"id":129947,"depth":66,"text":129948},{"id":130000,"depth":66,"text":130001},{"id":130016,"depth":66,"text":130017},{"id":130036,"depth":66,"text":130037},{"id":130198,"depth":66,"text":130271},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129622,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130278,"title":130279,"body":130280,"description":2493,"extension":2494,"meta":132203,"navigation":69,"path":132204,"seo":132205,"stem":132206,"__hash__":132207},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130281,"toc":132177},[130282,130285,130289,130298,130302,130328,130333,130336,130339,130342,130345,130349,130352,130362,130370,130374,130409,130414,130417,130420,130423,130426,130430,130433,130442,130446,130459,130464,130467,130470,130473,130477,130480,130484,130487,130542,130545,130576,130579,130633,130637,130640,130806,130929,130932,130935,130938,130941,130945,130948,130952,130955,130958,130962,130965,130996,131023,131051,131054,131058,131084,131127,131131,131225,131228,131255,131258,131261,131264,131267,131270,131273,131276,131279,131282,131286,131343,131370,131374,131422,131426,131467,131469,131472,131475,131478,131481,131485,131577,131580,131583,131586,131590,131713,131914,131918,131922,131925,131928,131931,131935,131938,131941,131966,131969,131972,131975,131978,131981,131985,131993,132055,132058,132116,132119,132122,132125,132128,132131,132134,132137,132174],[10,130283,130279],{"id":130284},"_8-css显示模式与背景特性",[14,130286,130288],{"id":130287},"_81-css元素显示模式","8.1 css元素显示模式",[19,130290,130291,130292,130294,130295,130297],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,130293,128502],{},"自己占一行，比如一行可以放多个",[33,130296,128505],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1752,130299,130301],{"id":130300},"_811-块元素","8.1.1 块元素",[19,130303,130304,130305,130307,130308,2031,130311,2031,130313,2031,130315,2031,130318,2031,130321,130324,130325,130327],{},"常见的块元素有",[33,130306,128406],{},"~",[33,130309,130310],{},"\u003Ch6>",[33,130312,128432],{},[33,130314,128502],{},[33,130316,130317],{},"\u003Cul>",[33,130319,130320],{},"\u003Col>",[33,130322,130323],{},"\u003Cli>","等，其中 ",[33,130326,128502],{}," 标签是最典型的块元素",[19,130329,130330],{},[667,130331,130332],{},"块级元素的特点：",[19,130334,130335],{},"① 比较霸道，自己独占一行。",[19,130337,130338],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130340,130341],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130343,130344],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130346,130347],{},[667,130348,2595],{},[19,130350,130351],{},"①文字类的元素内不能使用块级元素",[19,130353,79594,130354,130356,130357,130359,130360],{},[33,130355,128432],{}," 标签主要用于存放文字，因此 ",[33,130358,128432],{}," 里面不能放块级元素，特别是不能放",[33,130361,128502],{},[19,130363,130364,130365,130307,130367,130369],{},"⑥同理， ",[33,130366,128406],{},[33,130368,130310],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1752,130371,130373],{"id":130372},"_812-行内元素","8.1.2 行内元素",[19,130375,130376,130377,2031,130379,2031,130382,2031,130385,2031,130388,2031,130391,2031,130394,2031,130397,2031,130400,2031,130403,130405,130406,130408],{},"常见的行内元素有 ",[33,130378,128664],{},[33,130380,130381],{},"\u003Cstrong>",[33,130383,130384],{},"\u003Cb>",[33,130386,130387],{},"\u003Cem>",[33,130389,130390],{},"\u003Ci>",[33,130392,130393],{},"\u003Cdel>",[33,130395,130396],{},"\u003Cs>",[33,130398,130399],{},"\u003Cins>",[33,130401,130402],{},"\u003Cu>",[33,130404,128505],{}," 等，其中 ",[33,130407,128505],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130410,130411],{},[667,130412,130413],{},"特点：",[19,130415,130416],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130418,130419],{},"② 高、宽直接设置是无效的。",[19,130421,130422],{},"③ 默认宽度就是它本身内容的宽度。",[19,130424,130425],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130427,130428],{},[667,130429,2595],{},[19,130431,130432],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130434,130435,130436,130438,130439,130441],{},"②特殊情况链接 ",[33,130437,128664],{}," 里面可以放块级元素，但是给 ",[33,130440,128664],{}," 转换一下块级模式最安全",[1752,130443,130445],{"id":130444},"_813-行内块元素","8.1.3 行内块元素",[19,130447,130448,130449,2031,130452,2031,130455,130458],{},"在行内元素中有几个特殊的标签 —— ",[33,130450,130451],{},"\u003Cimg \u002F>",[33,130453,130454],{},"\u003Cinput \u002F>",[33,130456,130457],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130460,130461],{},[667,130462,130463],{},"行内块元素的特点：",[19,130465,130466],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130468,130469],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130471,130472],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1752,130474,130476],{"id":130475},"_814-总结","8.1.4 总结",[3879,130478],{"style":128747,"src":130479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1752,130481,130483],{"id":130482},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130485,130486],{},"①转换为块元素：display:block;",[26,130488,130490],{"className":128891,"code":130489,"language":128893,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,130491,130492,130497,130503,130514,130526,130538],{"__ignoreMap":31},[36,130493,130494],{"class":38,"line":39},[36,130495,130496],{"class":2621},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,130498,130499,130501],{"class":38,"line":54},[36,130500,2796],{"class":53649},[36,130502,2150],{"class":42},[36,130504,130505,130508,130510,130512],{"class":38,"line":66},[36,130506,130507],{"class":62},"  display",[36,130509,2158],{"class":42},[36,130511,63217],{"class":62},[36,130513,3711],{"class":42},[36,130515,130516,130518,130520,130522,130524],{"class":38,"line":73},[36,130517,72913],{"class":62},[36,130519,2158],{"class":42},[36,130521,1070],{"class":62},[36,130523,53840],{"class":46},[36,130525,3711],{"class":42},[36,130527,130528,130530,130532,130534,130536],{"class":38,"line":86},[36,130529,73133],{"class":62},[36,130531,2158],{"class":42},[36,130533,2957],{"class":62},[36,130535,53840],{"class":46},[36,130537,3711],{"class":42},[36,130539,130540],{"class":38,"line":126},[36,130541,3982],{"class":42},[19,130543,130544],{},"②转换为行内元素：display:inline;",[26,130546,130548],{"className":128891,"code":130547,"language":128893,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,130549,130550,130555,130561,130572],{"__ignoreMap":31},[36,130551,130552],{"class":38,"line":39},[36,130553,130554],{"class":2621},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,130556,130557,130559],{"class":38,"line":54},[36,130558,53959],{"class":53649},[36,130560,2150],{"class":42},[36,130562,130563,130565,130567,130570],{"class":38,"line":66},[36,130564,130507],{"class":62},[36,130566,2158],{"class":42},[36,130568,130569],{"class":62},"inline",[36,130571,3711],{"class":42},[36,130573,130574],{"class":38,"line":73},[36,130575,3982],{"class":42},[19,130577,130578],{},"③转换为行内块：display:inline-block;",[26,130580,130582],{"className":128891,"code":130581,"language":128893,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,130583,130584,130589,130595,130605,130617,130629],{"__ignoreMap":31},[36,130585,130586],{"class":38,"line":39},[36,130587,130588],{"class":2621},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,130590,130591,130593],{"class":38,"line":54},[36,130592,36],{"class":53649},[36,130594,2150],{"class":42},[36,130596,130597,130599,130601,130603],{"class":38,"line":66},[36,130598,130507],{"class":62},[36,130600,2158],{"class":42},[36,130602,74728],{"class":62},[36,130604,3711],{"class":42},[36,130606,130607,130609,130611,130613,130615],{"class":38,"line":73},[36,130608,72913],{"class":62},[36,130610,2158],{"class":42},[36,130612,3167],{"class":62},[36,130614,53840],{"class":46},[36,130616,3711],{"class":42},[36,130618,130619,130621,130623,130625,130627],{"class":38,"line":86},[36,130620,73133],{"class":62},[36,130622,2158],{"class":42},[36,130624,3503],{"class":62},[36,130626,53840],{"class":46},[36,130628,3711],{"class":42},[36,130630,130631],{"class":38,"line":126},[36,130632,3982],{"class":42},[1752,130634,130636],{"id":130635},"_816-小米侧边栏","8.1.6 小米侧边栏",[3879,130638],{"style":128747,"src":130639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,130641,130643],{"className":129638,"code":130642,"language":129640,"meta":31,"style":31},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[33,130644,130645,130650,130665,130684,130703,130722,130741,130760,130779,130798],{"__ignoreMap":31},[36,130646,130647],{"class":38,"line":39},[36,130648,130649],{"class":2621},"\u003C!-- 小米侧边栏案例 -->\n",[36,130651,130652,130654,130656,130658,130660,130663],{"class":38,"line":54},[36,130653,3463],{"class":42},[36,130655,53959],{"class":53649},[36,130657,55834],{"class":79},[36,130659,47],{"class":42},[36,130661,130662],{"class":50},"\"sidebar\"",[36,130664,53656],{"class":42},[36,130666,130667,130669,130671,130673,130675,130677,130680,130682],{"class":38,"line":66},[36,130668,54492],{"class":42},[36,130670,2796],{"class":53649},[36,130672,63405],{"class":79},[36,130674,47],{"class":42},[36,130676,63410],{"class":50},[36,130678,130679],{"class":42},">手机 电话卡\u003C\u002F",[36,130681,2796],{"class":53649},[36,130683,53656],{"class":42},[36,130685,130686,130688,130690,130692,130694,130696,130699,130701],{"class":38,"line":73},[36,130687,54492],{"class":42},[36,130689,2796],{"class":53649},[36,130691,63405],{"class":79},[36,130693,47],{"class":42},[36,130695,63410],{"class":50},[36,130697,130698],{"class":42},">电视 盒子\u003C\u002F",[36,130700,2796],{"class":53649},[36,130702,53656],{"class":42},[36,130704,130705,130707,130709,130711,130713,130715,130718,130720],{"class":38,"line":86},[36,130706,54492],{"class":42},[36,130708,2796],{"class":53649},[36,130710,63405],{"class":79},[36,130712,47],{"class":42},[36,130714,63410],{"class":50},[36,130716,130717],{"class":42},">笔记本 平板\u003C\u002F",[36,130719,2796],{"class":53649},[36,130721,53656],{"class":42},[36,130723,130724,130726,130728,130730,130732,130734,130737,130739],{"class":38,"line":126},[36,130725,54492],{"class":42},[36,130727,2796],{"class":53649},[36,130729,63405],{"class":79},[36,130731,47],{"class":42},[36,130733,63410],{"class":50},[36,130735,130736],{"class":42},">出行 穿戴\u003C\u002F",[36,130738,2796],{"class":53649},[36,130740,53656],{"class":42},[36,130742,130743,130745,130747,130749,130751,130753,130756,130758],{"class":38,"line":131},[36,130744,54492],{"class":42},[36,130746,2796],{"class":53649},[36,130748,63405],{"class":79},[36,130750,47],{"class":42},[36,130752,63410],{"class":50},[36,130754,130755],{"class":42},">智能 路由器\u003C\u002F",[36,130757,2796],{"class":53649},[36,130759,53656],{"class":42},[36,130761,130762,130764,130766,130768,130770,130772,130775,130777],{"class":38,"line":225},[36,130763,54492],{"class":42},[36,130765,2796],{"class":53649},[36,130767,63405],{"class":79},[36,130769,47],{"class":42},[36,130771,63410],{"class":50},[36,130773,130774],{"class":42},">健康 儿童\u003C\u002F",[36,130776,2796],{"class":53649},[36,130778,53656],{"class":42},[36,130780,130781,130783,130785,130787,130789,130791,130794,130796],{"class":38,"line":235},[36,130782,54492],{"class":42},[36,130784,2796],{"class":53649},[36,130786,63405],{"class":79},[36,130788,47],{"class":42},[36,130790,63410],{"class":50},[36,130792,130793],{"class":42},">耳机 音响\u003C\u002F",[36,130795,2796],{"class":53649},[36,130797,53656],{"class":42},[36,130799,130800,130802,130804],{"class":38,"line":377},[36,130801,54133],{"class":42},[36,130803,53959],{"class":53649},[36,130805,53656],{"class":42},[26,130807,130809],{"className":128891,"code":130808,"language":128893,"meta":31,"style":31},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[33,130810,130811,130820,130830,130843,130855,130867,130879,130889,130900,130904,130914,130925],{"__ignoreMap":31},[36,130812,130813,130816,130818],{"class":38,"line":39},[36,130814,130815],{"class":79},".sidebar",[36,130817,3815],{"class":53649},[36,130819,2150],{"class":42},[36,130821,130822,130824,130826,130828],{"class":38,"line":54},[36,130823,130507],{"class":62},[36,130825,2158],{"class":42},[36,130827,63217],{"class":62},[36,130829,3711],{"class":42},[36,130831,130832,130834,130836,130839,130841],{"class":38,"line":66},[36,130833,72913],{"class":62},[36,130835,2158],{"class":42},[36,130837,130838],{"class":62},"234",[36,130840,53840],{"class":46},[36,130842,3711],{"class":42},[36,130844,130845,130847,130849,130851,130853],{"class":38,"line":73},[36,130846,73133],{"class":62},[36,130848,2158],{"class":42},[36,130850,3008],{"class":62},[36,130852,53840],{"class":46},[36,130854,3711],{"class":42},[36,130856,130857,130859,130861,130863,130865],{"class":38,"line":86},[36,130858,129575],{"class":62},[36,130860,2158],{"class":42},[36,130862,3008],{"class":62},[36,130864,53840],{"class":46},[36,130866,3711],{"class":42},[36,130868,130869,130871,130873,130875,130877],{"class":38,"line":126},[36,130870,73168],{"class":62},[36,130872,2158],{"class":42},[36,130874,3503],{"class":62},[36,130876,53840],{"class":46},[36,130878,3711],{"class":42},[36,130880,130881,130883,130885,130887],{"class":38,"line":131},[36,130882,73250],{"class":62},[36,130884,2158],{"class":42},[36,130886,63190],{"class":62},[36,130888,3711],{"class":42},[36,130890,130891,130893,130895,130898],{"class":38,"line":225},[36,130892,73223],{"class":62},[36,130894,2158],{"class":42},[36,130896,130897],{"class":62},"#55585a",[36,130899,3711],{"class":42},[36,130901,130902],{"class":38,"line":235},[36,130903,3982],{"class":42},[36,130905,130906,130908,130910,130912],{"class":38,"line":377},[36,130907,130815],{"class":79},[36,130909,3815],{"class":53649},[36,130911,63288],{"class":79},[36,130913,2150],{"class":42},[36,130915,130916,130918,130920,130923],{"class":38,"line":617},[36,130917,73223],{"class":62},[36,130919,2158],{"class":42},[36,130921,130922],{"class":62},"#ff6700",[36,130924,3711],{"class":42},[36,130926,130927],{"class":38,"line":643},[36,130928,3982],{"class":42},[3879,130930],{"style":128747,"src":130931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130933,130934],{},"行高=盒子高度：实现文字的垂直居中",[19,130936,130937],{},"原理讲解：",[3879,130939],{"style":128747,"src":130940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130942,130944],{"id":130943},"_82-css背景","8.2 css背景",[19,130946,130947],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1752,130949,130951],{"id":130950},"_821-背景颜色","8.2.1 背景颜色",[19,130953,130954],{},"background-color:颜色值;",[19,130956,130957],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1752,130959,130961],{"id":130960},"_822-背景图片","8.2.2 背景图片",[19,130963,130964],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,130966,130968],{"className":128891,"code":130967,"language":128893,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,130969,130970,130976,130992],{"__ignoreMap":31},[36,130971,130972,130974],{"class":38,"line":39},[36,130973,53959],{"class":53649},[36,130975,2150],{"class":42},[36,130977,130978,130981,130983,130985,130987,130990],{"class":38,"line":54},[36,130979,130980],{"class":62},"  background-image",[36,130982,2158],{"class":42},[36,130984,64074],{"class":62},[36,130986,92],{"class":42},[36,130988,130989],{"class":7598},"images\u002Fbg.png",[36,130991,5104],{"class":42},[36,130993,130994],{"class":38,"line":66},[36,130995,3982],{"class":42},[2698,130997,130998,131007],{},[2701,130999,131000],{},[2704,131001,131002,131005],{},[2707,131003,131004],{"align":26106},"参数值",[2707,131006,105036],{"align":26106},[2744,131008,131009,131016],{},[2704,131010,131011,131013],{},[2749,131012,57085],{"align":26106},[2749,131014,131015],{"align":26106},"无背景图（默认的）",[2704,131017,131018,131020],{},[2749,131019,64074],{"align":26106},[2749,131021,131022],{"align":26106},"使用绝对或相对地址指定背景图像",[26,131024,131025],{"className":128891,"code":130967,"language":128893,"meta":31,"style":31},[33,131026,131027,131033,131047],{"__ignoreMap":31},[36,131028,131029,131031],{"class":38,"line":39},[36,131030,53959],{"class":53649},[36,131032,2150],{"class":42},[36,131034,131035,131037,131039,131041,131043,131045],{"class":38,"line":54},[36,131036,130980],{"class":62},[36,131038,2158],{"class":42},[36,131040,64074],{"class":62},[36,131042,92],{"class":42},[36,131044,130989],{"class":7598},[36,131046,5104],{"class":42},[36,131048,131049],{"class":38,"line":66},[36,131050,3982],{"class":42},[19,131052,131053],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1752,131055,131057],{"id":131056},"_823-背景平铺","8.2.3 背景平铺",[26,131059,131061],{"className":128891,"code":131060,"language":128893,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,131062,131063,131069,131080],{"__ignoreMap":31},[36,131064,131065,131067],{"class":38,"line":39},[36,131066,53959],{"class":53649},[36,131068,2150],{"class":42},[36,131070,131071,131074,131076,131078],{"class":38,"line":54},[36,131072,131073],{"class":62},"  background-repeat",[36,131075,2158],{"class":42},[36,131077,64084],{"class":62},[36,131079,3711],{"class":42},[36,131081,131082],{"class":38,"line":66},[36,131083,3982],{"class":42},[2698,131085,131086,131094],{},[2701,131087,131088],{},[2704,131089,131090,131092],{},[2707,131091,131004],{"align":26106},[2707,131093,105036],{"align":26106},[2744,131095,131096,131104,131111,131119],{},[2704,131097,131098,131101],{},[2749,131099,131100],{"align":26106},"repeat",[2749,131102,131103],{"align":26106},"背景图像在纵向和横向上平铺（默认的）",[2704,131105,131106,131108],{},[2749,131107,64084],{"align":26106},[2749,131109,131110],{"align":26106},"背景图像不平铺",[2704,131112,131113,131116],{},[2749,131114,131115],{"align":26106},"repeat-x",[2749,131117,131118],{"align":26106},"背景图像在横向上平铺",[2704,131120,131121,131124],{},[2749,131122,131123],{"align":26106},"repeat-y",[2749,131125,131126],{"align":26106},"背景图像在纵向平铺",[1752,131128,131130],{"id":131129},"_824-背景图片位置","8.2.4 背景图片位置",[26,131132,131134],{"className":128891,"code":131133,"language":128893,"meta":31,"style":31},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[33,131135,131136,131141,131147,131161,131165,131170,131176,131192,131196,131201,131207,131221],{"__ignoreMap":31},[36,131137,131138],{"class":38,"line":39},[36,131139,131140],{"class":2621},"\u002F* 方位名词 *\u002F\n",[36,131142,131143,131145],{"class":38,"line":54},[36,131144,53959],{"class":53649},[36,131146,2150],{"class":42},[36,131148,131149,131152,131154,131156,131159],{"class":38,"line":66},[36,131150,131151],{"class":62},"  background-position",[36,131153,2158],{"class":42},[36,131155,53940],{"class":62},[36,131157,131158],{"class":62}," top",[36,131160,3711],{"class":42},[36,131162,131163],{"class":38,"line":73},[36,131164,3982],{"class":42},[36,131166,131167],{"class":38,"line":86},[36,131168,131169],{"class":2621},"\u002F* 精确单位 *\u002F\n",[36,131171,131172,131174],{"class":38,"line":126},[36,131173,53959],{"class":53649},[36,131175,2150],{"class":42},[36,131177,131178,131180,131182,131184,131186,131188,131190],{"class":38,"line":131},[36,131179,131151],{"class":62},[36,131181,2158],{"class":42},[36,131183,3254],{"class":62},[36,131185,53840],{"class":46},[36,131187,59852],{"class":62},[36,131189,53840],{"class":46},[36,131191,3711],{"class":42},[36,131193,131194],{"class":38,"line":225},[36,131195,3982],{"class":42},[36,131197,131198],{"class":38,"line":235},[36,131199,131200],{"class":2621},"\u002F* 混合单位 *\u002F\n",[36,131202,131203,131205],{"class":38,"line":377},[36,131204,53959],{"class":53649},[36,131206,2150],{"class":42},[36,131208,131209,131211,131213,131215,131217,131219],{"class":38,"line":617},[36,131210,131151],{"class":62},[36,131212,2158],{"class":42},[36,131214,3254],{"class":62},[36,131216,53840],{"class":46},[36,131218,19517],{"class":62},[36,131220,3711],{"class":42},[36,131222,131223],{"class":38,"line":643},[36,131224,3982],{"class":42},[19,131226,131227],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2698,131229,131230,131238],{},[2701,131231,131232],{},[2704,131233,131234,131236],{},[2707,131235,131004],{"align":26106},[2707,131237,28239],{"align":26106},[2744,131239,131240,131247],{},[2704,131241,131242,131244],{},[2749,131243,54316],{"align":26106},[2749,131245,131246],{"align":26106},"百分数|由浮点数和单位标识符组成的长度值",[2704,131248,131249,131252],{},[2749,131250,131251],{"align":26106},"position",[2749,131253,131254],{"align":26106},"top|center|bottom|left|center|right 方位名词",[19,131256,131257],{},"其他说明：",[19,131259,131260],{},"①参数是方位名词",[19,131262,131263],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131265,131266],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131268,131269],{},"②参数是精确单位",[19,131271,131272],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131274,131275],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131277,131278],{},"③参数是混合单位",[19,131280,131281],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1752,131283,131285],{"id":131284},"_825-背景图片固定","8.2.5 背景图片固定",[26,131287,131289],{"className":128891,"code":131288,"language":128893,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,131290,131291,131296,131302,131314,131318,131323,131329,131339],{"__ignoreMap":31},[36,131292,131293],{"class":38,"line":39},[36,131294,131295],{"class":2621},"\u002F* 背景滚动（默认） *\u002F\n",[36,131297,131298,131300],{"class":38,"line":54},[36,131299,53959],{"class":53649},[36,131301,2150],{"class":42},[36,131303,131304,131307,131309,131312],{"class":38,"line":66},[36,131305,131306],{"class":62},"  background-attachment",[36,131308,2158],{"class":42},[36,131310,131311],{"class":62},"scroll",[36,131313,3711],{"class":42},[36,131315,131316],{"class":38,"line":73},[36,131317,3982],{"class":42},[36,131319,131320],{"class":38,"line":86},[36,131321,131322],{"class":2621},"\u002F* 背景固定 *\u002F\n",[36,131324,131325,131327],{"class":38,"line":126},[36,131326,53959],{"class":53649},[36,131328,2150],{"class":42},[36,131330,131331,131333,131335,131337],{"class":38,"line":131},[36,131332,131306],{"class":62},[36,131334,2158],{"class":42},[36,131336,88575],{"class":62},[36,131338,3711],{"class":42},[36,131340,131341],{"class":38,"line":225},[36,131342,3982],{"class":42},[2698,131344,131345,131354],{},[2701,131346,131347],{},[2704,131348,131349,131352],{},[2707,131350,131351],{"align":26106},"参数",[2707,131353,105036],{"align":26106},[2744,131355,131356,131363],{},[2704,131357,131358,131360],{},[2749,131359,131311],{"align":26106},[2749,131361,131362],{"align":26106},"背景图像是随对象内容滚动",[2704,131364,131365,131367],{},[2749,131366,88575],{"align":26106},[2749,131368,131369],{"align":26106},"背景图像固定",[1752,131371,131373],{"id":131372},"_826-背景样式合写","8.2.6 背景样式合写",[26,131375,131377],{"className":128891,"code":131376,"language":128893,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,131378,131379,131384,131390,131418],{"__ignoreMap":31},[36,131380,131381],{"class":38,"line":39},[36,131382,131383],{"class":2621},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,131385,131386,131388],{"class":38,"line":54},[36,131387,53959],{"class":53649},[36,131389,2150],{"class":42},[36,131391,131392,131394,131396,131398,131401,131403,131405,131407,131409,131412,131414,131416],{"class":38,"line":66},[36,131393,72956],{"class":62},[36,131395,2158],{"class":42},[36,131397,63190],{"class":62},[36,131399,131400],{"class":62}," url",[36,131402,92],{"class":42},[36,131404,130989],{"class":7598},[36,131406,16091],{"class":42},[36,131408,64084],{"class":62},[36,131410,131411],{"class":62}," fixed",[36,131413,19517],{"class":62},[36,131415,131158],{"class":62},[36,131417,3711],{"class":42},[36,131419,131420],{"class":38,"line":73},[36,131421,3982],{"class":42},[1752,131423,131425],{"id":131424},"_827-背景色半透明","8.2.7 背景色半透明",[26,131427,131429],{"className":128891,"code":131428,"language":128893,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,131430,131431,131437,131463],{"__ignoreMap":31},[36,131432,131433,131435],{"class":38,"line":39},[36,131434,53959],{"class":53649},[36,131436,2150],{"class":42},[36,131438,131439,131441,131443,131445,131447,131449,131451,131453,131455,131457,131459,131461],{"class":38,"line":54},[36,131440,72956],{"class":62},[36,131442,2158],{"class":42},[36,131444,57458],{"class":62},[36,131446,92],{"class":42},[36,131448,2751],{"class":62},[36,131450,630],{"class":42},[36,131452,2751],{"class":62},[36,131454,630],{"class":42},[36,131456,2751],{"class":62},[36,131458,630],{"class":42},[36,131460,102862],{"class":62},[36,131462,5104],{"class":42},[36,131464,131465],{"class":38,"line":66},[36,131466,3982],{"class":42},[19,131468,101737],{},[19,131470,131471],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131473,131474],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131476,131477],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131479,131480],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1752,131482,131484],{"id":131483},"_828-总结","8.2.8 总结",[2698,131486,131487,131498],{},[2701,131488,131489],{},[2704,131490,131491,131494,131496],{},[2707,131492,131493],{"align":26106},"属性",[2707,131495,105036],{"align":26106},[2707,131497,2712],{"align":26106},[2744,131499,131500,131511,131522,131533,131544,131555,131566],{},[2704,131501,131502,131505,131508],{},[2749,131503,131504],{"align":26106},"background-color",[2749,131506,131507],{"align":26106},"背景颜色",[2749,131509,131510],{"align":26106},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2704,131512,131513,131516,131519],{},[2749,131514,131515],{"align":26106},"background-image",[2749,131517,131518],{"align":26106},"背景图片",[2749,131520,131521],{"align":26106},"url(图片路径)",[2704,131523,131524,131527,131530],{},[2749,131525,131526],{"align":26106},"background-repeat",[2749,131528,131529],{"align":26106},"是否平铺",[2749,131531,131532],{"align":26106},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2704,131534,131535,131538,131541],{},[2749,131536,131537],{"align":26106},"background-position",[2749,131539,131540],{"align":26106},"背景位置",[2749,131542,131543],{"align":26106},"length\u002Fposition 分别是x和y坐标",[2704,131545,131546,131549,131552],{},[2749,131547,131548],{"align":26106},"background-attachment",[2749,131550,131551],{"align":26106},"背景附着",[2749,131553,131554],{"align":26106},"scroll(背景滚动) \u002Ffixed (背景固定)",[2704,131556,131557,131560,131563],{},[2749,131558,131559],{"align":26106},"背景简写",[2749,131561,131562],{"align":26106},"书写更简单",[2749,131564,131565],{"align":26106},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2704,131567,131568,131571,131574],{},[2749,131569,131570],{"align":26106},"背景半透明",[2749,131572,131573],{"align":26106},"背景颜色半透明",[2749,131575,131576],{"align":26106},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131578,131579],{},"颜色渐变：",[3879,131581],{"style":128747,"src":131582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3879,131584],{"style":128747,"src":131585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1752,131587,131589],{"id":131588},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,131591,131593],{"className":129638,"code":131592,"language":129640,"meta":31,"style":31},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[33,131594,131595,131610,131629,131648,131667,131686,131705],{"__ignoreMap":31},[36,131596,131597,131599,131601,131603,131605,131608],{"class":38,"line":39},[36,131598,3463],{"class":42},[36,131600,53959],{"class":53649},[36,131602,55834],{"class":79},[36,131604,47],{"class":42},[36,131606,131607],{"class":50},"\"nav\"",[36,131609,53656],{"class":42},[36,131611,131612,131614,131616,131618,131620,131622,131625,131627],{"class":38,"line":54},[36,131613,54492],{"class":42},[36,131615,2796],{"class":53649},[36,131617,63405],{"class":79},[36,131619,47],{"class":42},[36,131621,63410],{"class":50},[36,131623,131624],{"class":42},">五彩导航1\u003C\u002F",[36,131626,2796],{"class":53649},[36,131628,53656],{"class":42},[36,131630,131631,131633,131635,131637,131639,131641,131644,131646],{"class":38,"line":66},[36,131632,54492],{"class":42},[36,131634,2796],{"class":53649},[36,131636,63405],{"class":79},[36,131638,47],{"class":42},[36,131640,63410],{"class":50},[36,131642,131643],{"class":42},">五彩导航2\u003C\u002F",[36,131645,2796],{"class":53649},[36,131647,53656],{"class":42},[36,131649,131650,131652,131654,131656,131658,131660,131663,131665],{"class":38,"line":73},[36,131651,54492],{"class":42},[36,131653,2796],{"class":53649},[36,131655,63405],{"class":79},[36,131657,47],{"class":42},[36,131659,63410],{"class":50},[36,131661,131662],{"class":42},">五彩导航3\u003C\u002F",[36,131664,2796],{"class":53649},[36,131666,53656],{"class":42},[36,131668,131669,131671,131673,131675,131677,131679,131682,131684],{"class":38,"line":86},[36,131670,54492],{"class":42},[36,131672,2796],{"class":53649},[36,131674,63405],{"class":79},[36,131676,47],{"class":42},[36,131678,63410],{"class":50},[36,131680,131681],{"class":42},">五彩导航4\u003C\u002F",[36,131683,2796],{"class":53649},[36,131685,53656],{"class":42},[36,131687,131688,131690,131692,131694,131696,131698,131701,131703],{"class":38,"line":126},[36,131689,54492],{"class":42},[36,131691,2796],{"class":53649},[36,131693,63405],{"class":79},[36,131695,47],{"class":42},[36,131697,63410],{"class":50},[36,131699,131700],{"class":42},">五彩导航5\u003C\u002F",[36,131702,2796],{"class":53649},[36,131704,53656],{"class":42},[36,131706,131707,131709,131711],{"class":38,"line":131},[36,131708,54133],{"class":42},[36,131710,53959],{"class":53649},[36,131712,53656],{"class":42},[26,131714,131716],{"className":128891,"code":131715,"language":128893,"meta":31,"style":31},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[33,131717,131718,131727,131737,131749,131761,131771,131783,131793,131797,131822,131845,131868,131891],{"__ignoreMap":31},[36,131719,131720,131723,131725],{"class":38,"line":39},[36,131721,131722],{"class":79},".nav",[36,131724,3815],{"class":53649},[36,131726,2150],{"class":42},[36,131728,131729,131731,131733,131735],{"class":38,"line":54},[36,131730,130507],{"class":62},[36,131732,2158],{"class":42},[36,131734,74728],{"class":62},[36,131736,3711],{"class":42},[36,131738,131739,131741,131743,131745,131747],{"class":38,"line":66},[36,131740,72913],{"class":62},[36,131742,2158],{"class":42},[36,131744,3371],{"class":62},[36,131746,53840],{"class":46},[36,131748,3711],{"class":42},[36,131750,131751,131753,131755,131757,131759],{"class":38,"line":73},[36,131752,73133],{"class":62},[36,131754,2158],{"class":42},[36,131756,3410],{"class":62},[36,131758,53840],{"class":46},[36,131760,3711],{"class":42},[36,131762,131763,131765,131767,131769],{"class":38,"line":86},[36,131764,72871],{"class":62},[36,131766,2158],{"class":42},[36,131768,53940],{"class":62},[36,131770,3711],{"class":42},[36,131772,131773,131775,131777,131779,131781],{"class":38,"line":126},[36,131774,129575],{"class":62},[36,131776,2158],{"class":42},[36,131778,3410],{"class":62},[36,131780,53840],{"class":46},[36,131782,3711],{"class":42},[36,131784,131785,131787,131789,131791],{"class":38,"line":131},[36,131786,73250],{"class":62},[36,131788,2158],{"class":42},[36,131790,63190],{"class":62},[36,131792,3711],{"class":42},[36,131794,131795],{"class":38,"line":225},[36,131796,3982],{"class":42},[36,131798,131799,131801,131803,131806,131808,131810,131813,131815,131817,131819],{"class":38,"line":235},[36,131800,131722],{"class":79},[36,131802,3815],{"class":53649},[36,131804,131805],{"class":79},":nth-child",[36,131807,92],{"class":42},[36,131809,1906],{"class":62},[36,131811,131812],{"class":42},") { ",[36,131814,131504],{"class":62},[36,131816,2158],{"class":42},[36,131818,130922],{"class":62},[36,131820,131821],{"class":42},"; }\n",[36,131823,131824,131826,131828,131830,131832,131834,131836,131838,131840,131843],{"class":38,"line":377},[36,131825,131722],{"class":79},[36,131827,3815],{"class":53649},[36,131829,131805],{"class":79},[36,131831,92],{"class":42},[36,131833,1911],{"class":62},[36,131835,131812],{"class":42},[36,131837,131504],{"class":62},[36,131839,2158],{"class":42},[36,131841,131842],{"class":62},"#ff0000",[36,131844,131821],{"class":42},[36,131846,131847,131849,131851,131853,131855,131857,131859,131861,131863,131866],{"class":38,"line":617},[36,131848,131722],{"class":79},[36,131850,3815],{"class":53649},[36,131852,131805],{"class":79},[36,131854,92],{"class":42},[36,131856,2634],{"class":62},[36,131858,131812],{"class":42},[36,131860,131504],{"class":62},[36,131862,2158],{"class":42},[36,131864,131865],{"class":62},"#00a4ff",[36,131867,131821],{"class":42},[36,131869,131870,131872,131874,131876,131878,131880,131882,131884,131886,131889],{"class":38,"line":643},[36,131871,131722],{"class":79},[36,131873,3815],{"class":53649},[36,131875,131805],{"class":79},[36,131877,92],{"class":42},[36,131879,2850],{"class":62},[36,131881,131812],{"class":42},[36,131883,131504],{"class":62},[36,131885,2158],{"class":42},[36,131887,131888],{"class":62},"#ff00ff",[36,131890,131821],{"class":42},[36,131892,131893,131895,131897,131899,131901,131903,131905,131907,131909,131912],{"class":38,"line":921},[36,131894,131722],{"class":79},[36,131896,3815],{"class":53649},[36,131898,131805],{"class":79},[36,131900,92],{"class":42},[36,131902,2875],{"class":62},[36,131904,131812],{"class":42},[36,131906,131504],{"class":62},[36,131908,2158],{"class":42},[36,131910,131911],{"class":62},"#00ff00",[36,131913,131821],{"class":42},[14,131915,131917],{"id":131916},"_83-css三大特性","8.3 css三大特性",[1752,131919,131921],{"id":131920},"_831-层叠性","8.3.1 层叠性",[19,131923,131924],{},"为了解决样式冲突问题",[19,131926,131927],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131929,131930],{},"   ②样式不冲突，不会层叠",[1752,131932,131934],{"id":131933},"_832-继承性","8.3.2 继承性",[19,131936,131937],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131939,131940],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,131942,131944],{"className":128891,"code":131943,"language":128893,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,131945,131946,131952,131962],{"__ignoreMap":31},[36,131947,131948,131950],{"class":38,"line":39},[36,131949,19],{"class":53649},[36,131951,2150],{"class":42},[36,131953,131954,131956,131958,131960],{"class":38,"line":54},[36,131955,73250],{"class":62},[36,131957,2158],{"class":42},[36,131959,64717],{"class":62},[36,131961,3711],{"class":42},[36,131963,131964],{"class":38,"line":66},[36,131965,3982],{"class":42},[3879,131967],{"style":128747,"src":131968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131970,131971],{},"解释：①行高可以跟单位也可以不跟单位",[19,131973,131974],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131976,131977],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131979,131980],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1752,131982,131984],{"id":131983},"_833-优先级","8.3.3 优先级",[650,131986,131987,131990],{},[653,131988,131989],{},"选择器相同，则执行层叠性",[653,131991,131992],{},"选择器不同，则根据选择器权重执行",[2698,131994,131995,132005],{},[2701,131996,131997],{},[2704,131998,131999,132002],{},[2707,132000,132001],{"align":26106},"选择器",[2707,132003,132004],{"align":26106},"选择器权重",[2744,132006,132007,132015,132023,132031,132039,132047],{},[2704,132008,132009,132012],{},[2749,132010,132011],{"align":26106},"继承 或者*",[2749,132013,132014],{"align":26106},"0，0，0，0",[2704,132016,132017,132020],{},[2749,132018,132019],{"align":26106},"标签选择器",[2749,132021,132022],{"align":26106},"0，0，0，1",[2704,132024,132025,132028],{},[2749,132026,132027],{"align":26106},"类选择器，伪类选择器",[2749,132029,132030],{"align":26106},"0，0，1，0",[2704,132032,132033,132036],{},[2749,132034,132035],{"align":26106},"ID选择器",[2749,132037,132038],{"align":26106},"0，1，0，0",[2704,132040,132041,132044],{},[2749,132042,132043],{"align":26106},"行内样式",[2749,132045,132046],{"align":26106},"1，0，0，0",[2704,132048,132049,132052],{},[2749,132050,132051],{"align":26106},"！important",[2749,132053,132054],{"align":26106},"无穷大",[19,132056,132057],{},"! important用法：",[26,132059,132061],{"className":128891,"code":132060,"language":128893,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,132062,132063,132068,132074,132087,132091,132096,132102,132112],{"__ignoreMap":31},[36,132064,132065],{"class":38,"line":39},[36,132066,132067],{"class":2621},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,132069,132070,132072],{"class":38,"line":54},[36,132071,53959],{"class":53649},[36,132073,2150],{"class":42},[36,132075,132076,132078,132080,132082,132085],{"class":38,"line":66},[36,132077,73250],{"class":62},[36,132079,2158],{"class":42},[36,132081,53993],{"class":62},[36,132083,132084],{"class":46}," !important",[36,132086,3711],{"class":42},[36,132088,132089],{"class":38,"line":73},[36,132090,3982],{"class":42},[36,132092,132093],{"class":38,"line":86},[36,132094,132095],{"class":2621},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,132097,132098,132100],{"class":38,"line":126},[36,132099,53959],{"class":53649},[36,132101,2150],{"class":42},[36,132103,132104,132106,132108,132110],{"class":38,"line":131},[36,132105,73250],{"class":62},[36,132107,2158],{"class":42},[36,132109,59769],{"class":62},[36,132111,3711],{"class":42},[36,132113,132114],{"class":38,"line":225},[36,132115,3982],{"class":42},[19,132117,132118],{},"优先级注意点：",[19,132120,132121],{},"①权重是有4组数字组成,但是不会有进位",[19,132123,132124],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132126,132127],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132129,132130],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132132,132133],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132135,132136],{},"⑥复合选择器",[2698,132138,132139,132149],{},[2701,132140,132141],{},[2704,132142,132143,132146],{},[2707,132144,132145],{"align":26106},"div ul li",[2707,132147,132148],{"align":26106},"0,0,0,3",[2744,132150,132151,132159,132167],{},[2704,132152,132153,132156],{},[2749,132154,132155],{"align":26106},".nav ul li",[2749,132157,132158],{"align":26106},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2704,132160,132161,132164],{},[2749,132162,132163],{"align":26106},"a:hover",[2749,132165,132166],{"align":26106},"0,0,1,1",[2704,132168,132169,132172],{},[2749,132170,132171],{"align":26106},".nav a",[2749,132173,132166],{"align":26106},[2467,132175,132176],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":132178},[132179,132187,132198],{"id":130287,"depth":54,"text":130288,"children":132180},[132181,132182,132183,132184,132185,132186],{"id":130300,"depth":66,"text":130301},{"id":130372,"depth":66,"text":130373},{"id":130444,"depth":66,"text":130445},{"id":130475,"depth":66,"text":130476},{"id":130482,"depth":66,"text":130483},{"id":130635,"depth":66,"text":130636},{"id":130943,"depth":54,"text":130944,"children":132188},[132189,132190,132191,132192,132193,132194,132195,132196,132197],{"id":130950,"depth":66,"text":130951},{"id":130960,"depth":66,"text":130961},{"id":131056,"depth":66,"text":131057},{"id":131129,"depth":66,"text":131130},{"id":131284,"depth":66,"text":131285},{"id":131372,"depth":66,"text":131373},{"id":131424,"depth":66,"text":131425},{"id":131483,"depth":66,"text":131484},{"id":131588,"depth":66,"text":131589},{"id":131916,"depth":54,"text":131917,"children":132199},[132200,132201,132202],{"id":131920,"depth":66,"text":131921},{"id":131933,"depth":66,"text":131934},{"id":131983,"depth":66,"text":131984},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130279,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132209,"title":132210,"body":132211,"description":2493,"extension":2494,"meta":133801,"navigation":69,"path":133802,"seo":133803,"stem":133804,"__hash__":133805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132212,"toc":133780},[132213,132216,132220,132223,132226,132229,132232,132235,132238,132241,132245,132253,132290,132326,132329,132343,132348,132382,132385,132478,132483,132486,132516,132519,132524,132532,132536,132543,132589,132633,132638,132641,132644,132647,132650,132653,132656,132658,132661,132665,132670,132714,132719,132722,132725,132762,132767,132770,132773,132776,132779,132811,132814,132817,132820,132852,132855,132858,132861,132865,132868,132900,132903,132907,132927,132930,132938,132941,132945,132950,132953,132985,132990,132993,133031,133035,133040,133043,133046,133077,133080,133097,133102,133154,133214,133219,133273,133311,133315,133319,133322,133326,133334,133337,133339,133350,133355,133403,133437,133440,133443,133446,133449,133493,133496,133499,133502,133505,133508,133511,133555,133558,133561,133564,133567,133570,133573,133579,133582,133626,133629,133632,133635,133638,133641,133685,133688,133690,133693,133697,133701,133739,133743,133746,133749,133753,133761,133765,133768,133771,133774,133777],[10,132214,132210],{"id":132215},"_9-css盒模型浮动与切图",[14,132217,132219],{"id":132218},"_91-盒子模型","9.1 盒子模型",[19,132221,132222],{},"利用盒子来设计网页",[19,132224,132225],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132227,132228],{},"网页布局设置：",[19,132230,132231],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132233,132234],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132236,132237],{},"③往盒子里装内容",[3879,132239],{"style":128747,"src":132240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1752,132242,132244],{"id":132243},"_911-边框border","9.1.1 边框（border）",[650,132246,132247,132250],{},[653,132248,132249],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[653,132251,132252],{},"语法",[26,132254,132256],{"className":128891,"code":132255,"language":128893,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,132257,132258,132263,132269,132286],{"__ignoreMap":31},[36,132259,132260],{"class":38,"line":39},[36,132261,132262],{"class":2621},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,132264,132265,132267],{"class":38,"line":54},[36,132266,53959],{"class":53649},[36,132268,2150],{"class":42},[36,132270,132271,132273,132275,132277,132279,132281,132284],{"class":38,"line":66},[36,132272,73241],{"class":62},[36,132274,2158],{"class":42},[36,132276,1906],{"class":62},[36,132278,53840],{"class":46},[36,132280,53869],{"class":62},[36,132282,132283],{"class":62}," #ccc",[36,132285,3711],{"class":42},[36,132287,132288],{"class":38,"line":73},[36,132289,3982],{"class":42},[2698,132291,132292,132300],{},[2701,132293,132294],{},[2704,132295,132296,132298],{},[2707,132297,131493],{"align":26106},[2707,132299,105036],{"align":26106},[2744,132301,132302,132310,132318],{},[2704,132303,132304,132307],{},[2749,132305,132306],{"align":26106},"border-width",[2749,132308,132309],{"align":26106},"定义边框粗细，单位是px",[2704,132311,132312,132315],{},[2749,132313,132314],{"align":26106},"border-style",[2749,132316,132317],{"align":26106},"边框的样式",[2704,132319,132320,132323],{},[2749,132321,132322],{"align":26106},"border-color",[2749,132324,132325],{"align":26106},"边框的颜色",[19,132327,132328],{},"边框样式 border-style 可以设置如下值：",[3557,132330,132331,132334,132337,132340],{},[653,132332,132333],{},"none：没有边框即忽略所有边框的宽度（默认值）",[653,132335,132336],{},"solid：边框为单实线(最为常用的)",[653,132338,132339],{},"dashed：边框为虚线",[653,132341,132342],{},"dotted：边框为点线",[650,132344,132345],{"start":66},[653,132346,132347],{},"边框的合写分写",[26,132349,132350],{"className":128891,"code":132255,"language":128893,"meta":31,"style":31},[33,132351,132352,132356,132362,132378],{"__ignoreMap":31},[36,132353,132354],{"class":38,"line":39},[36,132355,132262],{"class":2621},[36,132357,132358,132360],{"class":38,"line":54},[36,132359,53959],{"class":53649},[36,132361,2150],{"class":42},[36,132363,132364,132366,132368,132370,132372,132374,132376],{"class":38,"line":66},[36,132365,73241],{"class":62},[36,132367,2158],{"class":42},[36,132369,1906],{"class":62},[36,132371,53840],{"class":46},[36,132373,53869],{"class":62},[36,132375,132283],{"class":62},[36,132377,3711],{"class":42},[36,132379,132380],{"class":38,"line":73},[36,132381,3982],{"class":42},[19,132383,132384],{},"边框分开写法：",[26,132386,132388],{"className":128891,"code":132387,"language":128893,"meta":31,"style":31},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[33,132389,132390,132395,132401,132419,132437,132456,132474],{"__ignoreMap":31},[36,132391,132392],{"class":38,"line":39},[36,132393,132394],{"class":2621},"\u002F* 边框分开写法 *\u002F\n",[36,132396,132397,132399],{"class":38,"line":54},[36,132398,53959],{"class":53649},[36,132400,2150],{"class":42},[36,132402,132403,132406,132408,132410,132412,132414,132417],{"class":38,"line":66},[36,132404,132405],{"class":62},"  border-top",[36,132407,2158],{"class":42},[36,132409,1906],{"class":62},[36,132411,53840],{"class":46},[36,132413,53869],{"class":62},[36,132415,132416],{"class":62}," #000",[36,132418,3711],{"class":42},[36,132420,132421,132424,132426,132428,132430,132432,132435],{"class":38,"line":73},[36,132422,132423],{"class":62},"  border-right",[36,132425,2158],{"class":42},[36,132427,1911],{"class":62},[36,132429,53840],{"class":46},[36,132431,64589],{"class":62},[36,132433,132434],{"class":62}," #333",[36,132436,3711],{"class":42},[36,132438,132439,132442,132444,132446,132448,132451,132454],{"class":38,"line":86},[36,132440,132441],{"class":62},"  border-bottom",[36,132443,2158],{"class":42},[36,132445,2634],{"class":62},[36,132447,53840],{"class":46},[36,132449,132450],{"class":62}," dotted",[36,132452,132453],{"class":62}," #666",[36,132455,3711],{"class":42},[36,132457,132458,132461,132463,132465,132467,132469,132472],{"class":38,"line":126},[36,132459,132460],{"class":62},"  border-left",[36,132462,2158],{"class":42},[36,132464,1906],{"class":62},[36,132466,53840],{"class":46},[36,132468,53869],{"class":62},[36,132470,132471],{"class":62}," #999",[36,132473,3711],{"class":42},[36,132475,132476],{"class":38,"line":131},[36,132477,3982],{"class":42},[650,132479,132480],{"start":73},[653,132481,132482],{},"表格的细线边框",[19,132484,132485],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,132487,132489],{"className":128891,"code":132488,"language":128893,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,132490,132491,132496,132502,132512],{"__ignoreMap":31},[36,132492,132493],{"class":38,"line":39},[36,132494,132495],{"class":2621},"\u002F* 表格细线边框合并 *\u002F\n",[36,132497,132498,132500],{"class":38,"line":54},[36,132499,2698],{"class":53649},[36,132501,2150],{"class":42},[36,132503,132504,132506,132508,132510],{"class":38,"line":66},[36,132505,72923],{"class":62},[36,132507,2158],{"class":42},[36,132509,67382],{"class":62},[36,132511,3711],{"class":42},[36,132513,132514],{"class":38,"line":73},[36,132515,3982],{"class":42},[19,132517,132518],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[650,132520,132521],{"start":86},[653,132522,132523],{},"解决边框额外增加盒子的实际大小的方法：",[3557,132525,132526,132529],{},[653,132527,132528],{},"测量盒子大小的时候,不量边框",[653,132530,132531],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1752,132533,132535],{"id":132534},"_912-内边距","9.1.2 内边距",[650,132537,132538,132541],{},[653,132539,132540],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[653,132542,132252],{},[2698,132544,132545,132555],{},[2701,132546,132547],{},[2704,132548,132549,132552],{},[2707,132550,132551],{"align":26106},"值的个数",[2707,132553,132554],{"align":26106},"表达意思",[2744,132556,132557,132565,132573,132581],{},[2704,132558,132559,132562],{},[2749,132560,132561],{"align":26106},"padding: 5px;",[2749,132563,132564],{"align":26106},"1个值，代表上下左右都有5个元素",[2704,132566,132567,132570],{},[2749,132568,132569],{"align":26106},"padding: 5px 10px;",[2749,132571,132572],{"align":26106},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2704,132574,132575,132578],{},[2749,132576,132577],{"align":26106},"padding: 5px 10px 20px;",[2749,132579,132580],{"align":26106},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2704,132582,132583,132586],{},[2749,132584,132585],{"align":26106},"padding: 5px 10px 20px 30px;",[2749,132587,132588],{"align":26106},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2698,132590,132591,132599],{},[2701,132592,132593],{},[2704,132594,132595,132597],{},[2707,132596,131493],{"align":26106},[2707,132598,105036],{"align":26106},[2744,132600,132601,132609,132617,132625],{},[2704,132602,132603,132606],{},[2749,132604,132605],{"align":26106},"padding-left",[2749,132607,132608],{"align":26106},"左内边距",[2704,132610,132611,132614],{},[2749,132612,132613],{"align":26106},"padding-right",[2749,132615,132616],{"align":26106},"右内边距",[2704,132618,132619,132622],{},[2749,132620,132621],{"align":26106},"padding-top",[2749,132623,132624],{"align":26106},"上内边距",[2704,132626,132627,132630],{},[2749,132628,132629],{"align":26106},"padding-bottom",[2749,132631,132632],{"align":26106},"下内边距",[650,132634,132635],{"start":66},[653,132636,132637],{},"内边距会影响盒子的实际大小",[19,132639,132640],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132642,132643],{},"①内容和边框有了距离，添加了内边距",[19,132645,132646],{},"②padding影响了盒子实际大小",[19,132648,132649],{},"内边距对盒子大小的影响：",[19,132651,132652],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132654,132655],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132657,97561],{},[19,132659,132660],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1752,132662,132664],{"id":132663},"_913-外边距","9.1.3 外边距",[650,132666,132667],{},[653,132668,132669],{},"控制盒子与盒子之间的距离",[2698,132671,132672,132680],{},[2701,132673,132674],{},[2704,132675,132676,132678],{},[2707,132677,131493],{"align":26106},[2707,132679,105036],{"align":26106},[2744,132681,132682,132690,132698,132706],{},[2704,132683,132684,132687],{},[2749,132685,132686],{"align":26106},"margin-left",[2749,132688,132689],{"align":26106},"左外边距",[2704,132691,132692,132695],{},[2749,132693,132694],{"align":26106},"margin-right",[2749,132696,132697],{"align":26106},"右外边距",[2704,132699,132700,132703],{},[2749,132701,132702],{"align":26106},"margin-top",[2749,132704,132705],{"align":26106},"上外边距",[2704,132707,132708,132711],{},[2749,132709,132710],{"align":26106},"margin-bottom",[2749,132712,132713],{"align":26106},"下外边距",[650,132715,132716],{"start":54},[653,132717,132718],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132720,132721],{},"①盒子必须指定了宽度（width）",[19,132723,132724],{},"②盒子左右的外边距都设置为 auto",[26,132726,132728],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,132729,132730,132735,132742,132758],{"__ignoreMap":31},[36,132731,132732],{"class":38,"line":39},[36,132733,132734],{"class":2621},"\u002F* margin 复合写法（同上） *\u002F\n",[36,132736,132737,132740],{"class":38,"line":54},[36,132738,132739],{"class":79},".box",[36,132741,2150],{"class":42},[36,132743,132744,132746,132748,132750,132752,132755],{"class":38,"line":66},[36,132745,72815],{"class":62},[36,132747,2158],{"class":42},[36,132749,2751],{"class":62},[36,132751,53904],{"class":62},[36,132753,132754],{"class":42},";  ",[36,132756,132757],{"class":2621},"\u002F* 块级盒子水平居中 *\u002F\n",[36,132759,132760],{"class":38,"line":73},[36,132761,3982],{"class":42},[650,132763,132764],{"start":66},[653,132765,132766],{},"外边距塌陷问题",[19,132768,132769],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3879,132771],{"style":128747,"src":132772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132774,132775],{},"解决方案：",[19,132777,132778],{},"①可以为父亲元素定义上边距",[26,132780,132781],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,132782,132783,132787,132793,132807],{"__ignoreMap":31},[36,132784,132785],{"class":38,"line":39},[36,132786,132734],{"class":2621},[36,132788,132789,132791],{"class":38,"line":54},[36,132790,132739],{"class":79},[36,132792,2150],{"class":42},[36,132794,132795,132797,132799,132801,132803,132805],{"class":38,"line":66},[36,132796,72815],{"class":62},[36,132798,2158],{"class":42},[36,132800,2751],{"class":62},[36,132802,53904],{"class":62},[36,132804,132754],{"class":42},[36,132806,132757],{"class":2621},[36,132808,132809],{"class":38,"line":73},[36,132810,3982],{"class":42},[19,132812,132813],{},"②可以为父亲元素定义上内边距",[19,132815,132816],{},"③可以为父亲元素添加overflow:hidden",[3879,132818],{"style":128747,"src":132819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,132821,132822],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,132823,132824,132828,132834,132848],{"__ignoreMap":31},[36,132825,132826],{"class":38,"line":39},[36,132827,132734],{"class":2621},[36,132829,132830,132832],{"class":38,"line":54},[36,132831,132739],{"class":79},[36,132833,2150],{"class":42},[36,132835,132836,132838,132840,132842,132844,132846],{"class":38,"line":66},[36,132837,72815],{"class":62},[36,132839,2158],{"class":42},[36,132841,2751],{"class":62},[36,132843,53904],{"class":62},[36,132845,132754],{"class":42},[36,132847,132757],{"class":2621},[36,132849,132850],{"class":38,"line":73},[36,132851,3982],{"class":42},[3879,132853],{"style":128747,"src":132854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132856,132857],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132859,132860],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1752,132862,132864],{"id":132863},"_914-清除内外边距","9.1.4 清除内外边距",[19,132866,132867],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,132869,132870],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,132871,132872,132876,132882,132896],{"__ignoreMap":31},[36,132873,132874],{"class":38,"line":39},[36,132875,132734],{"class":2621},[36,132877,132878,132880],{"class":38,"line":54},[36,132879,132739],{"class":79},[36,132881,2150],{"class":42},[36,132883,132884,132886,132888,132890,132892,132894],{"class":38,"line":66},[36,132885,72815],{"class":62},[36,132887,2158],{"class":42},[36,132889,2751],{"class":62},[36,132891,53904],{"class":62},[36,132893,132754],{"class":42},[36,132895,132757],{"class":2621},[36,132897,132898],{"class":38,"line":73},[36,132899,3982],{"class":42},[19,132901,132902],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1752,132904,132906],{"id":132905},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3557,132908,132909,132912,132915,132918,132921,132924],{},[653,132910,132911],{},"文件→打开 ：可以打开我们要测量的图片",[653,132913,132914],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[653,132916,132917],{},"右击标尺，把里面的单位改为像素",[653,132919,132920],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[653,132922,132923],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[653,132925,132926],{},"用选区拖动 可以测量大小",[3879,132928],{"style":128747,"src":132929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3557,132931,132932,132935],{},[653,132933,132934],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[653,132936,132937],{},"吸管取色工具",[3879,132939],{"style":128747,"src":132940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1752,132942,132944],{"id":132943},"_916-案例","9.1.6 案例",[650,132946,132947],{},[653,132948,132949],{},"小米商品",[3879,132951],{"style":128747,"src":132952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,132954,132955],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,132956,132957,132961,132967,132981],{"__ignoreMap":31},[36,132958,132959],{"class":38,"line":39},[36,132960,132734],{"class":2621},[36,132962,132963,132965],{"class":38,"line":54},[36,132964,132739],{"class":79},[36,132966,2150],{"class":42},[36,132968,132969,132971,132973,132975,132977,132979],{"class":38,"line":66},[36,132970,72815],{"class":62},[36,132972,2158],{"class":42},[36,132974,2751],{"class":62},[36,132976,53904],{"class":62},[36,132978,132754],{"class":42},[36,132980,132757],{"class":2621},[36,132982,132983],{"class":38,"line":73},[36,132984,3982],{"class":42},[650,132986,132987],{"start":54},[653,132988,132989],{},"快报模块",[3879,132991],{"style":128747,"src":132992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,132994,132996],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,132997,132998,133003,133018,133023],{"__ignoreMap":31},[36,132999,133000],{"class":38,"line":39},[36,133001,133002],{"class":2621},"\u003C!-- HTML 代码示例 -->\n",[36,133004,133005,133007,133009,133011,133013,133016],{"class":38,"line":54},[36,133006,3463],{"class":42},[36,133008,53959],{"class":53649},[36,133010,55834],{"class":79},[36,133012,47],{"class":42},[36,133014,133015],{"class":50},"\"example\"",[36,133017,53656],{"class":42},[36,133019,133020],{"class":38,"line":66},[36,133021,133022],{"class":42},"  示例内容\n",[36,133024,133025,133027,133029],{"class":38,"line":73},[36,133026,54133],{"class":42},[36,133028,53959],{"class":53649},[36,133030,53656],{"class":42},[1752,133032,133034],{"id":133033},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[650,133036,133037],{},[653,133038,133039],{},"圆角边框",[19,133041,133042],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3879,133044],{"style":128747,"src":133045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,133047,133049],{"className":128891,"code":133048,"language":128893,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,133050,133051,133057,133073],{"__ignoreMap":31},[36,133052,133053,133055],{"class":38,"line":39},[36,133054,53959],{"class":53649},[36,133056,2150],{"class":42},[36,133058,133059,133061,133063,133065,133067,133069,133071],{"class":38,"line":54},[36,133060,73241],{"class":62},[36,133062,2158],{"class":42},[36,133064,1906],{"class":62},[36,133066,53840],{"class":46},[36,133068,53869],{"class":62},[36,133070,132283],{"class":62},[36,133072,3711],{"class":42},[36,133074,133075],{"class":38,"line":66},[36,133076,3982],{"class":42},[19,133078,133079],{},"解释:",[3557,133081,133082,133085,133088,133091,133094],{},[653,133083,133084],{},"参数值可以为数值或百分比的形式",[653,133086,133087],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[653,133089,133090],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[653,133092,133093],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[653,133095,133096],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[650,133098,133099],{"start":54},[653,133100,133101],{},"盒子阴影",[26,133103,133105],{"className":128891,"code":133104,"language":128893,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,133106,133107,133113,133150],{"__ignoreMap":31},[36,133108,133109,133111],{"class":38,"line":39},[36,133110,53959],{"class":53649},[36,133112,2150],{"class":42},[36,133114,133115,133118,133120,133122,133124,133126,133128,133130,133132,133134,133136,133138,133140,133142,133144,133146,133148],{"class":38,"line":54},[36,133116,133117],{"class":62},"  box-shadow",[36,133119,2158],{"class":42},[36,133121,2751],{"class":62},[36,133123,17130],{"class":62},[36,133125,53840],{"class":46},[36,133127,4431],{"class":62},[36,133129,53840],{"class":46},[36,133131,81112],{"class":62},[36,133133,92],{"class":42},[36,133135,2751],{"class":62},[36,133137,630],{"class":42},[36,133139,2751],{"class":62},[36,133141,630],{"class":42},[36,133143,2751],{"class":62},[36,133145,630],{"class":42},[36,133147,88552],{"class":62},[36,133149,5104],{"class":42},[36,133151,133152],{"class":38,"line":66},[36,133153,3982],{"class":42},[2698,133155,133156,133164],{},[2701,133157,133158],{},[2704,133159,133160,133162],{},[2707,133161,2712],{"align":26106},[2707,133163,29859],{"align":26106},[2744,133165,133166,133174,133182,133190,133198,133206],{},[2704,133167,133168,133171],{},[2749,133169,133170],{"align":26106},"h-shadow",[2749,133172,133173],{"align":26106},"必需,水平阴影的位置,允许负值",[2704,133175,133176,133179],{},[2749,133177,133178],{"align":26106},"v-shadow",[2749,133180,133181],{"align":26106},"必需,垂直阴影的位置,允许负值",[2704,133183,133184,133187],{},[2749,133185,133186],{"align":26106},"blur",[2749,133188,133189],{"align":26106},"可选,模糊距离,就是影子的虚实",[2704,133191,133192,133195],{},[2749,133193,133194],{"align":26106},"spread",[2749,133196,133197],{"align":26106},"可选,阴影尺寸",[2704,133199,133200,133203],{},[2749,133201,133202],{"align":26106},"color",[2749,133204,133205],{"align":26106},"可选,阴影的颜色",[2704,133207,133208,133211],{},[2749,133209,133210],{"align":26106},"inset",[2749,133212,133213],{"align":26106},"可选,将外部阴影(outset)改为内部阴影",[650,133215,133216],{"start":66},[653,133217,133218],{},"文字阴影",[26,133220,133222],{"className":128891,"code":133221,"language":128893,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,133223,133224,133230,133269],{"__ignoreMap":31},[36,133225,133226,133228],{"class":38,"line":39},[36,133227,19],{"class":53649},[36,133229,2150],{"class":42},[36,133231,133232,133235,133237,133239,133241,133243,133245,133247,133249,133251,133253,133255,133257,133259,133261,133263,133265,133267],{"class":38,"line":54},[36,133233,133234],{"class":62},"  text-shadow",[36,133236,2158],{"class":42},[36,133238,1906],{"class":62},[36,133240,53840],{"class":46},[36,133242,27489],{"class":62},[36,133244,53840],{"class":46},[36,133246,17130],{"class":62},[36,133248,53840],{"class":46},[36,133250,81112],{"class":62},[36,133252,92],{"class":42},[36,133254,2751],{"class":62},[36,133256,630],{"class":42},[36,133258,2751],{"class":62},[36,133260,630],{"class":42},[36,133262,2751],{"class":62},[36,133264,630],{"class":42},[36,133266,102862],{"class":62},[36,133268,5104],{"class":42},[36,133270,133271],{"class":38,"line":66},[36,133272,3982],{"class":42},[2698,133274,133275,133283],{},[2701,133276,133277],{},[2704,133278,133279,133281],{},[2707,133280,2712],{"align":26106},[2707,133282,29859],{"align":26106},[2744,133284,133285,133291,133298,133305],{},[2704,133286,133287,133289],{},[2749,133288,133170],{"align":26106},[2749,133290,133173],{"align":26106},[2704,133292,133293,133295],{},[2749,133294,133178],{"align":26106},[2749,133296,133297],{"align":26106},"必需,垂直阴影位置,允许负值",[2704,133299,133300,133302],{},[2749,133301,133186],{"align":26106},[2749,133303,133304],{"align":26106},"可选,模糊的距离",[2704,133306,133307,133309],{},[2749,133308,133202],{"align":26106},[2749,133310,133205],{"align":26106},[14,133312,133314],{"id":133313},"_92-浮动","9.2 浮动",[1752,133316,133318],{"id":133317},"_921-浮动介绍","9.2.1 浮动介绍",[19,133320,133321],{},"在16.2中详细介绍",[1752,133323,133325],{"id":133324},"_922-清除浮动","9.2.2 清除浮动",[650,133327,133328,133331],{},[653,133329,133330],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[653,133332,133333],{},"清除浮动的本质",[19,133335,133336],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133338,11405],{},[3557,133340,133341,133344,133347],{},[653,133342,133343],{},"如果父盒子本身有高度，则不需要清除浮动",[653,133345,133346],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[653,133348,133349],{},"父级有了高度，就不会影响下面的标准流了",[650,133351,133352],{"start":66},[653,133353,133354],{},"清除浮动样式",[26,133356,133358],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,133359,133360,133367,133378,133382,133389,133399],{"__ignoreMap":31},[36,133361,133362,133365],{"class":38,"line":39},[36,133363,133364],{"class":79},".left",[36,133366,2150],{"class":42},[36,133368,133369,133372,133374,133376],{"class":38,"line":54},[36,133370,133371],{"class":62},"  float",[36,133373,2158],{"class":42},[36,133375,26106],{"class":62},[36,133377,3711],{"class":42},[36,133379,133380],{"class":38,"line":66},[36,133381,3982],{"class":42},[36,133383,133384,133387],{"class":38,"line":73},[36,133385,133386],{"class":79},".right",[36,133388,2150],{"class":42},[36,133390,133391,133393,133395,133397],{"class":38,"line":86},[36,133392,133371],{"class":62},[36,133394,2158],{"class":42},[36,133396,74867],{"class":62},[36,133398,3711],{"class":42},[36,133400,133401],{"class":38,"line":126},[36,133402,3982],{"class":42},[2698,133404,133405,133413],{},[2701,133406,133407],{},[2704,133408,133409,133411],{},[2707,133410,129355],{"align":26106},[2707,133412,29859],{"align":26106},[2744,133414,133415,133422,133429],{},[2704,133416,133417,133419],{},[2749,133418,26106],{"align":26106},[2749,133420,133421],{"align":26106},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2704,133423,133424,133426],{},[2749,133425,74867],{"align":26106},[2749,133427,133428],{"align":26106},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2704,133430,133431,133434],{},[2749,133432,133433],{"align":26106},"both",[2749,133435,133436],{"align":26106},"同时清除左右侧浮动的影响",[19,133438,133439],{},"法一",[19,133441,133442],{},"额外标签法也称为隔墙法",[19,133444,133445],{},"使用方式：",[19,133447,133448],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,133450,133451],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,133452,133453,133459,133469,133473,133479,133489],{"__ignoreMap":31},[36,133454,133455,133457],{"class":38,"line":39},[36,133456,133364],{"class":79},[36,133458,2150],{"class":42},[36,133460,133461,133463,133465,133467],{"class":38,"line":54},[36,133462,133371],{"class":62},[36,133464,2158],{"class":42},[36,133466,26106],{"class":62},[36,133468,3711],{"class":42},[36,133470,133471],{"class":38,"line":66},[36,133472,3982],{"class":42},[36,133474,133475,133477],{"class":38,"line":73},[36,133476,133386],{"class":79},[36,133478,2150],{"class":42},[36,133480,133481,133483,133485,133487],{"class":38,"line":86},[36,133482,133371],{"class":62},[36,133484,2158],{"class":42},[36,133486,74867],{"class":62},[36,133488,3711],{"class":42},[36,133490,133491],{"class":38,"line":126},[36,133492,3982],{"class":42},[19,133494,133495],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133497,133498],{},"优点： 通俗易懂，书写方便",[19,133500,133501],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133503,133504],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133506,133507],{},"法二",[19,133509,133510],{},"父级添加overflow属性",[26,133512,133513],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,133514,133515,133521,133531,133535,133541,133551],{"__ignoreMap":31},[36,133516,133517,133519],{"class":38,"line":39},[36,133518,133364],{"class":79},[36,133520,2150],{"class":42},[36,133522,133523,133525,133527,133529],{"class":38,"line":54},[36,133524,133371],{"class":62},[36,133526,2158],{"class":42},[36,133528,26106],{"class":62},[36,133530,3711],{"class":42},[36,133532,133533],{"class":38,"line":66},[36,133534,3982],{"class":42},[36,133536,133537,133539],{"class":38,"line":73},[36,133538,133386],{"class":79},[36,133540,2150],{"class":42},[36,133542,133543,133545,133547,133549],{"class":38,"line":86},[36,133544,133371],{"class":62},[36,133546,2158],{"class":42},[36,133548,74867],{"class":62},[36,133550,3711],{"class":42},[36,133552,133553],{"class":38,"line":126},[36,133554,3982],{"class":42},[19,133556,133557],{},"overflow: hidden;",[19,133559,133560],{},"优点：代码简洁",[19,133562,133563],{},"缺点：无法显示溢出的部分",[19,133565,133566],{},"注意：是给父元素添加代码",[19,133568,133569],{},"法三",[19,133571,133572],{},"父级添加after伪元素",[19,133574,133575,133578],{},[133576,133577],"after",{}," 方式是额外标签法的升级版",[19,133580,133581],{},"使用的时候复制就可以",[26,133583,133584],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,133585,133586,133592,133602,133606,133612,133622],{"__ignoreMap":31},[36,133587,133588,133590],{"class":38,"line":39},[36,133589,133364],{"class":79},[36,133591,2150],{"class":42},[36,133593,133594,133596,133598,133600],{"class":38,"line":54},[36,133595,133371],{"class":62},[36,133597,2158],{"class":42},[36,133599,26106],{"class":62},[36,133601,3711],{"class":42},[36,133603,133604],{"class":38,"line":66},[36,133605,3982],{"class":42},[36,133607,133608,133610],{"class":38,"line":73},[36,133609,133386],{"class":79},[36,133611,2150],{"class":42},[36,133613,133614,133616,133618,133620],{"class":38,"line":86},[36,133615,133371],{"class":62},[36,133617,2158],{"class":42},[36,133619,74867],{"class":62},[36,133621,3711],{"class":42},[36,133623,133624],{"class":38,"line":126},[36,133625,3982],{"class":42},[19,133627,133628],{},"优点：没有增加标签，结构更简单",[19,133630,133631],{},"缺点：照顾低版本浏览器",[19,133633,133634],{},"代表网站： 百度、淘宝网、网易等",[19,133636,133637],{},"法四",[19,133639,133640],{},"父级添加双伪元素",[26,133642,133643],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,133644,133645,133651,133661,133665,133671,133681],{"__ignoreMap":31},[36,133646,133647,133649],{"class":38,"line":39},[36,133648,133364],{"class":79},[36,133650,2150],{"class":42},[36,133652,133653,133655,133657,133659],{"class":38,"line":54},[36,133654,133371],{"class":62},[36,133656,2158],{"class":42},[36,133658,26106],{"class":62},[36,133660,3711],{"class":42},[36,133662,133663],{"class":38,"line":66},[36,133664,3982],{"class":42},[36,133666,133667,133669],{"class":38,"line":73},[36,133668,133386],{"class":79},[36,133670,2150],{"class":42},[36,133672,133673,133675,133677,133679],{"class":38,"line":86},[36,133674,133371],{"class":62},[36,133676,2158],{"class":42},[36,133678,74867],{"class":62},[36,133680,3711],{"class":42},[36,133682,133683],{"class":38,"line":126},[36,133684,3982],{"class":42},[19,133686,133687],{},"优点：代码更简洁",[19,133689,133631],{},[19,133691,133692],{},"代表网站：小米、腾讯等",[14,133694,133696],{"id":133695},"_93-ps切图","9.3 PS切图",[1752,133698,133700],{"id":133699},"_931-常见图片格式","9.3.1 常见图片格式",[2698,133702,133703,133713],{},[2701,133704,133705],{},[2704,133706,133707,133710],{},[2707,133708,133709],{"align":26106},"jpg图像格式",[2707,133711,133712],{"align":26106},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2744,133714,133715,133723,133731],{},[2704,133716,133717,133720],{},[2749,133718,133719],{"align":26106},"gif图像格式",[2749,133721,133722],{"align":26106},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2704,133724,133725,133728],{},[2749,133726,133727],{"align":26106},"png图像格式",[2749,133729,133730],{"align":26106},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2704,133732,133733,133736],{},[2749,133734,133735],{"align":26106},"PSD图像格式",[2749,133737,133738],{"align":26106},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1752,133740,133742],{"id":133741},"_932-图层切图","9.3.2 图层切图",[19,133744,133745],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133747,133748],{},"按住shift选中两个图层->图层菜单->合并图层",[1752,133750,133752],{"id":133751},"_933-切片切图","9.3.3 切片切图",[3557,133754,133755,133758],{},[653,133756,133757],{},"利用切片工具手动划出",[653,133759,133760],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1752,133762,133764],{"id":133763},"_934-切图步骤","9.3.4 切图步骤",[19,133766,133767],{},"用切片工具选中：",[3879,133769],{"style":128747,"src":133770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133772,133773],{},"文件 -> 导出",[3879,133775],{"style":128747,"src":133776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2467,133778,133779],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":133781},[133782,133791,133795],{"id":132218,"depth":54,"text":132219,"children":133783},[133784,133785,133786,133787,133788,133789,133790],{"id":132243,"depth":66,"text":132244},{"id":132534,"depth":66,"text":132535},{"id":132663,"depth":66,"text":132664},{"id":132863,"depth":66,"text":132864},{"id":132905,"depth":66,"text":132906},{"id":132943,"depth":66,"text":132944},{"id":133033,"depth":66,"text":133034},{"id":133313,"depth":54,"text":133314,"children":133792},[133793,133794],{"id":133317,"depth":66,"text":133318},{"id":133324,"depth":66,"text":133325},{"id":133695,"depth":54,"text":133696,"children":133796},[133797,133798,133799,133800],{"id":133699,"depth":66,"text":133700},{"id":133741,"depth":66,"text":133742},{"id":133751,"depth":66,"text":133752},{"id":133763,"depth":66,"text":133764},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132210,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133807,"title":133808,"body":133809,"description":2493,"extension":2494,"meta":134450,"navigation":69,"path":134451,"seo":134452,"stem":134453,"__hash__":134454},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133810,"toc":134438},[133811,133814,133818,133844,133878,133882,133886,133889,133931,133938,133948,133956,133958,133961,133964,133967,133974,133988,133992,133995,134024,134028,134031,134045,134049,134052,134080,134084,134087,134113,134117,134122,134155,134160,134188,134192,134209,134255,134260,134304,134321,134428,134436],[10,133812,133808],{"id":133813},"_10-css规范与学成在线案例",[14,133815,133817],{"id":133816},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[650,133819,133820,133826,133832,133838],{},[653,133821,133822,133825],{},[667,133823,133824],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[653,133827,133828,133831],{},[667,133829,133830],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[653,133833,133834,133837],{},[667,133835,133836],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[653,133839,133840,133843],{},[667,133841,133842],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,133845,133846],{"className":128891,"code":132255,"language":128893,"meta":31,"style":31},[33,133847,133848,133852,133858,133874],{"__ignoreMap":31},[36,133849,133850],{"class":38,"line":39},[36,133851,132262],{"class":2621},[36,133853,133854,133856],{"class":38,"line":54},[36,133855,53959],{"class":53649},[36,133857,2150],{"class":42},[36,133859,133860,133862,133864,133866,133868,133870,133872],{"class":38,"line":66},[36,133861,73241],{"class":62},[36,133863,2158],{"class":42},[36,133865,1906],{"class":62},[36,133867,53840],{"class":46},[36,133869,53869],{"class":62},[36,133871,132283],{"class":62},[36,133873,3711],{"class":42},[36,133875,133876],{"class":38,"line":73},[36,133877,3982],{"class":42},[14,133879,133881],{"id":133880},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1752,133883,133885],{"id":133884},"_1021-header头部制作","10.2.1 header头部制作",[3879,133887],{"style":128747,"src":133888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3557,133890,133891,133898,133905,133911,133918,133925],{},[653,133892,133893,133894,133897],{},"1号是版心盒子 ",[667,133895,133896],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[653,133899,133900,133901,133904],{},"版心盒子 里面包含 2号盒子 ",[667,133902,133903],{},"logo"," 图标",[653,133906,133907,133908,133910],{},"版心盒子 里面包含 3号盒子 ",[667,133909,56061],{}," 导航栏",[653,133912,133913,133914,133917],{},"版心盒子 里面包含 4号盒子 ",[667,133915,133916],{},"search"," 搜索框",[653,133919,133920,133921,133924],{},"版心盒子 里面包含 5号盒子 ",[667,133922,133923],{},"user"," 个人信息",[653,133926,133927,133928],{},"注意，要求里面的 ",[667,133929,133930],{},"4个子盒子 必须都浮动",[650,133932,133933],{},[653,133934,133935],{},[667,133936,133937],{},"导航栏注意点:",[19,133939,133940,133941,133944,133945],{},"实际开发中， ",[667,133942,133943],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[667,133946,133947],{},"用 li 包含链接(li+a)的做法",[3557,133949,133950,133953],{},[653,133951,133952],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[653,133954,133955],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133957,11405],{},[19,133959,133960],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133962,133963],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133965,133966],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[650,133968,133969],{"start":54},[653,133970,133971],{},[667,133972,133973],{},"4号盒子search的细节：",[3557,133975,133976,133979,133982],{},[653,133977,133978],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[653,133980,133981],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[653,133983,133984,133987],{},[33,133985,133986],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1752,133989,133991],{"id":133990},"_1022-banner制作","10.2.2 banner制作",[3879,133993],{"style":128747,"src":133994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3557,133996,133997,134004,134010,134017],{},[653,133998,133999,134000,134003],{},"1号盒子是通栏的大盒子 ",[667,134001,134002],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[653,134005,134006,134007,134009],{},"2号盒子是版心 ",[667,134008,3349],{}," ， 要水平居中对齐",[653,134011,134012,134013,134016],{},"3号盒子版心内，左对齐 ",[667,134014,134015],{},"subnav"," 侧导航栏",[653,134018,134019,134020,134023],{},"4号盒子版心内，右对齐 ",[667,134021,134022],{},"course"," 课程",[1752,134025,134027],{"id":134026},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3879,134029],{"style":128747,"src":134030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3557,134032,134033,134036,134039,134042],{},[653,134034,134035],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[653,134037,134038],{},"1号盒子是标题 H3 左侧浮动",[653,134040,134041],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[653,134043,134044],{},"3号盒子 右浮动 mod 修改",[1752,134046,134048],{"id":134047},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3879,134050],{"style":128747,"src":134051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3557,134053,134054,134060,134067,134074,134077],{},[653,134055,134056,134057,134059],{},"1号盒子为最大的盒子 ",[667,134058,56062],{}," 版心水平居中对齐",[653,134061,134062,134063,134066],{},"2号盒子为上面部分 ",[667,134064,134065],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[653,134068,134069,134070,134073],{},"3号盒子为底下部分 ",[667,134071,134072],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[653,134075,134076],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[653,134078,134079],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1752,134081,134083],{"id":134082},"_1025-底部模块制作","10.2.5 底部模块制作",[3879,134085],{"style":128747,"src":134086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3557,134088,134089,134096,134099,134106],{},[653,134090,134091,134092,134095],{},"1号盒子通栏大盒子 底部 ",[667,134093,134094],{},"footer"," 给高度 底色是白色",[653,134097,134098],{},"2号盒子版心水平居中",[653,134100,134101,134102,134105],{},"3号盒子版权 ",[667,134103,134104],{},"copyright"," 左对齐",[653,134107,134108,134109,134112],{},"4号盒子 链接组 ",[667,134110,134111],{},"links"," 右对齐",[1752,134114,134116],{"id":134115},"_1026-代码模块","10.2.6 代码模块",[650,134118,134119],{},[653,134120,134121],{},"html部分",[26,134123,134125],{"className":129638,"code":134124,"language":129640,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,134126,134127],{"__ignoreMap":31},[36,134128,134129,134131,134133,134135,134137,134140,134143,134145,134148,134151,134153],{"class":38,"line":39},[36,134130,3463],{"class":42},[36,134132,2796],{"class":53649},[36,134134,63405],{"class":79},[36,134136,47],{"class":42},[36,134138,134139],{"class":50},"\"https:\u002F\u002Fexample.com\"",[36,134141,134142],{"class":79}," target",[36,134144,47],{"class":42},[36,134146,134147],{"class":50},"\"_blank\"",[36,134149,134150],{"class":42},">链接文字\u003C\u002F",[36,134152,2796],{"class":53649},[36,134154,53656],{"class":42},[650,134156,134157],{"start":54},[653,134158,134159],{},"css部分",[26,134161,134162],{"className":129638,"code":134124,"language":129640,"meta":31,"style":31},[33,134163,134164],{"__ignoreMap":31},[36,134165,134166,134168,134170,134172,134174,134176,134178,134180,134182,134184,134186],{"class":38,"line":39},[36,134167,3463],{"class":42},[36,134169,2796],{"class":53649},[36,134171,63405],{"class":79},[36,134173,47],{"class":42},[36,134175,134139],{"class":50},[36,134177,134142],{"class":79},[36,134179,47],{"class":42},[36,134181,134147],{"class":50},[36,134183,134150],{"class":42},[36,134185,2796],{"class":53649},[36,134187,53656],{"class":42},[1752,134189,134191],{"id":134190},"_1027-收获","10.2.7 收获",[650,134193,134194,134197,134200,134203,134206],{},[653,134195,134196],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[653,134198,134199],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[653,134201,134202],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[653,134204,134205],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[653,134207,134208],{},"遗忘代码",[26,134210,134212],{"className":128891,"code":134211,"language":128893,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,134213,134214,134236,134241,134251],{"__ignoreMap":31},[36,134215,134216,134218,134220,134222,134224,134226,134228,134230,134232,134234],{"class":38,"line":39},[36,134217,53959],{"class":53649},[36,134219,630],{"class":42},[36,134221,19],{"class":53649},[36,134223,630],{"class":42},[36,134225,10],{"class":53649},[36,134227,630],{"class":42},[36,134229,3557],{"class":53649},[36,134231,630],{"class":42},[36,134233,653],{"class":53649},[36,134235,2150],{"class":42},[36,134237,134238],{"class":38,"line":54},[36,134239,134240],{"class":2621},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,134242,134243,134245,134247,134249],{"class":38,"line":66},[36,134244,130507],{"class":62},[36,134246,2158],{"class":42},[36,134248,63217],{"class":62},[36,134250,3711],{"class":42},[36,134252,134253],{"class":38,"line":73},[36,134254,3982],{"class":42},[650,134256,134257],{"start":126},[653,134258,134259],{},"html引css的程序",[26,134261,134262],{"className":128891,"code":134211,"language":128893,"meta":31,"style":31},[33,134263,134264,134286,134290,134300],{"__ignoreMap":31},[36,134265,134266,134268,134270,134272,134274,134276,134278,134280,134282,134284],{"class":38,"line":39},[36,134267,53959],{"class":53649},[36,134269,630],{"class":42},[36,134271,19],{"class":53649},[36,134273,630],{"class":42},[36,134275,10],{"class":53649},[36,134277,630],{"class":42},[36,134279,3557],{"class":53649},[36,134281,630],{"class":42},[36,134283,653],{"class":53649},[36,134285,2150],{"class":42},[36,134287,134288],{"class":38,"line":54},[36,134289,134240],{"class":2621},[36,134291,134292,134294,134296,134298],{"class":38,"line":66},[36,134293,130507],{"class":62},[36,134295,2158],{"class":42},[36,134297,63217],{"class":62},[36,134299,3711],{"class":42},[36,134301,134302],{"class":38,"line":73},[36,134303,3982],{"class":42},[650,134305,134306,134309,134312,134315,134318],{"start":131},[653,134307,134308],{},"浮动的盒子不会有外边距合并问题",[653,134310,134311],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[653,134313,134314],{},"ctrl+g快速定位行；shift+alt多个光标",[653,134316,134317],{},"学习上方各个模块的选择器起名方法，以后就这样用",[653,134319,134320],{},"在写选择器时尽量写全一些，例如",[26,134322,134324],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[33,134325,134326,134331,134347,134352,134367,134372,134387,134392,134407,134412],{"__ignoreMap":31},[36,134327,134328],{"class":38,"line":39},[36,134329,134330],{"class":2621},"\u002F* 静态定位（默认） *\u002F\n",[36,134332,134333,134336,134338,134340,134342,134345],{"class":38,"line":54},[36,134334,134335],{"class":79},".static",[36,134337,82152],{"class":42},[36,134339,131251],{"class":62},[36,134341,2158],{"class":42},[36,134343,134344],{"class":62},"static",[36,134346,131821],{"class":42},[36,134348,134349],{"class":38,"line":66},[36,134350,134351],{"class":2621},"\u002F* 相对定位 *\u002F\n",[36,134353,134354,134357,134359,134361,134363,134365],{"class":38,"line":73},[36,134355,134356],{"class":79},".relative",[36,134358,82152],{"class":42},[36,134360,131251],{"class":62},[36,134362,2158],{"class":42},[36,134364,57112],{"class":62},[36,134366,131821],{"class":42},[36,134368,134369],{"class":38,"line":86},[36,134370,134371],{"class":2621},"\u002F* 绝对定位 *\u002F\n",[36,134373,134374,134377,134379,134381,134383,134385],{"class":38,"line":126},[36,134375,134376],{"class":79},".absolute",[36,134378,82152],{"class":42},[36,134380,131251],{"class":62},[36,134382,2158],{"class":42},[36,134384,57179],{"class":62},[36,134386,131821],{"class":42},[36,134388,134389],{"class":38,"line":131},[36,134390,134391],{"class":2621},"\u002F* 固定定位 *\u002F\n",[36,134393,134394,134397,134399,134401,134403,134405],{"class":38,"line":225},[36,134395,134396],{"class":79},".fixed",[36,134398,82152],{"class":42},[36,134400,131251],{"class":62},[36,134402,2158],{"class":42},[36,134404,88575],{"class":62},[36,134406,131821],{"class":42},[36,134408,134409],{"class":38,"line":235},[36,134410,134411],{"class":2621},"\u002F* 粘性定位 *\u002F\n",[36,134413,134414,134417,134419,134421,134423,134426],{"class":38,"line":377},[36,134415,134416],{"class":79},".sticky",[36,134418,82152],{"class":42},[36,134420,131251],{"class":62},[36,134422,2158],{"class":42},[36,134424,134425],{"class":62},"sticky",[36,134427,131821],{"class":42},[650,134429,134430,134433],{"start":643},[653,134431,134432],{},"一定要用好注释",[653,134434,134435],{},"浮动的盒子不会有外边距合并的问题",[2467,134437,133779],{},{"title":31,"searchDepth":54,"depth":54,"links":134439},[134440,134441],{"id":133816,"depth":54,"text":133817},{"id":133880,"depth":54,"text":133881,"children":134442},[134443,134444,134445,134446,134447,134448,134449],{"id":133884,"depth":66,"text":133885},{"id":133990,"depth":66,"text":133991},{"id":134026,"depth":66,"text":134027},{"id":134047,"depth":66,"text":134048},{"id":134082,"depth":66,"text":134083},{"id":134115,"depth":66,"text":134116},{"id":134190,"depth":66,"text":134191},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133808,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134456,"title":134457,"body":134458,"description":2493,"extension":2494,"meta":135944,"navigation":69,"path":135945,"seo":135946,"stem":135947,"__hash__":135948},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134459,"toc":135936},[134460,134463,134467,134471,134482,134486,134503,134547,134580,134583,134600,134603,134606,134650,134654,134658,134661,134664,134668,134671,134682,134745,134786,134789,134804,134858,134866,134869,134880,134934,134960,134963,134976,135030,135062,135116,135139,135193,135196,135199,135206,135260,135281,135335,135338,135341,135426,135434,135491,135514,135518,135521,135539,135543,135562,135616,135654,135658,135661,135664,135686,135690,135698,135701,135706,135717,135720,135724,135738,135782,135785,135789,135792,135797,135823,135828,135905,135908,135912,135915,135918,135921,135924,135927,135930,135933],[10,134461,134457],{"id":134462},"_11-传统布局与定位体系",[14,134464,134466],{"id":134465},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1752,134468,134470],{"id":134469},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3557,134472,134473,134476,134479],{},[653,134474,134475],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[653,134477,134478],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[653,134480,134481],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1752,134483,134485],{"id":134484},"_1112-浮动","11.1.2 浮动",[3557,134487,134488,134491,134494,134497,134500],{},[653,134489,134490],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[653,134492,134493],{},"浮动可以改变元素标签默认的排列方式",[653,134495,134496],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[653,134498,134499],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[653,134501,134502],{},"在使用行内块转换时盒子之间是有空隙的",[26,134504,134505],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,134506,134507,134513,134523,134527,134533,134543],{"__ignoreMap":31},[36,134508,134509,134511],{"class":38,"line":39},[36,134510,133364],{"class":79},[36,134512,2150],{"class":42},[36,134514,134515,134517,134519,134521],{"class":38,"line":54},[36,134516,133371],{"class":62},[36,134518,2158],{"class":42},[36,134520,26106],{"class":62},[36,134522,3711],{"class":42},[36,134524,134525],{"class":38,"line":66},[36,134526,3982],{"class":42},[36,134528,134529,134531],{"class":38,"line":73},[36,134530,133386],{"class":79},[36,134532,2150],{"class":42},[36,134534,134535,134537,134539,134541],{"class":38,"line":86},[36,134536,133371],{"class":62},[36,134538,2158],{"class":42},[36,134540,74867],{"class":62},[36,134542,3711],{"class":42},[36,134544,134545],{"class":38,"line":126},[36,134546,3982],{"class":42},[2698,134548,134549,134557],{},[2701,134550,134551],{},[2704,134552,134553,134555],{},[2707,134554,129355],{"align":26106},[2707,134556,29859],{"align":26106},[2744,134558,134559,134566,134573],{},[2704,134560,134561,134563],{},[2749,134562,57085],{"align":26106},[2749,134564,134565],{"align":26106},"元素不浮动（默认值）",[2704,134567,134568,134570],{},[2749,134569,26106],{"align":26106},[2749,134571,134572],{"align":26106},"元素向左浮动",[2704,134574,134575,134577],{},[2749,134576,74867],{"align":26106},[2749,134578,134579],{"align":26106},"元素向右浮动",[19,134581,134582],{},"浮动重点：",[3557,134584,134585,134588,134591,134594,134597],{},[653,134586,134587],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[653,134589,134590],{},"浮动的元素会一行内显示并且元素顶部对齐",[653,134592,134593],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[653,134595,134596],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[653,134598,134599],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134601,134602],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134604,134605],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,134607,134608],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,134609,134610,134616,134626,134630,134636,134646],{"__ignoreMap":31},[36,134611,134612,134614],{"class":38,"line":39},[36,134613,133364],{"class":79},[36,134615,2150],{"class":42},[36,134617,134618,134620,134622,134624],{"class":38,"line":54},[36,134619,133371],{"class":62},[36,134621,2158],{"class":42},[36,134623,26106],{"class":62},[36,134625,3711],{"class":42},[36,134627,134628],{"class":38,"line":66},[36,134629,3982],{"class":42},[36,134631,134632,134634],{"class":38,"line":73},[36,134633,133386],{"class":79},[36,134635,2150],{"class":42},[36,134637,134638,134640,134642,134644],{"class":38,"line":86},[36,134639,133371],{"class":62},[36,134641,2158],{"class":42},[36,134643,74867],{"class":62},[36,134645,3711],{"class":42},[36,134647,134648],{"class":38,"line":126},[36,134649,3982],{"class":42},[1752,134651,134653],{"id":134652},"_1113-定位","11.1.3 定位",[24368,134655,134657],{"id":134656},"_11131-使用场景","11.1.3.1 使用场景",[19,134659,134660],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134662,134663],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24368,134665,134667],{"id":134666},"_11132-定位组成","11.1.3.2 定位组成",[19,134669,134670],{},"定位 = 定位模式 + 边偏移",[650,134672,134673],{},[653,134674,134675,134678,134679],{},[667,134676,134677],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[667,134680,134681],{},"定位模式",[26,134683,134685],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,134686,134687,134693,134707,134724,134741],{"__ignoreMap":31},[36,134688,134689,134691],{"class":38,"line":39},[36,134690,132739],{"class":79},[36,134692,2150],{"class":42},[36,134694,134695,134698,134700,134702,134704],{"class":38,"line":54},[36,134696,134697],{"class":62},"  position",[36,134699,2158],{"class":42},[36,134701,57112],{"class":62},[36,134703,132754],{"class":42},[36,134705,134706],{"class":2621},"\u002F* 定位模式 *\u002F\n",[36,134708,134709,134712,134714,134716,134718,134721],{"class":38,"line":66},[36,134710,134711],{"class":62},"  top",[36,134713,2158],{"class":42},[36,134715,3002],{"class":62},[36,134717,53840],{"class":46},[36,134719,134720],{"class":42},";           ",[36,134722,134723],{"class":2621},"\u002F* 边偏移：上 *\u002F\n",[36,134725,134726,134729,134731,134733,134735,134738],{"class":38,"line":73},[36,134727,134728],{"class":62},"  left",[36,134730,2158],{"class":42},[36,134732,3254],{"class":62},[36,134734,53840],{"class":46},[36,134736,134737],{"class":42},";          ",[36,134739,134740],{"class":2621},"\u002F* 边偏移：左 *\u002F\n",[36,134742,134743],{"class":38,"line":86},[36,134744,3982],{"class":42},[2698,134746,134747,134756],{},[2701,134748,134749],{},[2704,134750,134751,134753],{},[2707,134752,2712],{"align":26106},[2707,134754,134755],{"align":26106},"语义",[2744,134757,134758,134765,134772,134779],{},[2704,134759,134760,134762],{},[2749,134761,134344],{"align":26106},[2749,134763,134764],{"align":26106},"静态定位",[2704,134766,134767,134769],{},[2749,134768,57112],{"align":26106},[2749,134770,134771],{"align":26106},"相对定位",[2704,134773,134774,134776],{},[2749,134775,57179],{"align":26106},[2749,134777,134778],{"align":26106},"绝对定位",[2704,134780,134781,134783],{},[2749,134782,88575],{"align":26106},[2749,134784,134785],{"align":26106},"固定定位",[19,134787,134788],{},"（1）静态定位：",[3557,134790,134791,134802],{},[653,134792,134793,134794,134797,134798,134801],{},"静态定位是元素的 ",[667,134795,134796],{},"默认定位方式"," ， ",[667,134799,134800],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[653,134803,7564],{},[26,134805,134806],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,134807,134808,134814,134826,134840,134854],{"__ignoreMap":31},[36,134809,134810,134812],{"class":38,"line":39},[36,134811,132739],{"class":79},[36,134813,2150],{"class":42},[36,134815,134816,134818,134820,134822,134824],{"class":38,"line":54},[36,134817,134697],{"class":62},[36,134819,2158],{"class":42},[36,134821,57112],{"class":62},[36,134823,132754],{"class":42},[36,134825,134706],{"class":2621},[36,134827,134828,134830,134832,134834,134836,134838],{"class":38,"line":66},[36,134829,134711],{"class":62},[36,134831,2158],{"class":42},[36,134833,3002],{"class":62},[36,134835,53840],{"class":46},[36,134837,134720],{"class":42},[36,134839,134723],{"class":2621},[36,134841,134842,134844,134846,134848,134850,134852],{"class":38,"line":73},[36,134843,134728],{"class":62},[36,134845,2158],{"class":42},[36,134847,3254],{"class":62},[36,134849,53840],{"class":46},[36,134851,134737],{"class":42},[36,134853,134740],{"class":2621},[36,134855,134856],{"class":38,"line":86},[36,134857,3982],{"class":42},[3557,134859,134860,134863],{},[653,134861,134862],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[653,134864,134865],{},"静态定位在布局时我们几乎不用的",[19,134867,134868],{},"（2）相对定位",[3557,134870,134871,134878],{},[653,134872,134873,134874,134877],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[667,134875,134876],{},"原来的位置"," 来说的（自恋型）",[653,134879,7564],{},[26,134881,134882],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,134883,134884,134890,134902,134916,134930],{"__ignoreMap":31},[36,134885,134886,134888],{"class":38,"line":39},[36,134887,132739],{"class":79},[36,134889,2150],{"class":42},[36,134891,134892,134894,134896,134898,134900],{"class":38,"line":54},[36,134893,134697],{"class":62},[36,134895,2158],{"class":42},[36,134897,57112],{"class":62},[36,134899,132754],{"class":42},[36,134901,134706],{"class":2621},[36,134903,134904,134906,134908,134910,134912,134914],{"class":38,"line":66},[36,134905,134711],{"class":62},[36,134907,2158],{"class":42},[36,134909,3002],{"class":62},[36,134911,53840],{"class":46},[36,134913,134720],{"class":42},[36,134915,134723],{"class":2621},[36,134917,134918,134920,134922,134924,134926,134928],{"class":38,"line":73},[36,134919,134728],{"class":62},[36,134921,2158],{"class":42},[36,134923,3254],{"class":62},[36,134925,53840],{"class":46},[36,134927,134737],{"class":42},[36,134929,134740],{"class":2621},[36,134931,134932],{"class":38,"line":86},[36,134933,3982],{"class":42},[3557,134935,134936],{},[653,134937,134938,134939,134941,134942,134944,134945,134948,134949,134952,134953,134955,134956,134959],{},"相对定位的特点：",[56064,134940],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56064,134943],{},"  ② ",[667,134946,134947],{},"原来"," 在标准流的 ",[667,134950,134951],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56064,134954],{},"  ③因此， ",[667,134957,134958],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134961,134962],{},"（3）绝对定位",[3557,134964,134965,134974],{},[653,134966,134967,134969,134970,134973],{},[667,134968,134778],{}," 是元素在移动位置的时候，是相对于它 ",[667,134971,134972],{},"祖先元素"," 来说的（拼爹型）",[653,134975,7564],{},[26,134977,134978],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,134979,134980,134986,134998,135012,135026],{"__ignoreMap":31},[36,134981,134982,134984],{"class":38,"line":39},[36,134983,132739],{"class":79},[36,134985,2150],{"class":42},[36,134987,134988,134990,134992,134994,134996],{"class":38,"line":54},[36,134989,134697],{"class":62},[36,134991,2158],{"class":42},[36,134993,57112],{"class":62},[36,134995,132754],{"class":42},[36,134997,134706],{"class":2621},[36,134999,135000,135002,135004,135006,135008,135010],{"class":38,"line":66},[36,135001,134711],{"class":62},[36,135003,2158],{"class":42},[36,135005,3002],{"class":62},[36,135007,53840],{"class":46},[36,135009,134720],{"class":42},[36,135011,134723],{"class":2621},[36,135013,135014,135016,135018,135020,135022,135024],{"class":38,"line":73},[36,135015,134728],{"class":62},[36,135017,2158],{"class":42},[36,135019,3254],{"class":62},[36,135021,53840],{"class":46},[36,135023,134737],{"class":42},[36,135025,134740],{"class":2621},[36,135027,135028],{"class":38,"line":86},[36,135029,3982],{"class":42},[3557,135031,135032,135047,135056,135059],{},[653,135033,135034,135035,135037,135038,135040,135041,135043,135044,135046],{},"绝对定位的特点：",[56064,135036],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56064,135039],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56064,135042],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56064,135045],{},"  (4)固定定位",[653,135048,135049,135051,135052,135055],{},[667,135050,134785],{}," 是元素 ",[667,135053,135054],{},"固定于浏览器可视区的位置"," 。（认死理型）",[653,135057,135058],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[653,135060,135061],{},"语法:",[26,135063,135064],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,135065,135066,135072,135084,135098,135112],{"__ignoreMap":31},[36,135067,135068,135070],{"class":38,"line":39},[36,135069,132739],{"class":79},[36,135071,2150],{"class":42},[36,135073,135074,135076,135078,135080,135082],{"class":38,"line":54},[36,135075,134697],{"class":62},[36,135077,2158],{"class":42},[36,135079,57112],{"class":62},[36,135081,132754],{"class":42},[36,135083,134706],{"class":2621},[36,135085,135086,135088,135090,135092,135094,135096],{"class":38,"line":66},[36,135087,134711],{"class":62},[36,135089,2158],{"class":42},[36,135091,3002],{"class":62},[36,135093,53840],{"class":46},[36,135095,134720],{"class":42},[36,135097,134723],{"class":2621},[36,135099,135100,135102,135104,135106,135108,135110],{"class":38,"line":73},[36,135101,134728],{"class":62},[36,135103,2158],{"class":42},[36,135105,3254],{"class":62},[36,135107,53840],{"class":46},[36,135109,134737],{"class":42},[36,135111,134740],{"class":2621},[36,135113,135114],{"class":38,"line":86},[36,135115,3982],{"class":42},[3557,135117,135118,135127],{},[653,135119,135120,135121,135123,135124,135126],{},"特点:",[56064,135122],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56064,135125],{},"  ②固定定位不再占有原先的位置,完全脱标",[653,135128,135129,135130,135132,135133,135135,135136,135138],{},"固定在版心位置的方法:",[56064,135131],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56064,135134],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56064,135137],{},"  实例：",[26,135140,135141],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,135142,135143,135149,135161,135175,135189],{"__ignoreMap":31},[36,135144,135145,135147],{"class":38,"line":39},[36,135146,132739],{"class":79},[36,135148,2150],{"class":42},[36,135150,135151,135153,135155,135157,135159],{"class":38,"line":54},[36,135152,134697],{"class":62},[36,135154,2158],{"class":42},[36,135156,57112],{"class":62},[36,135158,132754],{"class":42},[36,135160,134706],{"class":2621},[36,135162,135163,135165,135167,135169,135171,135173],{"class":38,"line":66},[36,135164,134711],{"class":62},[36,135166,2158],{"class":42},[36,135168,3002],{"class":62},[36,135170,53840],{"class":46},[36,135172,134720],{"class":42},[36,135174,134723],{"class":2621},[36,135176,135177,135179,135181,135183,135185,135187],{"class":38,"line":73},[36,135178,134728],{"class":62},[36,135180,2158],{"class":42},[36,135182,3254],{"class":62},[36,135184,53840],{"class":46},[36,135186,134737],{"class":42},[36,135188,134740],{"class":2621},[36,135190,135191],{"class":38,"line":86},[36,135192,3982],{"class":42},[3879,135194],{"style":128747,"src":135195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135197,135198],{},"(5)粘性定位",[3557,135200,135201,135204],{},[653,135202,135203],{},"粘性定位可以被认为是相对定位和固定定位的混合",[653,135205,7564],{},[26,135207,135208],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,135209,135210,135216,135228,135242,135256],{"__ignoreMap":31},[36,135211,135212,135214],{"class":38,"line":39},[36,135213,132739],{"class":79},[36,135215,2150],{"class":42},[36,135217,135218,135220,135222,135224,135226],{"class":38,"line":54},[36,135219,134697],{"class":62},[36,135221,2158],{"class":42},[36,135223,57112],{"class":62},[36,135225,132754],{"class":42},[36,135227,134706],{"class":2621},[36,135229,135230,135232,135234,135236,135238,135240],{"class":38,"line":66},[36,135231,134711],{"class":62},[36,135233,2158],{"class":42},[36,135235,3002],{"class":62},[36,135237,53840],{"class":46},[36,135239,134720],{"class":42},[36,135241,134723],{"class":2621},[36,135243,135244,135246,135248,135250,135252,135254],{"class":38,"line":73},[36,135245,134728],{"class":62},[36,135247,2158],{"class":42},[36,135249,3254],{"class":62},[36,135251,53840],{"class":46},[36,135253,134737],{"class":42},[36,135255,134740],{"class":2621},[36,135257,135258],{"class":38,"line":86},[36,135259,3982],{"class":42},[3557,135261,135262],{},[653,135263,135264,135265,135267,135268,135270,135271,135273,135274,135277,135278,135280],{},"粘性定位的特点：",[56064,135266],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56064,135269],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56064,135272],{},"  ③必须添加 top 、left、right、bottom ",[667,135275,135276],{},"其中一个"," 才有效",[56064,135279],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,135282,135283],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,135284,135285,135291,135303,135317,135331],{"__ignoreMap":31},[36,135286,135287,135289],{"class":38,"line":39},[36,135288,132739],{"class":79},[36,135290,2150],{"class":42},[36,135292,135293,135295,135297,135299,135301],{"class":38,"line":54},[36,135294,134697],{"class":62},[36,135296,2158],{"class":42},[36,135298,57112],{"class":62},[36,135300,132754],{"class":42},[36,135302,134706],{"class":2621},[36,135304,135305,135307,135309,135311,135313,135315],{"class":38,"line":66},[36,135306,134711],{"class":62},[36,135308,2158],{"class":42},[36,135310,3002],{"class":62},[36,135312,53840],{"class":46},[36,135314,134720],{"class":42},[36,135316,134723],{"class":2621},[36,135318,135319,135321,135323,135325,135327,135329],{"class":38,"line":73},[36,135320,134728],{"class":62},[36,135322,2158],{"class":42},[36,135324,3254],{"class":62},[36,135326,53840],{"class":46},[36,135328,134737],{"class":42},[36,135330,134740],{"class":2621},[36,135332,135333],{"class":38,"line":86},[36,135334,3982],{"class":42},[3879,135336],{"style":128747,"src":135337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135339,135340],{},"(6)总结",[2698,135342,135343,135358],{},[2701,135344,135345],{},[2704,135346,135347,135349,135352,135355],{},[2707,135348,134681],{"align":26106},[2707,135350,135351],{"align":26106},"是否脱标",[2707,135353,135354],{"align":26106},"移动位置",[2707,135356,135357],{"align":26106},"是否常用",[2744,135359,135360,135373,135387,135401,135414],{},[2704,135361,135362,135365,135367,135370],{},[2749,135363,135364],{"align":26106},"Static 静态定位",[2749,135366,107017],{"align":26106},[2749,135368,135369],{"align":26106},"不能使用边偏移",[2749,135371,135372],{"align":26106},"很少",[2704,135374,135375,135378,135381,135384],{},[2749,135376,135377],{"align":26106},"Relative 相对定位",[2749,135379,135380],{"align":26106},"否(占有位置)",[2749,135382,135383],{"align":26106},"相对于自身位置移动",[2749,135385,135386],{"align":26106},"基本单独使用",[2704,135388,135389,135392,135395,135398],{},[2749,135390,135391],{"align":26106},"Absolute 绝对定位",[2749,135393,135394],{"align":26106},"是(不占有位置)",[2749,135396,135397],{"align":26106},"带有定位的父级",[2749,135399,135400],{"align":26106},"要和定位父级元素搭配使用",[2704,135402,135403,135406,135408,135411],{},[2749,135404,135405],{"align":26106},"Fixed 固定定位",[2749,135407,135394],{"align":26106},[2749,135409,135410],{"align":26106},"浏览器可视区",[2749,135412,135413],{"align":26106},"单独使用,不需要父级",[2704,135415,135416,135419,135421,135423],{},[2749,135417,135418],{"align":26106},"Sticky 粘性定位",[2749,135420,135380],{"align":26106},[2749,135422,135410],{"align":26106},[2749,135424,135425],{"align":26106},"当前阶段少",[650,135427,135428],{"start":54},[653,135429,135430,135433],{},[667,135431,135432],{},"边偏移"," 则决定了该元素的最终位置",[2698,135435,135436,135447],{},[2701,135437,135438],{},[2704,135439,135440,135443,135445],{},[2707,135441,135442],{"align":26106},"边偏移属性",[2707,135444,29862],{"align":26106},[2707,135446,29859],{"align":26106},[2744,135448,135449,135460,135471,135481],{},[2704,135450,135451,135454,135457],{},[2749,135452,135453],{"align":26106},"top",[2749,135455,135456],{"align":26106},"top: 80px;",[2749,135458,135459],{"align":26106},"顶端偏移量，定义元素相对于父元素上边线的距离",[2704,135461,135462,135465,135468],{},[2749,135463,135464],{"align":26106},"bottom",[2749,135466,135467],{"align":26106},"bottom: 80px ;",[2749,135469,135470],{"align":26106},"底部偏移量，定义元素相对于其父元素下边线的距离",[2704,135472,135473,135475,135478],{},[2749,135474,26106],{"align":26106},[2749,135476,135477],{"align":26106},"left: 80px ;",[2749,135479,135480],{"align":26106},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2704,135482,135483,135485,135488],{},[2749,135484,74867],{"align":26106},[2749,135486,135487],{"align":26106},"right: 80px ;",[2749,135489,135490],{"align":26106},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3557,135492,135493],{},[653,135494,11405,135495,135497,135498,135500,135501,135503,135504,135507,135508,135510,135511,135513],{},[56064,135496],{},"  ① ",[667,135499,135432],{}," 需要和 ",[667,135502,134681],{}," 联合使用， ",[667,135505,135506],{},"单独使用无效"," ；",[56064,135509],{},"  ②top和bottom不要同时使用",[56064,135512],{},"  ③left和right不要同时使用",[24368,135515,135517],{"id":135516},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135519,135520],{},"子级是绝对定位的话，父级要用相对定位",[3557,135522,135523,135526,135529,135532],{},[653,135524,135525],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[653,135527,135528],{},"父盒子需要加定位限制子盒子在父盒子内显示",[653,135530,135531],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[653,135533,135534,135535,135538],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[667,135536,135537],{},"子绝父绝"," 也会遇到",[24368,135540,135542],{"id":135541},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3557,135544,135545,135560],{},[653,135546,135547,135548,135551,135552,135555,135556,135559],{},"在使用 ",[667,135549,135550],{},"定位"," 布局时，可能会 ",[667,135553,135554],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[667,135557,135558],{},"z-index"," 来控制盒子的前后次序 (z轴)",[653,135561,7564],{},[26,135563,135564],{"className":128891,"code":134684,"language":128893,"meta":31,"style":31},[33,135565,135566,135572,135584,135598,135612],{"__ignoreMap":31},[36,135567,135568,135570],{"class":38,"line":39},[36,135569,132739],{"class":79},[36,135571,2150],{"class":42},[36,135573,135574,135576,135578,135580,135582],{"class":38,"line":54},[36,135575,134697],{"class":62},[36,135577,2158],{"class":42},[36,135579,57112],{"class":62},[36,135581,132754],{"class":42},[36,135583,134706],{"class":2621},[36,135585,135586,135588,135590,135592,135594,135596],{"class":38,"line":66},[36,135587,134711],{"class":62},[36,135589,2158],{"class":42},[36,135591,3002],{"class":62},[36,135593,53840],{"class":46},[36,135595,134720],{"class":42},[36,135597,134723],{"class":2621},[36,135599,135600,135602,135604,135606,135608,135610],{"class":38,"line":73},[36,135601,134728],{"class":62},[36,135603,2158],{"class":42},[36,135605,3254],{"class":62},[36,135607,53840],{"class":46},[36,135609,134737],{"class":42},[36,135611,134740],{"class":2621},[36,135613,135614],{"class":38,"line":86},[36,135615,3982],{"class":42},[3557,135617,135618],{},[653,135619,135620,135621,135497,135623,135625,135626,130054,135629,84881,135632,135634,135635,135637,135638,135641,135642,135507,135645,135647,135648,135651,135653],{},"z-index的特性",[56064,135622],{},[667,135624,129355],{}," ： ",[667,135627,135628],{},"正整数",[667,135630,135631],{},"负整数",[667,135633,2751],{}," ，默认值是 0，数值越大，盒子越靠上；",[56064,135636],{},"  ②如果 ",[667,135639,135640],{},"属性值相同"," ，则按照书写顺序， ",[667,135643,135644],{},"后来居上",[56064,135646],{},"  ③数字后面 ",[667,135649,135650],{},"不能加单位",[56064,135652],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24368,135655,135657],{"id":135656},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135659,135660],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135662,135663],{},"方法:",[3557,135665,135666,135676],{},[653,135667,135668,135669,135672,135673],{},"left: 50%; 让 ",[667,135670,135671],{},"盒子的左侧"," 移动到 ",[667,135674,135675],{},"父级元素的水平中心位置",[653,135677,135678,135679,135682,135683],{},"margin-left: -100px; 让盒子 ",[667,135680,135681],{},"向左"," 移动 ",[667,135684,135685],{},"自身宽度的一半",[24368,135687,135689],{"id":135688},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[650,135691,135692,135695],{},[653,135693,135694],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[653,135696,135697],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135699,135700],{},"也就是说绝对定位和固定定位和浮动类似",[650,135702,135703],{"start":66},[653,135704,135705],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3557,135707,135708,135711,135714],{},[653,135709,135710],{},"可以用inline-block 转换为行内块",[653,135712,135713],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[653,135715,135716],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135718,135719],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24368,135721,135723],{"id":135722},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[650,135725,135726,135729,135732,135735],{},[653,135727,135728],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[653,135730,135731],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[653,135733,135734],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[653,135736,135737],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,135739,135740],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,135741,135742,135748,135758,135762,135768,135778],{"__ignoreMap":31},[36,135743,135744,135746],{"class":38,"line":39},[36,135745,133364],{"class":79},[36,135747,2150],{"class":42},[36,135749,135750,135752,135754,135756],{"class":38,"line":54},[36,135751,133371],{"class":62},[36,135753,2158],{"class":42},[36,135755,26106],{"class":62},[36,135757,3711],{"class":42},[36,135759,135760],{"class":38,"line":66},[36,135761,3982],{"class":42},[36,135763,135764,135766],{"class":38,"line":73},[36,135765,133386],{"class":79},[36,135767,2150],{"class":42},[36,135769,135770,135772,135774,135776],{"class":38,"line":86},[36,135771,133371],{"class":62},[36,135773,2158],{"class":42},[36,135775,74867],{"class":62},[36,135777,3711],{"class":42},[36,135779,135780],{"class":38,"line":126},[36,135781,3982],{"class":42},[3879,135783],{"style":128747,"src":135784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24368,135786,135788],{"id":135787},"_11138-轮播图","11.1.3.8 轮播图",[3879,135790],{"style":128747,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[650,135793,135794],{},[653,135795,135796],{},"制作顺序:",[3557,135798,135799,135802,135805,135814],{},[653,135800,135801],{},"大盒子我们类名为： tb-promo 淘宝广告",[653,135803,135804],{},"里面先放一张图片",[653,135806,135807,135808,135810,135811,135813],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56064,135809],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56064,135812],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[653,135815,135816,135817,135819,135820,135822],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56064,135818],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56064,135821],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[650,135824,135825],{"start":54},[653,135826,135827],{},"代码模块",[26,135829,135831],{"className":128891,"code":135830,"language":128893,"meta":31,"style":31},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[33,135832,135833,135838,135845,135855,135865,135875,135879,135884,135891,135901],{"__ignoreMap":31},[36,135834,135835],{"class":38,"line":39},[36,135836,135837],{"class":2621},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,135839,135840,135843],{"class":38,"line":54},[36,135841,135842],{"class":79},".son",[36,135844,2150],{"class":42},[36,135846,135847,135849,135851,135853],{"class":38,"line":66},[36,135848,134697],{"class":62},[36,135850,2158],{"class":42},[36,135852,57179],{"class":62},[36,135854,3711],{"class":42},[36,135856,135857,135859,135861,135863],{"class":38,"line":73},[36,135858,134711],{"class":62},[36,135860,2158],{"class":42},[36,135862,2751],{"class":62},[36,135864,3711],{"class":42},[36,135866,135867,135869,135871,135873],{"class":38,"line":86},[36,135868,134728],{"class":62},[36,135870,2158],{"class":42},[36,135872,2751],{"class":62},[36,135874,3711],{"class":42},[36,135876,135877],{"class":38,"line":126},[36,135878,3982],{"class":42},[36,135880,135881],{"class":38,"line":131},[36,135882,135883],{"class":2621},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,135885,135886,135889],{"class":38,"line":225},[36,135887,135888],{"class":79},".father",[36,135890,2150],{"class":42},[36,135892,135893,135895,135897,135899],{"class":38,"line":235},[36,135894,134697],{"class":62},[36,135896,2158],{"class":42},[36,135898,57112],{"class":62},[36,135900,3711],{"class":42},[36,135902,135903],{"class":38,"line":377},[36,135904,3982],{"class":42},[19,135906,135907],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1752,135909,135911],{"id":135910},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3879,135913],{"style":128747,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135916,135917],{},"✨ 黄金口诀：",[19,135919,135920],{},"\"TOP正下负上，LEFT正右负左\"",[19,135922,135923],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135925,135926],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135928,135929],{},"✨ 简单记：",[19,135931,135932],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2467,135934,135935],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":135937},[135938],{"id":134465,"depth":54,"text":134466,"children":135939},[135940,135941,135942,135943],{"id":134469,"depth":66,"text":134470},{"id":134484,"depth":66,"text":134485},{"id":134652,"depth":66,"text":134653},{"id":135910,"depth":66,"text":135911},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134457,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135950,"title":135951,"body":135952,"description":2493,"extension":2494,"meta":137375,"navigation":69,"path":137376,"seo":137377,"stem":137378,"__hash__":137379},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135953,"toc":137354},[135954,135957,135961,135969,135973,135978,135986,135998,136002,136007,136015,136026,136030,136035,136076,136084,136088,136091,136094,136097,136191,136194,136288,136291,136385,136388,136391,136426,136429,136432,136462,136465,136468,136471,136474,136477,136480,136483,136553,136556,136560,136564,136605,136609,136615,136618,136621,136625,136628,136631,136634,136715,136718,136721,136725,136729,136732,136735,136738,136741,136744,136750,136759,136763,136782,136786,136796,136799,136802,136805,136808,136811,136814,136817,136820,136829,136833,136842,136845,136850,136903,136908,137074,137077,137080,137085,137088,137091,137094,137097,137102,137250,137253,137256,137261,137264,137269,137303,137306,137309,137313,137316,137323,137326,137329,137332,137335,137338,137341,137344,137348,137351],[10,135955,135951],{"id":135956},"_12-显示隐藏与图形资源",[14,135958,135960],{"id":135959},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3557,135962,135963,135966],{},[653,135964,135965],{},"目的:让一个元素在页面中消失或者显示出来",[653,135967,135968],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1752,135970,135972],{"id":135971},"_1211-display-显示","12.1.1 display 显示",[650,135974,135975],{},[653,135976,135977],{},"display 设置或检索对象是否及如何显示",[3557,135979,135980,135983],{},[653,135981,135982],{},"display: none;隐藏对象",[653,135984,135985],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[650,135987,135988,135995],{"start":54},[653,135989,135990,135991,135994],{},"特点： display 隐藏元素后， ",[667,135992,135993],{},"不再占"," 有原来的位置",[653,135996,135997],{},"在js中使用非常的广泛",[1752,135999,136001],{"id":136000},"_1212-visibility可见性","12.1.2 visibility可见性",[650,136003,136004],{},[653,136005,136006],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3557,136008,136009,136012],{},[653,136010,136011],{},"visibility： visible；元素可见",[653,136013,136014],{},"visibility：hidden；元素隐藏",[650,136016,136017,136020,136023],{"start":54},[653,136018,136019],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[653,136021,136022],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[653,136024,136025],{},"隐藏后继续占有原有位置",[1752,136027,136029],{"id":136028},"_1213-overflow溢出","12.1.3 overflow溢出",[3557,136031,136032],{},[653,136033,136034],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2698,136036,136037,136045],{},[2701,136038,136039],{},[2704,136040,136041,136043],{},[2707,136042,129355],{"align":26106},[2707,136044,29859],{"align":26106},[2744,136046,136047,136055,136062,136069],{},[2704,136048,136049,136052],{},[2749,136050,136051],{"align":26106},"visible",[2749,136053,136054],{"align":26106},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2704,136056,136057,136059],{},[2749,136058,64062],{"align":26106},[2749,136060,136061],{"align":26106},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2704,136063,136064,136066],{},[2749,136065,131311],{"align":26106},[2749,136067,136068],{"align":26106},"不管超出内容否，总是显示滚动条",[2704,136070,136071,136073],{},[2749,136072,75008],{"align":26106},[2749,136074,136075],{"align":26106},"超出自动显示滚动条，不超出不显示滚动条",[3557,136077,136078,136081],{},[653,136079,136080],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[653,136082,136083],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1752,136085,136087],{"id":136086},"_1214-案例收获","12.1.4 案例收获",[3879,136089],{"style":128747,"src":136090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136092,136093],{},"问题：没做出来动态效果，使用hover没实现",[19,136095,136096],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,136098,136099],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,136100,136101,136105,136119,136123,136137,136141,136155,136159,136173,136177],{"__ignoreMap":31},[36,136102,136103],{"class":38,"line":39},[36,136104,134330],{"class":2621},[36,136106,136107,136109,136111,136113,136115,136117],{"class":38,"line":54},[36,136108,134335],{"class":79},[36,136110,82152],{"class":42},[36,136112,131251],{"class":62},[36,136114,2158],{"class":42},[36,136116,134344],{"class":62},[36,136118,131821],{"class":42},[36,136120,136121],{"class":38,"line":66},[36,136122,134351],{"class":2621},[36,136124,136125,136127,136129,136131,136133,136135],{"class":38,"line":73},[36,136126,134356],{"class":79},[36,136128,82152],{"class":42},[36,136130,131251],{"class":62},[36,136132,2158],{"class":42},[36,136134,57112],{"class":62},[36,136136,131821],{"class":42},[36,136138,136139],{"class":38,"line":86},[36,136140,134371],{"class":2621},[36,136142,136143,136145,136147,136149,136151,136153],{"class":38,"line":126},[36,136144,134376],{"class":79},[36,136146,82152],{"class":42},[36,136148,131251],{"class":62},[36,136150,2158],{"class":42},[36,136152,57179],{"class":62},[36,136154,131821],{"class":42},[36,136156,136157],{"class":38,"line":131},[36,136158,134391],{"class":2621},[36,136160,136161,136163,136165,136167,136169,136171],{"class":38,"line":225},[36,136162,134396],{"class":79},[36,136164,82152],{"class":42},[36,136166,131251],{"class":62},[36,136168,2158],{"class":42},[36,136170,88575],{"class":62},[36,136172,131821],{"class":42},[36,136174,136175],{"class":38,"line":235},[36,136176,134411],{"class":2621},[36,136178,136179,136181,136183,136185,136187,136189],{"class":38,"line":377},[36,136180,134416],{"class":79},[36,136182,82152],{"class":42},[36,136184,131251],{"class":62},[36,136186,2158],{"class":42},[36,136188,134425],{"class":62},[36,136190,131821],{"class":42},[19,136192,136193],{},"完整代码：",[26,136195,136196],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,136197,136198,136202,136216,136220,136234,136238,136252,136256,136270,136274],{"__ignoreMap":31},[36,136199,136200],{"class":38,"line":39},[36,136201,134330],{"class":2621},[36,136203,136204,136206,136208,136210,136212,136214],{"class":38,"line":54},[36,136205,134335],{"class":79},[36,136207,82152],{"class":42},[36,136209,131251],{"class":62},[36,136211,2158],{"class":42},[36,136213,134344],{"class":62},[36,136215,131821],{"class":42},[36,136217,136218],{"class":38,"line":66},[36,136219,134351],{"class":2621},[36,136221,136222,136224,136226,136228,136230,136232],{"class":38,"line":73},[36,136223,134356],{"class":79},[36,136225,82152],{"class":42},[36,136227,131251],{"class":62},[36,136229,2158],{"class":42},[36,136231,57112],{"class":62},[36,136233,131821],{"class":42},[36,136235,136236],{"class":38,"line":86},[36,136237,134371],{"class":2621},[36,136239,136240,136242,136244,136246,136248,136250],{"class":38,"line":126},[36,136241,134376],{"class":79},[36,136243,82152],{"class":42},[36,136245,131251],{"class":62},[36,136247,2158],{"class":42},[36,136249,57179],{"class":62},[36,136251,131821],{"class":42},[36,136253,136254],{"class":38,"line":131},[36,136255,134391],{"class":2621},[36,136257,136258,136260,136262,136264,136266,136268],{"class":38,"line":225},[36,136259,134396],{"class":79},[36,136261,82152],{"class":42},[36,136263,131251],{"class":62},[36,136265,2158],{"class":42},[36,136267,88575],{"class":62},[36,136269,131821],{"class":42},[36,136271,136272],{"class":38,"line":235},[36,136273,134411],{"class":2621},[36,136275,136276,136278,136280,136282,136284,136286],{"class":38,"line":377},[36,136277,134416],{"class":79},[36,136279,82152],{"class":42},[36,136281,131251],{"class":62},[36,136283,2158],{"class":42},[36,136285,134425],{"class":62},[36,136287,131821],{"class":42},[19,136289,136290],{},"分布思路重点详解：",[26,136292,136293],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,136294,136295,136299,136313,136317,136331,136335,136349,136353,136367,136371],{"__ignoreMap":31},[36,136296,136297],{"class":38,"line":39},[36,136298,134330],{"class":2621},[36,136300,136301,136303,136305,136307,136309,136311],{"class":38,"line":54},[36,136302,134335],{"class":79},[36,136304,82152],{"class":42},[36,136306,131251],{"class":62},[36,136308,2158],{"class":42},[36,136310,134344],{"class":62},[36,136312,131821],{"class":42},[36,136314,136315],{"class":38,"line":66},[36,136316,134351],{"class":2621},[36,136318,136319,136321,136323,136325,136327,136329],{"class":38,"line":73},[36,136320,134356],{"class":79},[36,136322,82152],{"class":42},[36,136324,131251],{"class":62},[36,136326,2158],{"class":42},[36,136328,57112],{"class":62},[36,136330,131821],{"class":42},[36,136332,136333],{"class":38,"line":86},[36,136334,134371],{"class":2621},[36,136336,136337,136339,136341,136343,136345,136347],{"class":38,"line":126},[36,136338,134376],{"class":79},[36,136340,82152],{"class":42},[36,136342,131251],{"class":62},[36,136344,2158],{"class":42},[36,136346,57179],{"class":62},[36,136348,131821],{"class":42},[36,136350,136351],{"class":38,"line":131},[36,136352,134391],{"class":2621},[36,136354,136355,136357,136359,136361,136363,136365],{"class":38,"line":225},[36,136356,134396],{"class":79},[36,136358,82152],{"class":42},[36,136360,131251],{"class":62},[36,136362,2158],{"class":42},[36,136364,88575],{"class":62},[36,136366,131821],{"class":42},[36,136368,136369],{"class":38,"line":235},[36,136370,134411],{"class":2621},[36,136372,136373,136375,136377,136379,136381,136383],{"class":38,"line":377},[36,136374,134416],{"class":79},[36,136376,82152],{"class":42},[36,136378,131251],{"class":62},[36,136380,2158],{"class":42},[36,136382,134425],{"class":62},[36,136384,131821],{"class":42},[3879,136386],{"style":128747,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136389,136390],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,136392,136394],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,136395,136396],{"__ignoreMap":31},[36,136397,136398,136400,136402,136404,136406,136409,136411,136413,136416,136419,136421,136424],{"class":38,"line":39},[36,136399,3463],{"class":42},[36,136401,3879],{"class":53649},[36,136403,57587],{"class":79},[36,136405,47],{"class":42},[36,136407,136408],{"class":50},"\"images\u002Fpic.jpg\"",[36,136410,57595],{"class":79},[36,136412,47],{"class":42},[36,136414,136415],{"class":50},"\"描述文字\"",[36,136417,136418],{"class":79}," title",[36,136420,47],{"class":42},[36,136422,136423],{"class":50},"\"悬停提示\"",[36,136425,53656],{"class":42},[3879,136427],{"style":128747,"src":136428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136430,136431],{},"制造遮罩层",[26,136433,136434],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,136435,136436],{"__ignoreMap":31},[36,136437,136438,136440,136442,136444,136446,136448,136450,136452,136454,136456,136458,136460],{"class":38,"line":39},[36,136439,3463],{"class":42},[36,136441,3879],{"class":53649},[36,136443,57587],{"class":79},[36,136445,47],{"class":42},[36,136447,136408],{"class":50},[36,136449,57595],{"class":79},[36,136451,47],{"class":42},[36,136453,136415],{"class":50},[36,136455,136418],{"class":79},[36,136457,47],{"class":42},[36,136459,136423],{"class":50},[36,136461,53656],{"class":42},[19,136463,136464],{},"此时是这样的为标准流",[3879,136466],{"style":128747,"src":136467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136469,136470],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136472,136473],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136475,136476],{},"让他在中间，用center(background-position)",[19,136478,136479],{},"将需要变的尽可能放到一个盒子中",[19,136481,136482],{},"放大盒子上内部盒子发生变化",[26,136484,136486],{"className":128891,"code":136485,"language":128893,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,136487,136488,136494,136504,136508,136515,136525,136537,136549],{"__ignoreMap":31},[36,136489,136490,136492],{"class":38,"line":39},[36,136491,129958],{"class":79},[36,136493,2150],{"class":42},[36,136495,136496,136498,136500,136502],{"class":38,"line":54},[36,136497,134697],{"class":62},[36,136499,2158],{"class":42},[36,136501,57112],{"class":62},[36,136503,3711],{"class":42},[36,136505,136506],{"class":38,"line":66},[36,136507,3982],{"class":42},[36,136509,136510,136513],{"class":38,"line":73},[36,136511,136512],{"class":79},".child",[36,136514,2150],{"class":42},[36,136516,136517,136519,136521,136523],{"class":38,"line":86},[36,136518,134697],{"class":62},[36,136520,2158],{"class":42},[36,136522,57179],{"class":62},[36,136524,3711],{"class":42},[36,136526,136527,136529,136531,136533,136535],{"class":38,"line":126},[36,136528,134711],{"class":62},[36,136530,2158],{"class":42},[36,136532,3210],{"class":62},[36,136534,2884],{"class":46},[36,136536,3711],{"class":42},[36,136538,136539,136541,136543,136545,136547],{"class":38,"line":131},[36,136540,134728],{"class":62},[36,136542,2158],{"class":42},[36,136544,3210],{"class":62},[36,136546,2884],{"class":46},[36,136548,3711],{"class":42},[36,136550,136551],{"class":38,"line":225},[36,136552,3982],{"class":42},[19,136554,136555],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136557,136559],{"id":136558},"_122-精灵图","12.2 精灵图",[1752,136561,136563],{"id":136562},"_1221-理解","12.2.1 理解",[650,136565,136566,136584],{},[653,136567,136568,136569,134797,136572,136575,136576,136579,136580,136583],{},"目的： ",[667,136570,136571],{},"为了有效地减少服务器接收和发送请求的次数",[667,136573,136574],{},"提高"," 页面的 ",[667,136577,136578],{},"加载速度"," ，出现了 ",[667,136581,136582],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[653,136585,136586,136587,136589,136590,136592,136593,136595,136596,136598,136599,136601,136602,136604],{},"使用精灵图核心：",[56064,136588],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56064,136591],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56064,136594],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56064,136597],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56064,136600],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56064,136603],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1752,136606,136608],{"id":136607},"_1222-扒图","12.2.2 扒图",[26,136610,136613],{"className":136611,"code":136612,"language":7570},[7568],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,136614,136612],{"__ignoreMap":31},[3879,136616],{"style":128747,"src":136617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3879,136619],{"style":128747,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1752,136622,136624],{"id":136623},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3879,136626],{"style":128747,"src":136627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136629,136630],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3879,136632],{"style":128747,"src":136633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,136635,136637],{"className":128891,"code":136636,"language":128893,"meta":31,"style":31},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[33,136638,136639,136644,136651,136663,136675,136694,136711],{"__ignoreMap":31},[36,136640,136641],{"class":38,"line":39},[36,136642,136643],{"class":2621},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,136645,136646,136649],{"class":38,"line":54},[36,136647,136648],{"class":79},".icon",[36,136650,2150],{"class":42},[36,136652,136653,136655,136657,136659,136661],{"class":38,"line":66},[36,136654,72913],{"class":62},[36,136656,2158],{"class":42},[36,136658,3254],{"class":62},[36,136660,53840],{"class":46},[36,136662,3711],{"class":42},[36,136664,136665,136667,136669,136671,136673],{"class":38,"line":73},[36,136666,73133],{"class":62},[36,136668,2158],{"class":42},[36,136670,3254],{"class":62},[36,136672,53840],{"class":46},[36,136674,3711],{"class":42},[36,136676,136677,136679,136681,136683,136685,136688,136690,136692],{"class":38,"line":86},[36,136678,72956],{"class":62},[36,136680,2158],{"class":42},[36,136682,64074],{"class":62},[36,136684,92],{"class":42},[36,136686,136687],{"class":7598},"sprites.png",[36,136689,16091],{"class":42},[36,136691,64084],{"class":62},[36,136693,3711],{"class":42},[36,136695,136696,136698,136700,136702,136704,136707,136709],{"class":38,"line":126},[36,136697,131151],{"class":62},[36,136699,2158],{"class":42},[36,136701,54111],{"class":62},[36,136703,53840],{"class":46},[36,136705,136706],{"class":62}," -20",[36,136708,53840],{"class":46},[36,136710,3711],{"class":42},[36,136712,136713],{"class":38,"line":131},[36,136714,3982],{"class":42},[3879,136716],{"style":128747,"src":136717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136719,136720],{},"在前端中坐标轴的正方向是右和下",[14,136722,136724],{"id":136723},"_123-字体图标","12.3 字体图标",[1752,136726,136728],{"id":136727},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136730,136731],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136733,136734],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136736,136737],{},"1.图片文件还是比较大的。",[19,136739,136740],{},"2.图片本身放大和缩小会失真。",[19,136742,136743],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136745,136746,136747,28110],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[667,136748,136749],{},"字体图标 iconfont",[19,136751,136752,136755,136756,676],{},[667,136753,136754],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[667,136757,136758],{},"展示的是图标，本质属于字体",[1752,136760,136762],{"id":136761},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3557,136764,136765,136770,136773,136776,136779],{},[653,136766,136767,136769],{},[667,136768,28246],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[653,136771,136772],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[653,136774,136775],{},"兼容性：几乎支持所有的浏览器，请放心使用",[653,136777,136778],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[653,136780,136781],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1752,136783,136785],{"id":136784},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3557,136787,136788],{},[653,136789,136790,136791],{},"icomoon字体库：",[2796,136792,136795],{"href":136793,"rel":136794},"http:\u002F\u002Ficomoon.io\u002F",[26235],"http:\u002F\u002Ficomoon.io",[19,136797,136798],{},"进去之后点icomoon app",[3879,136800],{"style":128747,"src":136801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136803,136804],{},"可以对其编辑：",[3879,136806],{"style":128747,"src":136807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136809,136810],{},"生成字体：",[3879,136812],{"style":128747,"src":136813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136815,136816],{},"下载：",[3879,136818],{"style":128747,"src":136819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3557,136821,136822],{},[653,136823,136824,136825],{},"阿里iconfont字体库： ",[2796,136826,136827],{"href":136827,"rel":136828},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26235],[1752,136830,136832],{"id":136831},"_1234-字体图标的引入","12.3.4 字体图标的引入",[650,136834,136835],{},[653,136836,136837,136838,136841],{},"把下载包里面的 ",[667,136839,136840],{},"fonts"," 文件夹放入页面根目录下",[3879,136843],{"style":128747,"src":136844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[650,136846,136847],{"start":54},[653,136848,136849],{},"字体文件格式",[2698,136851,136852,136861],{},[2701,136853,136854],{},[2704,136855,136856,136859],{},[2707,136857,136858],{"align":26106},"格式",[2707,136860,26110],{"align":26106},[2744,136862,136863,136873,136883,136893],{},[2704,136864,136865,136870],{},[2749,136866,136867],{"align":26106},[667,136868,136869],{},".ttf",[2749,136871,136872],{"align":26106},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2704,136874,136875,136880],{},[2749,136876,136877],{"align":26106},[667,136878,136879],{},".woff",[2749,136881,136882],{"align":26106},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2704,136884,136885,136890],{},[2749,136886,136887],{"align":26106},[667,136888,136889],{},".eot",[2749,136891,136892],{"align":26106},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2704,136894,136895,136900],{},[2749,136896,136897],{"align":26106},[667,136898,136899],{},"svg",[2749,136901,136902],{"align":26106},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[650,136904,136905],{"start":66},[653,136906,136907],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,136909,136911],{"className":128891,"code":136910,"language":128893,"meta":31,"style":31},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[33,136912,136913,136918,136925,136937,136953,136978,136999,137019,137039,137043,137049,137059,137070],{"__ignoreMap":31},[36,136914,136915],{"class":38,"line":39},[36,136916,136917],{"class":2621},"\u002F* 引入字体图标 *\u002F\n",[36,136919,136920,136923],{"class":38,"line":54},[36,136921,136922],{"class":46},"@font-face",[36,136924,2150],{"class":42},[36,136926,136927,136930,136932,136935],{"class":38,"line":66},[36,136928,136929],{"class":62},"  font-family",[36,136931,2158],{"class":42},[36,136933,136934],{"class":50},"'icomoon'",[36,136936,3711],{"class":42},[36,136938,136939,136942,136944,136946,136948,136951],{"class":38,"line":73},[36,136940,136941],{"class":62},"  src",[36,136943,2158],{"class":42},[36,136945,64074],{"class":62},[36,136947,92],{"class":42},[36,136949,136950],{"class":50},"'fonts\u002Ficomoon.eot'",[36,136952,5104],{"class":42},[36,136954,136955,136957,136959,136961,136963,136966,136968,136971,136973,136976],{"class":38,"line":86},[36,136956,136941],{"class":62},[36,136958,2158],{"class":42},[36,136960,64074],{"class":62},[36,136962,92],{"class":42},[36,136964,136965],{"class":50},"'fonts\u002Ficomoon.eot?#iefix'",[36,136967,16091],{"class":42},[36,136969,136970],{"class":62},"format",[36,136972,92],{"class":42},[36,136974,136975],{"class":50},"'embedded-opentype'",[36,136977,40398],{"class":42},[36,136979,136980,136983,136985,136988,136990,136992,136994,136997],{"class":38,"line":126},[36,136981,136982],{"class":62},"       url",[36,136984,92],{"class":42},[36,136986,136987],{"class":50},"'fonts\u002Ficomoon.woff'",[36,136989,16091],{"class":42},[36,136991,136970],{"class":62},[36,136993,92],{"class":42},[36,136995,136996],{"class":50},"'woff'",[36,136998,40398],{"class":42},[36,137000,137001,137003,137005,137008,137010,137012,137014,137017],{"class":38,"line":131},[36,137002,136982],{"class":62},[36,137004,92],{"class":42},[36,137006,137007],{"class":50},"'fonts\u002Ficomoon.ttf'",[36,137009,16091],{"class":42},[36,137011,136970],{"class":62},[36,137013,92],{"class":42},[36,137015,137016],{"class":50},"'truetype'",[36,137018,40398],{"class":42},[36,137020,137021,137023,137025,137028,137030,137032,137034,137037],{"class":38,"line":225},[36,137022,136982],{"class":62},[36,137024,92],{"class":42},[36,137026,137027],{"class":50},"'fonts\u002Ficomoon.svg#icomoon'",[36,137029,16091],{"class":42},[36,137031,136970],{"class":62},[36,137033,92],{"class":42},[36,137035,137036],{"class":50},"'svg'",[36,137038,5104],{"class":42},[36,137040,137041],{"class":38,"line":235},[36,137042,3982],{"class":42},[36,137044,137045,137047],{"class":38,"line":377},[36,137046,136648],{"class":79},[36,137048,2150],{"class":42},[36,137050,137051,137053,137055,137057],{"class":38,"line":617},[36,137052,136929],{"class":62},[36,137054,2158],{"class":42},[36,137056,136934],{"class":50},[36,137058,3711],{"class":42},[36,137060,137061,137064,137066,137068],{"class":38,"line":643},[36,137062,137063],{"class":62},"  font-style",[36,137065,2158],{"class":42},[36,137067,66188],{"class":62},[36,137069,3711],{"class":42},[36,137071,137072],{"class":38,"line":921},[36,137073,3982],{"class":42},[19,137075,137076],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3879,137078],{"style":128747,"src":137079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[650,137081,137082],{"start":73},[653,137083,137084],{},"添加字体",[3879,137086],{"style":128747,"src":137087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137089,137090],{},"复制：",[3879,137092],{"style":128747,"src":137093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137095,137096],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[650,137098,137099],{"start":86},[653,137100,137101],{},"代码展示：",[26,137103,137104],{"className":128891,"code":136910,"language":128893,"meta":31,"style":31},[33,137105,137106,137110,137116,137126,137140,137162,137180,137198,137216,137220,137226,137236,137246],{"__ignoreMap":31},[36,137107,137108],{"class":38,"line":39},[36,137109,136917],{"class":2621},[36,137111,137112,137114],{"class":38,"line":54},[36,137113,136922],{"class":46},[36,137115,2150],{"class":42},[36,137117,137118,137120,137122,137124],{"class":38,"line":66},[36,137119,136929],{"class":62},[36,137121,2158],{"class":42},[36,137123,136934],{"class":50},[36,137125,3711],{"class":42},[36,137127,137128,137130,137132,137134,137136,137138],{"class":38,"line":73},[36,137129,136941],{"class":62},[36,137131,2158],{"class":42},[36,137133,64074],{"class":62},[36,137135,92],{"class":42},[36,137137,136950],{"class":50},[36,137139,5104],{"class":42},[36,137141,137142,137144,137146,137148,137150,137152,137154,137156,137158,137160],{"class":38,"line":86},[36,137143,136941],{"class":62},[36,137145,2158],{"class":42},[36,137147,64074],{"class":62},[36,137149,92],{"class":42},[36,137151,136965],{"class":50},[36,137153,16091],{"class":42},[36,137155,136970],{"class":62},[36,137157,92],{"class":42},[36,137159,136975],{"class":50},[36,137161,40398],{"class":42},[36,137163,137164,137166,137168,137170,137172,137174,137176,137178],{"class":38,"line":126},[36,137165,136982],{"class":62},[36,137167,92],{"class":42},[36,137169,136987],{"class":50},[36,137171,16091],{"class":42},[36,137173,136970],{"class":62},[36,137175,92],{"class":42},[36,137177,136996],{"class":50},[36,137179,40398],{"class":42},[36,137181,137182,137184,137186,137188,137190,137192,137194,137196],{"class":38,"line":131},[36,137183,136982],{"class":62},[36,137185,92],{"class":42},[36,137187,137007],{"class":50},[36,137189,16091],{"class":42},[36,137191,136970],{"class":62},[36,137193,92],{"class":42},[36,137195,137016],{"class":50},[36,137197,40398],{"class":42},[36,137199,137200,137202,137204,137206,137208,137210,137212,137214],{"class":38,"line":225},[36,137201,136982],{"class":62},[36,137203,92],{"class":42},[36,137205,137027],{"class":50},[36,137207,16091],{"class":42},[36,137209,136970],{"class":62},[36,137211,92],{"class":42},[36,137213,137036],{"class":50},[36,137215,5104],{"class":42},[36,137217,137218],{"class":38,"line":235},[36,137219,3982],{"class":42},[36,137221,137222,137224],{"class":38,"line":377},[36,137223,136648],{"class":79},[36,137225,2150],{"class":42},[36,137227,137228,137230,137232,137234],{"class":38,"line":617},[36,137229,136929],{"class":62},[36,137231,2158],{"class":42},[36,137233,136934],{"class":50},[36,137235,3711],{"class":42},[36,137237,137238,137240,137242,137244],{"class":38,"line":643},[36,137239,137063],{"class":62},[36,137241,2158],{"class":42},[36,137243,66188],{"class":62},[36,137245,3711],{"class":42},[36,137247,137248],{"class":38,"line":921},[36,137249,3982],{"class":42},[3879,137251],{"style":128747,"src":137252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137254,137255],{},"更加细节展示：",[650,137257,137258],{},[653,137259,137260],{},"html 标签内添加小图标",[3879,137262],{"style":128747,"src":137263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[650,137265,137266],{"start":54},[653,137267,137268],{},"给标签定义字体",[26,137270,137271],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,137272,137273,137277,137291,137295],{"__ignoreMap":31},[36,137274,137275],{"class":38,"line":39},[36,137276,133002],{"class":2621},[36,137278,137279,137281,137283,137285,137287,137289],{"class":38,"line":54},[36,137280,3463],{"class":42},[36,137282,53959],{"class":53649},[36,137284,55834],{"class":79},[36,137286,47],{"class":42},[36,137288,133015],{"class":50},[36,137290,53656],{"class":42},[36,137292,137293],{"class":38,"line":66},[36,137294,133022],{"class":42},[36,137296,137297,137299,137301],{"class":38,"line":73},[36,137298,54133],{"class":42},[36,137300,53959],{"class":53649},[36,137302,53656],{"class":42},[19,137304,137305],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3879,137307],{"style":128747,"src":137308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1752,137310,137312],{"id":137311},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137314,137315],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137317,137318,137319,137322],{},"把压缩包里面的 ",[667,137320,137321],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137324,137325],{},"打开网站，点下方：",[3879,137327],{"style":128747,"src":137328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3879,137330],{"style":128747,"src":137331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3879,137333],{"style":128747,"src":137334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137336,137337],{},"点yes重新加载",[19,137339,137340],{},"然后重复之前的操作就可以实现了",[19,137342,137343],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1752,137345,137347],{"id":137346},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3879,137349],{"style":128747,"src":137350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2467,137352,137353],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":137355},[137356,137362,137367],{"id":135959,"depth":54,"text":135960,"children":137357},[137358,137359,137360,137361],{"id":135971,"depth":66,"text":135972},{"id":136000,"depth":66,"text":136001},{"id":136028,"depth":66,"text":136029},{"id":136086,"depth":66,"text":136087},{"id":136558,"depth":54,"text":136559,"children":137363},[137364,137365,137366],{"id":136562,"depth":66,"text":136563},{"id":136607,"depth":66,"text":136608},{"id":136623,"depth":66,"text":136624},{"id":136723,"depth":54,"text":136724,"children":137368},[137369,137370,137371,137372,137373,137374],{"id":136727,"depth":66,"text":136728},{"id":136761,"depth":66,"text":136762},{"id":136784,"depth":66,"text":136785},{"id":136831,"depth":66,"text":136832},{"id":137311,"depth":66,"text":137312},{"id":137346,"depth":66,"text":137347},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135951,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137381,"title":137382,"body":137383,"description":2493,"extension":2494,"meta":138610,"navigation":69,"path":138611,"seo":138612,"stem":138613,"__hash__":138614},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137384,"toc":138591},[137385,137388,137392,137395,137409,137477,137507,137510,137514,137518,137620,137667,137671,137674,137677,137711,137714,137717,137720,137723,137726,137729,137732,137734,137737,137740,137743,137746,137749,137752,137755,137783,137786,137790,137793,137800,137803,137806,137832,137835,137839,137842,137845,137852,137856,137859,137861,137893,137896,137899,137911,137917,137920,137923,137926,137928,137932,137935,137938,137941,137986,137990,137992,137995,138002,138044,138047,138051,138056,138070,138074,138077,138080,138083,138086,138089,138123,138126,138129,138183,138186,138189,138192,138195,138247,138250,138253,138302,138306,138308,138311,138314,138317,138320,138323,138381,138384,138390,138393,138396,138428,138431,138435,138439,138442,138474,138478,138481,138525,138529,138532,138535,138538,138541,138544,138547,138550,138552,138555,138557,138560,138563,138566,138569,138574,138577,138579,138582,138585,138588],[10,137386,137382],{"id":137387},"_13-界面样式与布局技巧",[14,137389,137391],{"id":137390},"_131-css三角","13.1 css三角",[19,137393,137394],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3557,137396,137397,137400,137403,137406],{},[653,137398,137399],{},"用css 边框可以模拟三角效果",[653,137401,137402],{},"宽度高度为0",[653,137404,137405],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[653,137407,137408],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,137410,137412],{"className":128891,"code":137411,"language":128893,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,137413,137414,137419,137426,137436,137446,137462,137473],{"__ignoreMap":31},[36,137415,137416],{"class":38,"line":39},[36,137417,137418],{"class":2621},"\u002F* CSS 实现三角形 *\u002F\n",[36,137420,137421,137424],{"class":38,"line":54},[36,137422,137423],{"class":79},".triangle",[36,137425,2150],{"class":42},[36,137427,137428,137430,137432,137434],{"class":38,"line":66},[36,137429,72913],{"class":62},[36,137431,2158],{"class":42},[36,137433,2751],{"class":62},[36,137435,3711],{"class":42},[36,137437,137438,137440,137442,137444],{"class":38,"line":73},[36,137439,73133],{"class":62},[36,137441,2158],{"class":42},[36,137443,2751],{"class":62},[36,137445,3711],{"class":42},[36,137447,137448,137450,137452,137454,137456,137458,137460],{"class":38,"line":86},[36,137449,73241],{"class":62},[36,137451,2158],{"class":42},[36,137453,3002],{"class":62},[36,137455,53840],{"class":46},[36,137457,53869],{"class":62},[36,137459,66338],{"class":62},[36,137461,3711],{"class":42},[36,137463,137464,137467,137469,137471],{"class":38,"line":126},[36,137465,137466],{"class":62},"  border-bottom-color",[36,137468,2158],{"class":42},[36,137470,64717],{"class":62},[36,137472,3711],{"class":42},[36,137474,137475],{"class":38,"line":131},[36,137476,3982],{"class":42},[26,137478,137479],{"className":128891,"code":133048,"language":128893,"meta":31,"style":31},[33,137480,137481,137487,137503],{"__ignoreMap":31},[36,137482,137483,137485],{"class":38,"line":39},[36,137484,53959],{"class":53649},[36,137486,2150],{"class":42},[36,137488,137489,137491,137493,137495,137497,137499,137501],{"class":38,"line":54},[36,137490,73241],{"class":62},[36,137492,2158],{"class":42},[36,137494,1906],{"class":62},[36,137496,53840],{"class":46},[36,137498,53869],{"class":62},[36,137500,132283],{"class":62},[36,137502,3711],{"class":42},[36,137504,137505],{"class":38,"line":66},[36,137506,3982],{"class":42},[3879,137508],{"style":128747,"src":137509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137511,137513],{"id":137512},"_132-css用户界面样式","13.2 css用户界面样式",[1752,137515,137517],{"id":137516},"_1321-鼠标样式","13.2.1 鼠标样式",[26,137519,137521],{"className":128891,"code":137520,"language":128893,"meta":31,"style":31},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[33,137522,137523,137528,137547,137565,137584,137601],{"__ignoreMap":31},[36,137524,137525],{"class":38,"line":39},[36,137526,137527],{"class":2621},"\u002F* 鼠标样式 *\u002F\n",[36,137529,137530,137532,137534,137537,137539,137541,137544],{"class":38,"line":54},[36,137531,53959],{"class":53649},[36,137533,82152],{"class":42},[36,137535,137536],{"class":62},"cursor",[36,137538,2158],{"class":42},[36,137540,64378],{"class":62},[36,137542,137543],{"class":42},"; }   ",[36,137545,137546],{"class":2621},"\u002F* 手型 *\u002F\n",[36,137548,137549,137551,137553,137555,137557,137560,137562],{"class":38,"line":66},[36,137550,53959],{"class":53649},[36,137552,82152],{"class":42},[36,137554,137536],{"class":62},[36,137556,2158],{"class":42},[36,137558,137559],{"class":62},"default",[36,137561,137543],{"class":42},[36,137563,137564],{"class":2621},"\u002F* 默认 *\u002F\n",[36,137566,137567,137569,137571,137573,137575,137578,137581],{"class":38,"line":73},[36,137568,53959],{"class":53649},[36,137570,82152],{"class":42},[36,137572,137536],{"class":62},[36,137574,2158],{"class":42},[36,137576,137577],{"class":62},"move",[36,137579,137580],{"class":42},"; }      ",[36,137582,137583],{"class":2621},"\u002F* 移动 *\u002F\n",[36,137585,137586,137588,137590,137592,137594,137596,137598],{"class":38,"line":86},[36,137587,53959],{"class":53649},[36,137589,82152],{"class":42},[36,137591,137536],{"class":62},[36,137593,2158],{"class":42},[36,137595,7570],{"class":62},[36,137597,137580],{"class":42},[36,137599,137600],{"class":2621},"\u002F* 文本 *\u002F\n",[36,137602,137603,137605,137607,137609,137611,137614,137617],{"class":38,"line":126},[36,137604,53959],{"class":53649},[36,137606,82152],{"class":42},[36,137608,137536],{"class":62},[36,137610,2158],{"class":42},[36,137612,137613],{"class":62},"not-allowed",[36,137615,137616],{"class":42},"; } ",[36,137618,137619],{"class":2621},"\u002F* 禁止 *\u002F\n",[2698,137621,137622,137630],{},[2701,137623,137624],{},[2704,137625,137626,137628],{},[2707,137627,129355],{"align":26106},[2707,137629,29859],{"align":26106},[2744,137631,137632,137639,137646,137653,137660],{},[2704,137633,137634,137636],{},[2749,137635,137559],{"align":26106},[2749,137637,137638],{"align":26106},"小白 默认",[2704,137640,137641,137643],{},[2749,137642,64378],{"align":26106},[2749,137644,137645],{"align":26106},"小手",[2704,137647,137648,137650],{},[2749,137649,137577],{"align":26106},[2749,137651,137652],{"align":26106},"移动",[2704,137654,137655,137657],{},[2749,137656,7570],{"align":26106},[2749,137658,137659],{"align":26106},"文本",[2704,137661,137662,137664],{},[2749,137663,137613],{"align":26106},[2749,137665,137666],{"align":26106},"禁止",[1752,137668,137670],{"id":137669},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137672,137673],{},"去除表单轮廓线",[19,137675,137676],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,137678,137679],{"className":128891,"code":132255,"language":128893,"meta":31,"style":31},[33,137680,137681,137685,137691,137707],{"__ignoreMap":31},[36,137682,137683],{"class":38,"line":39},[36,137684,132262],{"class":2621},[36,137686,137687,137689],{"class":38,"line":54},[36,137688,53959],{"class":53649},[36,137690,2150],{"class":42},[36,137692,137693,137695,137697,137699,137701,137703,137705],{"class":38,"line":66},[36,137694,73241],{"class":62},[36,137696,2158],{"class":42},[36,137698,1906],{"class":62},[36,137700,53840],{"class":46},[36,137702,53869],{"class":62},[36,137704,132283],{"class":62},[36,137706,3711],{"class":42},[36,137708,137709],{"class":38,"line":73},[36,137710,3982],{"class":42},[19,137712,137713],{},"文本域：",[3879,137715],{"style":128747,"src":137716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137718,137719],{},"此时会有一个空白区域",[3879,137721],{"style":128747,"src":137722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137724,137725],{},"写在同一行就不会出现这个问题",[3879,137727],{"style":128747,"src":137728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137730,137731],{},"文本域是行内块元素，一定记住！！！",[19,137733,100574],{},[3879,137735],{"style":128747,"src":137736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137738,137739],{},"文本域尽量放在一行",[19,137741,137742],{},"知识回顾：cols是列，rols是行",[3879,137744],{"style":128747,"src":137745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137747,137748],{},"它可以进行拖动，显然这是我们不愿意看到的",[3879,137750],{"style":128747,"src":137751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137753,137754],{},"使用resize进行解决",[26,137756,137758],{"className":128891,"code":137757,"language":128893,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,137759,137760,137766,137779],{"__ignoreMap":31},[36,137761,137762,137764],{"class":38,"line":39},[36,137763,56169],{"class":53649},[36,137765,2150],{"class":42},[36,137767,137768,137770,137772,137774,137776],{"class":38,"line":54},[36,137769,73143],{"class":62},[36,137771,2158],{"class":42},[36,137773,57085],{"class":62},[36,137775,132754],{"class":42},[36,137777,137778],{"class":2621},"\u002F* 取消表单轮廓线 *\u002F\n",[36,137780,137781],{"class":38,"line":66},[36,137782,3982],{"class":42},[19,137784,137785],{},"此时就无法通过右下方实现拖动了",[1752,137787,137789],{"id":137788},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137791,137792],{},"实现一个盒子中的文字和图片对齐",[19,137794,137795,137796,137799],{},"用于设置一个元素的 ",[667,137797,137798],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137801,137802],{},"图片和文字默认是基线对齐",[3879,137804],{"style":128747,"src":137805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,137807,137808],{"className":128891,"code":137757,"language":128893,"meta":31,"style":31},[33,137809,137810,137816,137828],{"__ignoreMap":31},[36,137811,137812,137814],{"class":38,"line":39},[36,137813,56169],{"class":53649},[36,137815,2150],{"class":42},[36,137817,137818,137820,137822,137824,137826],{"class":38,"line":54},[36,137819,73143],{"class":62},[36,137821,2158],{"class":42},[36,137823,57085],{"class":62},[36,137825,132754],{"class":42},[36,137827,137778],{"class":2621},[36,137829,137830],{"class":38,"line":66},[36,137831,3982],{"class":42},[3879,137833],{"style":128747,"src":137834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24368,137836,137838],{"id":137837},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137840,137841],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3879,137843],{"style":128747,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137846,137847,137848,137851],{},"此时可以给图片、表单这些行内块元素的 ",[667,137849,137850],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24368,137853,137855],{"id":137854},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137857,137858],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137860,17010],{},[26,137862,137864],{"className":128891,"code":137863,"language":128893,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,137865,137866,137871,137877,137889],{"__ignoreMap":31},[36,137867,137868],{"class":38,"line":39},[36,137869,137870],{"class":2621},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,137872,137873,137875],{"class":38,"line":54},[36,137874,3879],{"class":53649},[36,137876,2150],{"class":42},[36,137878,137879,137882,137884,137887],{"class":38,"line":66},[36,137880,137881],{"class":62},"  vertical-align",[36,137883,2158],{"class":42},[36,137885,137886],{"class":62},"middle",[36,137888,3711],{"class":42},[36,137890,137891],{"class":38,"line":73},[36,137892,3982],{"class":42},[3879,137894],{"style":128747,"src":137895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137897,137898],{},"主要解决方法有两种：",[650,137900,137901],{},[653,137902,137903,137906,137907,137910],{},[667,137904,137905],{},"给图片"," 添加 ",[667,137908,137909],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137912,137913,137914],{},"2.把图片转换为块级元素 ",[667,137915,137916],{},"display: block",[19,137918,137919],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137921,137922],{},"img {",[19,137924,137925],{},"vertical-align:middle;",[19,137927,107],{},[1752,137929,137931],{"id":137930},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137933,137934],{},"效果：",[3879,137936],{"style":128747,"src":137937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137939,137940],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,137942,137944],{"className":128891,"code":137943,"language":128893,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,137945,137946,137951,137957,137967,137972,137982],{"__ignoreMap":31},[36,137947,137948],{"class":38,"line":39},[36,137949,137950],{"class":2621},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,137952,137953,137955],{"class":38,"line":54},[36,137954,3879],{"class":53649},[36,137956,2150],{"class":42},[36,137958,137959,137961,137963,137965],{"class":38,"line":66},[36,137960,137881],{"class":62},[36,137962,2158],{"class":42},[36,137964,137886],{"class":62},[36,137966,3711],{"class":42},[36,137968,137969],{"class":38,"line":73},[36,137970,137971],{"class":2621},"  \u002F* 或 *\u002F\n",[36,137973,137974,137976,137978,137980],{"class":38,"line":86},[36,137975,130507],{"class":62},[36,137977,2158],{"class":42},[36,137979,63217],{"class":62},[36,137981,3711],{"class":42},[36,137983,137984],{"class":38,"line":126},[36,137985,3982],{"class":42},[1752,137987,137989],{"id":137988},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137991,137934],{},[3879,137993],{"style":128747,"src":137994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137996,137997,137998,138001],{},"多行文本溢出显示省略号， ",[667,137999,138000],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,138003,138004],{"className":128891,"code":137943,"language":128893,"meta":31,"style":31},[33,138005,138006,138010,138016,138026,138030,138040],{"__ignoreMap":31},[36,138007,138008],{"class":38,"line":39},[36,138009,137950],{"class":2621},[36,138011,138012,138014],{"class":38,"line":54},[36,138013,3879],{"class":53649},[36,138015,2150],{"class":42},[36,138017,138018,138020,138022,138024],{"class":38,"line":66},[36,138019,137881],{"class":62},[36,138021,2158],{"class":42},[36,138023,137886],{"class":62},[36,138025,3711],{"class":42},[36,138027,138028],{"class":38,"line":73},[36,138029,137971],{"class":2621},[36,138031,138032,138034,138036,138038],{"class":38,"line":86},[36,138033,130507],{"class":62},[36,138035,2158],{"class":42},[36,138037,63217],{"class":62},[36,138039,3711],{"class":42},[36,138041,138042],{"class":38,"line":126},[36,138043,3982],{"class":42},[19,138045,138046],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138048,138050],{"id":138049},"_133-常见布局技巧","13.3 常见布局技巧",[19,138052,138053],{},[667,138054,138055],{},"巧妙利用一个技术更快更好的布局：",[650,138057,138058,138061,138064,138067],{},[653,138059,138060],{},"margin负值的运用",[653,138062,138063],{},"文字围绕浮动元素",[653,138065,138066],{},"行内块的巧妙运用",[653,138068,138069],{},"CSS三角强化",[1752,138071,138073],{"id":138072},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138075,138076],{},"应用场景：",[3879,138078],{"style":128747,"src":138079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3879,138081],{"style":128747,"src":138082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138084,138085],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138087,138088],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,138090,138091],{"className":128891,"code":132255,"language":128893,"meta":31,"style":31},[33,138092,138093,138097,138103,138119],{"__ignoreMap":31},[36,138094,138095],{"class":38,"line":39},[36,138096,132262],{"class":2621},[36,138098,138099,138101],{"class":38,"line":54},[36,138100,53959],{"class":53649},[36,138102,2150],{"class":42},[36,138104,138105,138107,138109,138111,138113,138115,138117],{"class":38,"line":66},[36,138106,73241],{"class":62},[36,138108,2158],{"class":42},[36,138110,1906],{"class":62},[36,138112,53840],{"class":46},[36,138114,53869],{"class":62},[36,138116,132283],{"class":62},[36,138118,3711],{"class":42},[36,138120,138121],{"class":38,"line":73},[36,138122,3982],{"class":42},[3879,138124],{"style":128747,"src":138125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138127,138128],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,138130,138132],{"className":128891,"code":138131,"language":128893,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138133,138134,138139,138145,138155,138167,138179],{"__ignoreMap":31},[36,138135,138136],{"class":38,"line":39},[36,138137,138138],{"class":2621},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,138140,138141,138143],{"class":38,"line":54},[36,138142,132739],{"class":79},[36,138144,2150],{"class":42},[36,138146,138147,138149,138151,138153],{"class":38,"line":66},[36,138148,134697],{"class":62},[36,138150,2158],{"class":42},[36,138152,57112],{"class":62},[36,138154,3711],{"class":42},[36,138156,138157,138159,138161,138163,138165],{"class":38,"line":73},[36,138158,134711],{"class":62},[36,138160,2158],{"class":42},[36,138162,3002],{"class":62},[36,138164,53840],{"class":46},[36,138166,3711],{"class":42},[36,138168,138169,138171,138173,138175,138177],{"class":38,"line":86},[36,138170,134728],{"class":62},[36,138172,2158],{"class":42},[36,138174,3254],{"class":62},[36,138176,53840],{"class":46},[36,138178,3711],{"class":42},[36,138180,138181],{"class":38,"line":126},[36,138182,3982],{"class":42},[19,138184,138185],{},"加上上述代码会发现：",[3879,138187],{"style":128747,"src":138188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138190,138191],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138193,138194],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,138196,138197],{"className":128891,"code":138131,"language":128893,"meta":31,"style":31},[33,138198,138199,138203,138209,138219,138231,138243],{"__ignoreMap":31},[36,138200,138201],{"class":38,"line":39},[36,138202,138138],{"class":2621},[36,138204,138205,138207],{"class":38,"line":54},[36,138206,132739],{"class":79},[36,138208,2150],{"class":42},[36,138210,138211,138213,138215,138217],{"class":38,"line":66},[36,138212,134697],{"class":62},[36,138214,2158],{"class":42},[36,138216,57112],{"class":62},[36,138218,3711],{"class":42},[36,138220,138221,138223,138225,138227,138229],{"class":38,"line":73},[36,138222,134711],{"class":62},[36,138224,2158],{"class":42},[36,138226,3002],{"class":62},[36,138228,53840],{"class":46},[36,138230,3711],{"class":42},[36,138232,138233,138235,138237,138239,138241],{"class":38,"line":86},[36,138234,134728],{"class":62},[36,138236,2158],{"class":42},[36,138238,3254],{"class":62},[36,138240,53840],{"class":46},[36,138242,3711],{"class":42},[36,138244,138245],{"class":38,"line":126},[36,138246,3982],{"class":42},[19,138248,138249],{},"解决方式2：",[19,138251,138252],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,138254,138256],{"className":128891,"code":138255,"language":128893,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,138257,138258,138264,138274,138286,138298],{"__ignoreMap":31},[36,138259,138260,138262],{"class":38,"line":39},[36,138261,53959],{"class":53649},[36,138263,2150],{"class":42},[36,138265,138266,138268,138270,138272],{"class":38,"line":54},[36,138267,134697],{"class":62},[36,138269,2158],{"class":42},[36,138271,57112],{"class":62},[36,138273,3711],{"class":42},[36,138275,138276,138278,138280,138282,138284],{"class":38,"line":66},[36,138277,134711],{"class":62},[36,138279,2158],{"class":42},[36,138281,3002],{"class":62},[36,138283,53840],{"class":46},[36,138285,3711],{"class":42},[36,138287,138288,138290,138292,138294,138296],{"class":38,"line":73},[36,138289,134728],{"class":62},[36,138291,2158],{"class":42},[36,138293,3254],{"class":62},[36,138295,53840],{"class":46},[36,138297,3711],{"class":42},[36,138299,138300],{"class":38,"line":86},[36,138301,3982],{"class":42},[1752,138303,138305],{"id":138304},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138307,138076],{},[3879,138309],{"style":128747,"src":138310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138312,138313],{},"实现结构图：",[3879,138315],{"style":128747,"src":138316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138318,138319],{},"巧妙运用浮动元素不会压住文字的特性",[19,138321,138322],{},"代码显示：",[26,138324,138326],{"className":128891,"code":138325,"language":128893,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,138327,138328,138334,138344,138348,138353,138357,138363,138377],{"__ignoreMap":31},[36,138329,138330,138332],{"class":38,"line":39},[36,138331,132739],{"class":79},[36,138333,2150],{"class":42},[36,138335,138336,138338,138340,138342],{"class":38,"line":54},[36,138337,133371],{"class":62},[36,138339,2158],{"class":42},[36,138341,26106],{"class":62},[36,138343,3711],{"class":42},[36,138345,138346],{"class":38,"line":66},[36,138347,3982],{"class":42},[36,138349,138350],{"class":38,"line":73},[36,138351,138352],{"class":42},"```Css\n",[36,138354,138355],{"class":38,"line":86},[36,138356,132734],{"class":2621},[36,138358,138359,138361],{"class":38,"line":126},[36,138360,132739],{"class":79},[36,138362,2150],{"class":42},[36,138364,138365,138367,138369,138371,138373,138375],{"class":38,"line":131},[36,138366,72815],{"class":62},[36,138368,2158],{"class":42},[36,138370,2751],{"class":62},[36,138372,53904],{"class":62},[36,138374,132754],{"class":42},[36,138376,132757],{"class":2621},[36,138378,138379],{"class":38,"line":225},[36,138380,3982],{"class":42},[19,138382,138383],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,138385,138388],{"className":138386,"code":138387,"language":7570},[7568],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,138389,138387],{"__ignoreMap":31},[3879,138391],{"style":128747,"src":138392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138394,138395],{},"最终展示结果：",[26,138397,138398],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,138399,138400,138404,138410,138424],{"__ignoreMap":31},[36,138401,138402],{"class":38,"line":39},[36,138403,132734],{"class":2621},[36,138405,138406,138408],{"class":38,"line":54},[36,138407,132739],{"class":79},[36,138409,2150],{"class":42},[36,138411,138412,138414,138416,138418,138420,138422],{"class":38,"line":66},[36,138413,72815],{"class":62},[36,138415,2158],{"class":42},[36,138417,2751],{"class":62},[36,138419,53904],{"class":62},[36,138421,132754],{"class":42},[36,138423,132757],{"class":2621},[36,138425,138426],{"class":38,"line":73},[36,138427,3982],{"class":42},[3879,138429],{"style":128747,"src":138430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138432,138434],{"id":138433},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1752,138436,138438],{"id":138437},"_1341-原理","13.4.1 原理",[3879,138440],{"style":128747,"src":138441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,138443,138444],{"className":128891,"code":132727,"language":128893,"meta":31,"style":31},[33,138445,138446,138450,138456,138470],{"__ignoreMap":31},[36,138447,138448],{"class":38,"line":39},[36,138449,132734],{"class":2621},[36,138451,138452,138454],{"class":38,"line":54},[36,138453,132739],{"class":79},[36,138455,2150],{"class":42},[36,138457,138458,138460,138462,138464,138466,138468],{"class":38,"line":66},[36,138459,72815],{"class":62},[36,138461,2158],{"class":42},[36,138463,2751],{"class":62},[36,138465,53904],{"class":62},[36,138467,132754],{"class":42},[36,138469,132757],{"class":2621},[36,138471,138472],{"class":38,"line":73},[36,138473,3982],{"class":42},[1752,138475,138477],{"id":138476},"_1342-实例","13.4.2 实例",[3879,138479],{"style":128747,"src":138480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,138482,138483],{"className":128891,"code":133357,"language":128893,"meta":31,"style":31},[33,138484,138485,138491,138501,138505,138511,138521],{"__ignoreMap":31},[36,138486,138487,138489],{"class":38,"line":39},[36,138488,133364],{"class":79},[36,138490,2150],{"class":42},[36,138492,138493,138495,138497,138499],{"class":38,"line":54},[36,138494,133371],{"class":62},[36,138496,2158],{"class":42},[36,138498,26106],{"class":62},[36,138500,3711],{"class":42},[36,138502,138503],{"class":38,"line":66},[36,138504,3982],{"class":42},[36,138506,138507,138509],{"class":38,"line":73},[36,138508,133386],{"class":79},[36,138510,2150],{"class":42},[36,138512,138513,138515,138517,138519],{"class":38,"line":86},[36,138514,133371],{"class":62},[36,138516,2158],{"class":42},[36,138518,74867],{"class":62},[36,138520,3711],{"class":42},[36,138522,138523],{"class":38,"line":126},[36,138524,3982],{"class":42},[14,138526,138528],{"id":138527},"_135-css的初始化","13.5 css的初始化",[19,138530,138531],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138533,138534],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138536,138537],{},"每个网页都必须首先进行 CSS初始化。",[19,138539,138540],{},"这里我们以 京东CSS初始化代码为例。",[19,138542,138543],{},"在网页右键查看网页源代码",[19,138545,138546],{},"找到css的link引入语句",[19,138548,138549],{},"然后ctrl+f 输入body",[19,138551,79571],{},[3879,138553],{"style":128747,"src":138554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138556,79594],{},[3879,138558],{"style":128747,"src":138559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138561,138562],{},"③打开了网页上传压缩的代码",[3879,138564],{"style":128747,"src":138565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138567,138568],{},"④从body前可以查看这个网页的初始化代码",[19,138570,138571],{},[667,138572,138573],{},"Unicode编码字体：",[19,138575,138576],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138578,85549],{},[19,138580,138581],{},"黑体 \\9ED1\\4F53",[19,138583,138584],{},"宋体 \\5B8B\\4F53",[19,138586,138587],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2467,138589,138590],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":138592},[138593,138594,138601,138605,138609],{"id":137390,"depth":54,"text":137391},{"id":137512,"depth":54,"text":137513,"children":138595},[138596,138597,138598,138599,138600],{"id":137516,"depth":66,"text":137517},{"id":137669,"depth":66,"text":137670},{"id":137788,"depth":66,"text":137789},{"id":137930,"depth":66,"text":137931},{"id":137988,"depth":66,"text":137989},{"id":138049,"depth":54,"text":138050,"children":138602},[138603,138604],{"id":138072,"depth":66,"text":138073},{"id":138304,"depth":66,"text":138305},{"id":138433,"depth":54,"text":138434,"children":138606},[138607,138608],{"id":138437,"depth":66,"text":138438},{"id":138476,"depth":66,"text":138477},{"id":138527,"depth":54,"text":138528},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137382,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138616,"title":138617,"body":138618,"description":2493,"extension":2494,"meta":140304,"navigation":69,"path":140305,"seo":140306,"stem":140307,"__hash__":140308},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138619,"toc":140293},[138620,138623,138627,138631,138634,138641,138644,138647,138685,138688,138690,138704,138708,138717,138721,138726,138729,138732,138735,138770,138775,138778,138808,138811,138816,138819,138822,138852,138855,138909,138912,138916,138921,138933,138936,138940,138970,138973,138978,138981,139011,139014,139018,139035,139039,139043,139046,139079,139082,139086,139089,139092,139095,139098,139101,139212,139215,139218,139221,139323,139326,139330,139334,139338,139341,139381,139384,139386,139402,139406,139409,139414,139495,139498,139501,139627,139632,139635,139643,139646,139651,139736,139739,139743,139746,139749,139753,139773,139778,139862,139865,139870,139873,139876,139954,139957,139960,139963,139966,139969,139974,139977,139980,140052,140055,140060,140063,140160,140163,140169,140172,140175,140178,140181,140184,140187,140190,140193,140197,140202,140205,140238,140243,140246,140287,140290],[10,138621,138617],{"id":138622},"_14-html5与css3新特性",[14,138624,138626],{"id":138625},"_141-html5的新特性","14.1 HTML5的新特性",[1752,138628,138630],{"id":138629},"_1411-基本标签","14.1.1 基本标签",[19,138632,138633],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138635,138636,138637,138640],{},"这些新特性都有兼容性问题，基本是 ",[667,138638,138639],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138642,138643],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138645,138646],{},"现在使用的是新特性：",[3557,138648,138649,138655,138661,138667,138673,138679],{},[653,138650,138651,138654],{},[33,138652,138653],{},"\u003Cheader>"," 头部标签",[653,138656,138657,138660],{},[33,138658,138659],{},"\u003Cnav>"," 导航标签",[653,138662,138663,138666],{},[33,138664,138665],{},"\u003Carticle>"," 内容标签",[653,138668,138669,138672],{},[33,138670,138671],{},"\u003Csection>"," 定义文档某个区域",[653,138674,138675,138678],{},[33,138676,138677],{},"\u003Caside>"," 侧边栏标签",[653,138680,138681,138684],{},[33,138682,138683],{},"\u003Cfooter>"," 尾部标签",[3879,138686],{"style":128747,"src":138687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138689,2595],{},[3557,138691,138692,138695,138698,138701],{},[653,138693,138694],{},"这种语义化标准主要是针对搜索引擎的",[653,138696,138697],{},"这些标签页面中可以经常使用",[653,138699,138700],{},"在IE9中，需要把这些元素转换为块级元素",[653,138702,138703],{},"移动端更喜欢使用这些标签",[1752,138705,138707],{"id":138706},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138709,138710,138711,138713,138714,138716],{},"音频 ",[667,138712,30544],{}," 和视频 ",[667,138715,30553],{}," 两个标签",[24368,138718,138720],{"id":138719},"_14121-视频标签-video","14.1.2.1 视频标签- video",[650,138722,138723],{},[653,138724,138725],{},"支持格式：",[3879,138727],{"style":128747,"src":138728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138730,138731],{},"尽量使用MP4，兼容性好",[19,138733,138734],{},"用MP4就可以",[26,138736,138738],{"className":129638,"code":138737,"language":129640,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,138739,138740],{"__ignoreMap":31},[36,138741,138742,138744,138746,138748,138750,138753,138755,138758,138761,138764,138766,138768],{"class":38,"line":39},[36,138743,3463],{"class":42},[36,138745,30553],{"class":53649},[36,138747,57587],{"class":79},[36,138749,47],{"class":42},[36,138751,138752],{"class":50},"\"movie.mp4\"",[36,138754,94764],{"class":79},[36,138756,138757],{"class":79}," autoplay",[36,138759,138760],{"class":79}," muted",[36,138762,138763],{"class":79}," loop",[36,138765,57662],{"class":42},[36,138767,30553],{"class":53649},[36,138769,53656],{"class":42},[650,138771,138772],{"start":54},[653,138773,138774],{},"兼容写法",[19,138776,138777],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,138779,138780],{"className":129638,"code":138737,"language":129640,"meta":31,"style":31},[33,138781,138782],{"__ignoreMap":31},[36,138783,138784,138786,138788,138790,138792,138794,138796,138798,138800,138802,138804,138806],{"class":38,"line":39},[36,138785,3463],{"class":42},[36,138787,30553],{"class":53649},[36,138789,57587],{"class":79},[36,138791,47],{"class":42},[36,138793,138752],{"class":50},[36,138795,94764],{"class":79},[36,138797,138757],{"class":79},[36,138799,138760],{"class":79},[36,138801,138763],{"class":79},[36,138803,57662],{"class":42},[36,138805,30553],{"class":53649},[36,138807,53656],{"class":42},[19,138809,138810],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[650,138812,138813],{"start":66},[653,138814,138815],{},"video常用属性",[3879,138817],{"style":128747,"src":138818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138820,138821],{},"poster属性后面是跟的等待加载图片的地址",[26,138823,138824],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,138825,138826],{"__ignoreMap":31},[36,138827,138828,138830,138832,138834,138836,138838,138840,138842,138844,138846,138848,138850],{"class":38,"line":39},[36,138829,3463],{"class":42},[36,138831,3879],{"class":53649},[36,138833,57587],{"class":79},[36,138835,47],{"class":42},[36,138837,136408],{"class":50},[36,138839,57595],{"class":79},[36,138841,47],{"class":42},[36,138843,136415],{"class":50},[36,138845,136418],{"class":79},[36,138847,47],{"class":42},[36,138849,136423],{"class":50},[36,138851,53656],{"class":42},[19,138853,138854],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,138856,138858],{"className":128891,"code":138857,"language":128893,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,138859,138860,138865,138871,138895,138900,138905],{"__ignoreMap":31},[36,138861,138862],{"class":38,"line":39},[36,138863,138864],{"class":2621},"\u002F* 2D 位移 *\u002F\n",[36,138866,138867,138869],{"class":38,"line":54},[36,138868,53959],{"class":53649},[36,138870,2150],{"class":42},[36,138872,138873,138876,138878,138881,138883,138885,138887,138889,138891,138893],{"class":38,"line":66},[36,138874,138875],{"class":62},"  transform",[36,138877,2158],{"class":42},[36,138879,138880],{"class":62},"translate",[36,138882,92],{"class":42},[36,138884,1070],{"class":62},[36,138886,53840],{"class":46},[36,138888,630],{"class":42},[36,138890,3210],{"class":62},[36,138892,53840],{"class":46},[36,138894,5104],{"class":42},[36,138896,138897],{"class":38,"line":73},[36,138898,138899],{"class":2621},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,138901,138902],{"class":38,"line":86},[36,138903,138904],{"class":2621},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,138906,138907],{"class":38,"line":126},[36,138908,3982],{"class":42},[19,138910,138911],{},"muted:自动静音属性",[24368,138913,138915],{"id":138914},"_14122-音频标签audio","14.1.2.2 音频标签audio",[650,138917,138918],{},[653,138919,138920],{},"基本使用",[19,138922,138923,138924,138929,138930],{},"当前 ",[667,138925,138926],{},[33,138927,138928],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[667,138931,138932],{},"mp3格式",[3879,138934],{"style":128747,"src":138935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[650,138937,138938],{"start":54},[653,138939,138774],{},[26,138941,138942],{"className":129638,"code":138737,"language":129640,"meta":31,"style":31},[33,138943,138944],{"__ignoreMap":31},[36,138945,138946,138948,138950,138952,138954,138956,138958,138960,138962,138964,138966,138968],{"class":38,"line":39},[36,138947,3463],{"class":42},[36,138949,30553],{"class":53649},[36,138951,57587],{"class":79},[36,138953,47],{"class":42},[36,138955,138752],{"class":50},[36,138957,94764],{"class":79},[36,138959,138757],{"class":79},[36,138961,138760],{"class":79},[36,138963,138763],{"class":79},[36,138965,57662],{"class":42},[36,138967,30553],{"class":53649},[36,138969,53656],{"class":42},[19,138971,138972],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[650,138974,138975],{"start":66},[653,138976,138977],{},"常用属性",[3879,138979],{"style":128747,"src":138980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,138982,138983],{"className":129638,"code":138737,"language":129640,"meta":31,"style":31},[33,138984,138985],{"__ignoreMap":31},[36,138986,138987,138989,138991,138993,138995,138997,138999,139001,139003,139005,139007,139009],{"class":38,"line":39},[36,138988,3463],{"class":42},[36,138990,30553],{"class":53649},[36,138992,57587],{"class":79},[36,138994,47],{"class":42},[36,138996,138752],{"class":50},[36,138998,94764],{"class":79},[36,139000,138757],{"class":79},[36,139002,138760],{"class":79},[36,139004,138763],{"class":79},[36,139006,57662],{"class":42},[36,139008,30553],{"class":53649},[36,139010,53656],{"class":42},[19,139012,139013],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24368,139015,139017],{"id":139016},"_14123-总结","14.1.2.3 总结",[3557,139019,139020,139023,139026,139029,139032],{},[653,139021,139022],{},"音频标签和视频标签使用方式基本一致",[653,139024,139025],{},"浏览器支持情况不同",[653,139027,139028],{},"谷歌浏览器把音频和视频自动播放禁止了",[653,139030,139031],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[653,139033,139034],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1752,139036,139038],{"id":139037},"_1413-表单元素","14.1.3 表单元素",[24368,139040,139042],{"id":139041},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3879,139044],{"style":128747,"src":139045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,139047,139049],{"className":129638,"code":139048,"language":129640,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,139050,139051],{"__ignoreMap":31},[36,139052,139053,139055,139057,139059,139061,139063,139065,139067,139070,139072,139074,139077],{"class":38,"line":39},[36,139054,3463],{"class":42},[36,139056,56169],{"class":53649},[36,139058,56172],{"class":79},[36,139060,47],{"class":42},[36,139062,65046],{"class":50},[36,139064,17295],{"class":79},[36,139066,47],{"class":42},[36,139068,139069],{"class":50},"\"username\"",[36,139071,63368],{"class":79},[36,139073,47],{"class":42},[36,139075,139076],{"class":50},"\"请输入用户名\"",[36,139078,53656],{"class":42},[3879,139080],{"style":128747,"src":139081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24368,139083,139085],{"id":139084},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3879,139087],{"style":128747,"src":139088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139090,139091],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139093,139094],{},"快捷操作：",[3879,139096],{"style":128747,"src":139097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139099,139100],{},"例子1：",[26,139102,139104],{"className":129638,"code":139103,"language":129640,"meta":31,"style":31},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[33,139105,139106,139129,139156,139185,139204],{"__ignoreMap":31},[36,139107,139108,139110,139112,139114,139116,139119,139122,139124,139127],{"class":38,"line":39},[36,139109,3463],{"class":42},[36,139111,68972],{"class":53649},[36,139113,68975],{"class":79},[36,139115,47],{"class":42},[36,139117,139118],{"class":50},"\"\u002Fsubmit\"",[36,139120,139121],{"class":79}," method",[36,139123,47],{"class":42},[36,139125,139126],{"class":50},"\"post\"",[36,139128,53656],{"class":42},[36,139130,139131,139133,139135,139137,139139,139141,139143,139145,139147,139149,139151,139154],{"class":38,"line":54},[36,139132,54492],{"class":42},[36,139134,56169],{"class":53649},[36,139136,56172],{"class":79},[36,139138,47],{"class":42},[36,139140,65046],{"class":50},[36,139142,17295],{"class":79},[36,139144,47],{"class":42},[36,139146,139069],{"class":50},[36,139148,63368],{"class":79},[36,139150,47],{"class":42},[36,139152,139153],{"class":50},"\"用户名\"",[36,139155,53656],{"class":42},[36,139157,139158,139160,139162,139164,139166,139169,139171,139173,139176,139178,139180,139183],{"class":38,"line":66},[36,139159,54492],{"class":42},[36,139161,56169],{"class":53649},[36,139163,56172],{"class":79},[36,139165,47],{"class":42},[36,139167,139168],{"class":50},"\"password\"",[36,139170,17295],{"class":79},[36,139172,47],{"class":42},[36,139174,139175],{"class":50},"\"pwd\"",[36,139177,63368],{"class":79},[36,139179,47],{"class":42},[36,139181,139182],{"class":50},"\"密码\"",[36,139184,53656],{"class":42},[36,139186,139187,139189,139191,139193,139195,139197,139200,139202],{"class":38,"line":73},[36,139188,54492],{"class":42},[36,139190,56235],{"class":53649},[36,139192,56172],{"class":79},[36,139194,47],{"class":42},[36,139196,68995],{"class":50},[36,139198,139199],{"class":42},">提交\u003C\u002F",[36,139201,56235],{"class":53649},[36,139203,53656],{"class":42},[36,139205,139206,139208,139210],{"class":38,"line":86},[36,139207,54133],{"class":42},[36,139209,68972],{"class":53649},[36,139211,53656],{"class":42},[3879,139213],{"style":128747,"src":139214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139216,139217],{},"value是表单域的内容",[19,139219,139220],{},"例子2：",[26,139222,139223],{"className":129638,"code":139103,"language":129640,"meta":31,"style":31},[33,139224,139225,139245,139271,139297,139315],{"__ignoreMap":31},[36,139226,139227,139229,139231,139233,139235,139237,139239,139241,139243],{"class":38,"line":39},[36,139228,3463],{"class":42},[36,139230,68972],{"class":53649},[36,139232,68975],{"class":79},[36,139234,47],{"class":42},[36,139236,139118],{"class":50},[36,139238,139121],{"class":79},[36,139240,47],{"class":42},[36,139242,139126],{"class":50},[36,139244,53656],{"class":42},[36,139246,139247,139249,139251,139253,139255,139257,139259,139261,139263,139265,139267,139269],{"class":38,"line":54},[36,139248,54492],{"class":42},[36,139250,56169],{"class":53649},[36,139252,56172],{"class":79},[36,139254,47],{"class":42},[36,139256,65046],{"class":50},[36,139258,17295],{"class":79},[36,139260,47],{"class":42},[36,139262,139069],{"class":50},[36,139264,63368],{"class":79},[36,139266,47],{"class":42},[36,139268,139153],{"class":50},[36,139270,53656],{"class":42},[36,139272,139273,139275,139277,139279,139281,139283,139285,139287,139289,139291,139293,139295],{"class":38,"line":66},[36,139274,54492],{"class":42},[36,139276,56169],{"class":53649},[36,139278,56172],{"class":79},[36,139280,47],{"class":42},[36,139282,139168],{"class":50},[36,139284,17295],{"class":79},[36,139286,47],{"class":42},[36,139288,139175],{"class":50},[36,139290,63368],{"class":79},[36,139292,47],{"class":42},[36,139294,139182],{"class":50},[36,139296,53656],{"class":42},[36,139298,139299,139301,139303,139305,139307,139309,139311,139313],{"class":38,"line":73},[36,139300,54492],{"class":42},[36,139302,56235],{"class":53649},[36,139304,56172],{"class":79},[36,139306,47],{"class":42},[36,139308,68995],{"class":50},[36,139310,139199],{"class":42},[36,139312,56235],{"class":53649},[36,139314,53656],{"class":42},[36,139316,139317,139319,139321],{"class":38,"line":86},[36,139318,54133],{"class":42},[36,139320,68972],{"class":53649},[36,139322,53656],{"class":42},[3879,139324],{"style":128747,"src":139325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139327,139329],{"id":139328},"_142-css新特性","14.2 CSS新特性",[1752,139331,139333],{"id":139332},"_1421-新增选择器","14.2.1 新增选择器",[24368,139335,139337],{"id":139336},"_14211-属性选择器","14.2.1.1 属性选择器",[3879,139339],{"style":128747,"src":139340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,139342,139344],{"className":128891,"code":139343,"language":128893,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,139345,139346,139361,139377],{"__ignoreMap":31},[36,139347,139348,139350,139352,139354,139356,139358],{"class":38,"line":39},[36,139349,56169],{"class":53649},[36,139351,3444],{"class":42},[36,139353,105447],{"class":79},[36,139355,47],{"class":46},[36,139357,65046],{"class":50},[36,139359,139360],{"class":42},"] {\n",[36,139362,139363,139365,139367,139369,139371,139373,139375],{"class":38,"line":54},[36,139364,73241],{"class":62},[36,139366,2158],{"class":42},[36,139368,1906],{"class":62},[36,139370,53840],{"class":46},[36,139372,53869],{"class":62},[36,139374,132471],{"class":62},[36,139376,3711],{"class":42},[36,139378,139379],{"class":38,"line":66},[36,139380,3982],{"class":42},[3879,139382],{"style":128747,"src":139383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139385,2595],{},[3557,139387,139388,139391,139394,139397],{},[653,139389,139390],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[653,139392,139393],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[653,139395,139396],{},"属性选择器也可以选择出来自定义的属性",[653,139398,139399,139401],{},[667,139400,11405],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24368,139403,139405],{"id":139404},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3879,139407],{"style":128747,"src":139408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[650,139410,139411],{},[653,139412,139413],{},"fist-child",[26,139415,139417],{"className":128891,"code":139416,"language":128893,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,139418,139419,139424,139439,139459,139477],{"__ignoreMap":31},[36,139420,139421],{"class":38,"line":39},[36,139422,139423],{"class":2621},"\u002F* 属性选择器 *\u002F\n",[36,139425,139426,139428,139430,139432,139434,139436],{"class":38,"line":54},[36,139427,56169],{"class":53649},[36,139429,3444],{"class":42},[36,139431,105447],{"class":79},[36,139433,47],{"class":46},[36,139435,65046],{"class":50},[36,139437,139438],{"class":42},"] { }\n",[36,139440,139441,139443,139445,139447,139450,139453,139456],{"class":38,"line":66},[36,139442,56169],{"class":53649},[36,139444,3444],{"class":42},[36,139446,147],{"class":79},[36,139448,139449],{"class":46},"^=",[36,139451,139452],{"class":50},"\"icon\"",[36,139454,139455],{"class":42},"] { }  ",[36,139457,139458],{"class":2621},"\u002F* 以 icon 开头 *\u002F\n",[36,139460,139461,139463,139465,139467,139470,139472,139474],{"class":38,"line":73},[36,139462,56169],{"class":53649},[36,139464,3444],{"class":42},[36,139466,147],{"class":79},[36,139468,139469],{"class":46},"$=",[36,139471,139452],{"class":50},[36,139473,139455],{"class":42},[36,139475,139476],{"class":2621},"\u002F* 以 icon 结尾 *\u002F\n",[36,139478,139479,139481,139483,139485,139488,139490,139492],{"class":38,"line":86},[36,139480,56169],{"class":53649},[36,139482,3444],{"class":42},[36,139484,147],{"class":79},[36,139486,139487],{"class":46},"*=",[36,139489,139452],{"class":50},[36,139491,139455],{"class":42},[36,139493,139494],{"class":2621},"\u002F* 包含 icon *\u002F\n",[19,139496,139497],{},"ul的第一个儿子文本为红色",[19,139499,139500],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,139502,139504],{"className":128891,"code":139503,"language":128893,"meta":31,"style":31},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[33,139505,139506,139512,139522,139526,139530,139535,139548,139561,139577,139594,139611],{"__ignoreMap":31},[36,139507,139508,139510],{"class":38,"line":39},[36,139509,129182],{"class":79},[36,139511,2150],{"class":42},[36,139513,139514,139516,139518,139520],{"class":38,"line":54},[36,139515,73250],{"class":62},[36,139517,2158],{"class":42},[36,139519,59769],{"class":62},[36,139521,3711],{"class":42},[36,139523,139524],{"class":38,"line":66},[36,139525,3982],{"class":42},[36,139527,139528],{"class":38,"line":73},[36,139529,138352],{"class":42},[36,139531,139532],{"class":38,"line":86},[36,139533,139534],{"class":2621},"\u002F* 结构伪类选择器 *\u002F\n",[36,139536,139537,139539,139542,139545],{"class":38,"line":126},[36,139538,653],{"class":53649},[36,139540,139541],{"class":79},":first-child",[36,139543,139544],{"class":42}," { }           ",[36,139546,139547],{"class":2621},"\u002F* 第一个 *\u002F\n",[36,139549,139550,139552,139555,139558],{"class":38,"line":131},[36,139551,653],{"class":53649},[36,139553,139554],{"class":79},":last-child",[36,139556,139557],{"class":42}," { }            ",[36,139559,139560],{"class":2621},"\u002F* 最后一个 *\u002F\n",[36,139562,139563,139565,139567,139569,139571,139574],{"class":38,"line":225},[36,139564,653],{"class":53649},[36,139566,131805],{"class":79},[36,139568,92],{"class":42},[36,139570,1911],{"class":62},[36,139572,139573],{"class":42},") { }          ",[36,139575,139576],{"class":2621},"\u002F* 第2个 *\u002F\n",[36,139578,139579,139581,139583,139585,139588,139591],{"class":38,"line":235},[36,139580,653],{"class":53649},[36,139582,131805],{"class":79},[36,139584,92],{"class":42},[36,139586,139587],{"class":62},"2n",[36,139589,139590],{"class":42},") { }         ",[36,139592,139593],{"class":2621},"\u002F* 偶数 *\u002F\n",[36,139595,139596,139598,139600,139602,139605,139608],{"class":38,"line":377},[36,139597,653],{"class":53649},[36,139599,131805],{"class":79},[36,139601,92],{"class":42},[36,139603,139604],{"class":62},"2n+1",[36,139606,139607],{"class":42},") { }       ",[36,139609,139610],{"class":2621},"\u002F* 奇数 *\u002F\n",[36,139612,139613,139615,139617,139619,139622,139624],{"class":38,"line":617},[36,139614,653],{"class":53649},[36,139616,131805],{"class":79},[36,139618,92],{"class":42},[36,139620,139621],{"class":62},"-n+3",[36,139623,139607],{"class":42},[36,139625,139626],{"class":2621},"\u002F* 前3个 *\u002F\n",[53959,139628,139631],{"className":139629},[139630],"example","\n  示例内容\n",[19,139633,139634],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3557,139636,139637],{},[653,139638,139639,139642],{},[33,139640,139641],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139644,139645],{},"也就是说它选择的是熊大",[650,139647,139648],{"start":126},[653,139649,139650],{},"权重",[26,139652,139654],{"className":128891,"code":139653,"language":128893,"meta":31,"style":31},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[33,139655,139656,139660,139670,139680,139694,139708,139722],{"__ignoreMap":31},[36,139657,139658],{"class":38,"line":39},[36,139659,139534],{"class":2621},[36,139661,139662,139664,139666,139668],{"class":38,"line":54},[36,139663,653],{"class":53649},[36,139665,139541],{"class":79},[36,139667,139544],{"class":42},[36,139669,139547],{"class":2621},[36,139671,139672,139674,139676,139678],{"class":38,"line":66},[36,139673,653],{"class":53649},[36,139675,139554],{"class":79},[36,139677,139557],{"class":42},[36,139679,139560],{"class":2621},[36,139681,139682,139684,139686,139688,139690,139692],{"class":38,"line":73},[36,139683,653],{"class":53649},[36,139685,131805],{"class":79},[36,139687,92],{"class":42},[36,139689,1911],{"class":62},[36,139691,139573],{"class":42},[36,139693,139576],{"class":2621},[36,139695,139696,139698,139700,139702,139704,139706],{"class":38,"line":86},[36,139697,653],{"class":53649},[36,139699,131805],{"class":79},[36,139701,92],{"class":42},[36,139703,139587],{"class":62},[36,139705,139590],{"class":42},[36,139707,139593],{"class":2621},[36,139709,139710,139712,139714,139716,139718,139720],{"class":38,"line":126},[36,139711,653],{"class":53649},[36,139713,131805],{"class":79},[36,139715,92],{"class":42},[36,139717,139604],{"class":62},[36,139719,139607],{"class":42},[36,139721,139610],{"class":2621},[36,139723,139724,139726,139728,139730,139732,139734],{"class":38,"line":131},[36,139725,653],{"class":53649},[36,139727,131805],{"class":79},[36,139729,92],{"class":42},[36,139731,139621],{"class":62},[36,139733,139607],{"class":42},[36,139735,139626],{"class":2621},[19,139737,139738],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24368,139740,139742],{"id":139741},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139744,139745],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3879,139747],{"style":128747,"src":139748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[650,139750,139751],{},[653,139752,2595],{},[3557,139754,139755,139758,139761,139764,139767,139770],{},[653,139756,139757],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[653,139759,139760],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[653,139762,139763],{},"语法： element::before {}",[653,139765,139766],{},"before 和 after 必须有 content 属性",[653,139768,139769],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[653,139771,139772],{},"伪元素选择器和标签选择器一样，权重为 1",[650,139774,139775],{"start":54},[653,139776,139777],{},"实例",[26,139779,139780],{"className":128891,"code":139653,"language":128893,"meta":31,"style":31},[33,139781,139782,139786,139796,139806,139820,139834,139848],{"__ignoreMap":31},[36,139783,139784],{"class":38,"line":39},[36,139785,139534],{"class":2621},[36,139787,139788,139790,139792,139794],{"class":38,"line":54},[36,139789,653],{"class":53649},[36,139791,139541],{"class":79},[36,139793,139544],{"class":42},[36,139795,139547],{"class":2621},[36,139797,139798,139800,139802,139804],{"class":38,"line":66},[36,139799,653],{"class":53649},[36,139801,139554],{"class":79},[36,139803,139557],{"class":42},[36,139805,139560],{"class":2621},[36,139807,139808,139810,139812,139814,139816,139818],{"class":38,"line":73},[36,139809,653],{"class":53649},[36,139811,131805],{"class":79},[36,139813,92],{"class":42},[36,139815,1911],{"class":62},[36,139817,139573],{"class":42},[36,139819,139576],{"class":2621},[36,139821,139822,139824,139826,139828,139830,139832],{"class":38,"line":86},[36,139823,653],{"class":53649},[36,139825,131805],{"class":79},[36,139827,92],{"class":42},[36,139829,139587],{"class":62},[36,139831,139590],{"class":42},[36,139833,139593],{"class":2621},[36,139835,139836,139838,139840,139842,139844,139846],{"class":38,"line":126},[36,139837,653],{"class":53649},[36,139839,131805],{"class":79},[36,139841,92],{"class":42},[36,139843,139604],{"class":62},[36,139845,139607],{"class":42},[36,139847,139610],{"class":2621},[36,139849,139850,139852,139854,139856,139858,139860],{"class":38,"line":131},[36,139851,653],{"class":53649},[36,139853,131805],{"class":79},[36,139855,92],{"class":42},[36,139857,139621],{"class":62},[36,139859,139607],{"class":42},[36,139861,139626],{"class":2621},[3879,139863],{"style":128747,"src":139864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[650,139866,139867],{"start":66},[653,139868,139869],{},"使用场景1",[3879,139871],{"style":128747,"src":139872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139874,139875],{},"不需要再加盒子来整红色那部分了",[26,139877,139879],{"className":128891,"code":139878,"language":128893,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,139880,139881,139886,139895,139906,139916,139920,139929,139940,139950],{"__ignoreMap":31},[36,139882,139883],{"class":38,"line":39},[36,139884,139885],{"class":2621},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,139887,139888,139890,139893],{"class":38,"line":54},[36,139889,53959],{"class":53649},[36,139891,139892],{"class":79},"::before",[36,139894,2150],{"class":42},[36,139896,139897,139900,139902,139904],{"class":38,"line":66},[36,139898,139899],{"class":62},"  content",[36,139901,2158],{"class":42},[36,139903,10033],{"class":50},[36,139905,3711],{"class":42},[36,139907,139908,139910,139912,139914],{"class":38,"line":73},[36,139909,130507],{"class":62},[36,139911,2158],{"class":42},[36,139913,63217],{"class":62},[36,139915,3711],{"class":42},[36,139917,139918],{"class":38,"line":86},[36,139919,3982],{"class":42},[36,139921,139922,139924,139927],{"class":38,"line":126},[36,139923,53959],{"class":53649},[36,139925,139926],{"class":79},"::after",[36,139928,2150],{"class":42},[36,139930,139931,139933,139935,139938],{"class":38,"line":131},[36,139932,139899],{"class":62},[36,139934,2158],{"class":42},[36,139936,139937],{"class":50},"\"→\"",[36,139939,3711],{"class":42},[36,139941,139942,139944,139946,139948],{"class":38,"line":225},[36,139943,73250],{"class":62},[36,139945,2158],{"class":42},[36,139947,64418],{"class":62},[36,139949,3711],{"class":42},[36,139951,139952],{"class":38,"line":235},[36,139953,3982],{"class":42},[3879,139955],{"style":128747,"src":139956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139958,139959],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3879,139961],{"style":128747,"src":139962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139964,139965],{},"但是在引用时需要先转义一下",[19,139967,139968],{},"content='\\e930'",[650,139970,139971],{"start":73},[653,139972,139973],{},"使用场景2",[19,139975,139976],{},"仿土豆效果",[19,139978,139979],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,139981,139982],{"className":128891,"code":139878,"language":128893,"meta":31,"style":31},[33,139983,139984,139988,139996,140006,140016,140020,140028,140038,140048],{"__ignoreMap":31},[36,139985,139986],{"class":38,"line":39},[36,139987,139885],{"class":2621},[36,139989,139990,139992,139994],{"class":38,"line":54},[36,139991,53959],{"class":53649},[36,139993,139892],{"class":79},[36,139995,2150],{"class":42},[36,139997,139998,140000,140002,140004],{"class":38,"line":66},[36,139999,139899],{"class":62},[36,140001,2158],{"class":42},[36,140003,10033],{"class":50},[36,140005,3711],{"class":42},[36,140007,140008,140010,140012,140014],{"class":38,"line":73},[36,140009,130507],{"class":62},[36,140011,2158],{"class":42},[36,140013,63217],{"class":62},[36,140015,3711],{"class":42},[36,140017,140018],{"class":38,"line":86},[36,140019,3982],{"class":42},[36,140021,140022,140024,140026],{"class":38,"line":126},[36,140023,53959],{"class":53649},[36,140025,139926],{"class":79},[36,140027,2150],{"class":42},[36,140029,140030,140032,140034,140036],{"class":38,"line":131},[36,140031,139899],{"class":62},[36,140033,2158],{"class":42},[36,140035,139937],{"class":50},[36,140037,3711],{"class":42},[36,140039,140040,140042,140044,140046],{"class":38,"line":225},[36,140041,73250],{"class":62},[36,140043,2158],{"class":42},[36,140045,64418],{"class":62},[36,140047,3711],{"class":42},[36,140049,140050],{"class":38,"line":235},[36,140051,3982],{"class":42},[3879,140053],{"style":128747,"src":140054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[650,140056,140057],{"start":86},[653,140058,140059],{},"使用场景3",[19,140061,140062],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,140064,140066],{"className":128891,"code":140065,"language":128893,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,140067,140068,140074,140084,140088,140092,140096,140104,140114,140124,140128,140136,140146,140156],{"__ignoreMap":31},[36,140069,140070,140072],{"class":38,"line":39},[36,140071,132739],{"class":79},[36,140073,2150],{"class":42},[36,140075,140076,140078,140080,140082],{"class":38,"line":54},[36,140077,133371],{"class":62},[36,140079,2158],{"class":42},[36,140081,26106],{"class":62},[36,140083,3711],{"class":42},[36,140085,140086],{"class":38,"line":66},[36,140087,3982],{"class":42},[36,140089,140090],{"class":38,"line":73},[36,140091,138352],{"class":42},[36,140093,140094],{"class":38,"line":86},[36,140095,139885],{"class":2621},[36,140097,140098,140100,140102],{"class":38,"line":126},[36,140099,53959],{"class":53649},[36,140101,139892],{"class":79},[36,140103,2150],{"class":42},[36,140105,140106,140108,140110,140112],{"class":38,"line":131},[36,140107,139899],{"class":62},[36,140109,2158],{"class":42},[36,140111,10033],{"class":50},[36,140113,3711],{"class":42},[36,140115,140116,140118,140120,140122],{"class":38,"line":225},[36,140117,130507],{"class":62},[36,140119,2158],{"class":42},[36,140121,63217],{"class":62},[36,140123,3711],{"class":42},[36,140125,140126],{"class":38,"line":235},[36,140127,3982],{"class":42},[36,140129,140130,140132,140134],{"class":38,"line":377},[36,140131,53959],{"class":53649},[36,140133,139926],{"class":79},[36,140135,2150],{"class":42},[36,140137,140138,140140,140142,140144],{"class":38,"line":617},[36,140139,139899],{"class":62},[36,140141,2158],{"class":42},[36,140143,139937],{"class":50},[36,140145,3711],{"class":42},[36,140147,140148,140150,140152,140154],{"class":38,"line":643},[36,140149,73250],{"class":62},[36,140151,2158],{"class":42},[36,140153,64418],{"class":62},[36,140155,3711],{"class":42},[36,140157,140158],{"class":38,"line":921},[36,140159,3982],{"class":42},[19,140161,140162],{},"div {\nmargin: 0 auto;\n}",[26,140164,140167],{"className":140165,"code":140166,"language":7570},[7568],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[33,140168,140166],{"__ignoreMap":31},[19,140170,140171],{},"如果想让多个元素都发生变化",[19,140173,140174],{},"不能如下操作：",[19,140176,140177],{},"transition: width 2s ease 0.5s;",[19,140179,140180],{},"transition: height 2s ease 0.5s;不对！！！",[19,140182,140183],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140185,140186],{},"使用如下：加逗号隔开",[19,140188,140189],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140191,140192],{},"transition all 2s ease;",[1752,140194,140196],{"id":140195},"_1426-过渡练习","14.2.6 过渡练习",[650,140198,140199],{},[653,140200,140201],{},"进度条",[3879,140203],{"style":128747,"src":140204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,140206,140208],{"className":128891,"code":140207,"language":128893,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,140209,140210,140216,140234],{"__ignoreMap":31},[36,140211,140212,140214],{"class":38,"line":39},[36,140213,53959],{"class":53649},[36,140215,2150],{"class":42},[36,140217,140218,140221,140223,140225,140228,140230,140232],{"class":38,"line":54},[36,140219,140220],{"class":62},"  transition",[36,140222,2158],{"class":42},[36,140224,30491],{"class":62},[36,140226,140227],{"class":62}," 0.3",[36,140229,3249],{"class":46},[36,140231,81025],{"class":62},[36,140233,3711],{"class":42},[36,140235,140236],{"class":38,"line":66},[36,140237,3982],{"class":42},[650,140239,140240],{"start":54},[653,140241,140242],{},"小米logo",[19,140244,140245],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,140247,140249],{"className":128891,"code":140248,"language":128893,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,140250,140251,140256,140262,140278,140283],{"__ignoreMap":31},[36,140252,140253],{"class":38,"line":39},[36,140254,140255],{"class":2621},"\u002F* CSS3 过渡 *\u002F\n",[36,140257,140258,140260],{"class":38,"line":54},[36,140259,53959],{"class":53649},[36,140261,2150],{"class":42},[36,140263,140264,140266,140268,140270,140272,140274,140276],{"class":38,"line":66},[36,140265,140220],{"class":62},[36,140267,2158],{"class":42},[36,140269,30491],{"class":62},[36,140271,140227],{"class":62},[36,140273,3249],{"class":46},[36,140275,81025],{"class":62},[36,140277,3711],{"class":42},[36,140279,140280],{"class":38,"line":73},[36,140281,140282],{"class":2621},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,140284,140285],{"class":38,"line":86},[36,140286,3982],{"class":42},[19,140288,140289],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2467,140291,140292],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":140294},[140295,140300],{"id":138625,"depth":54,"text":138626,"children":140296},[140297,140298,140299],{"id":138629,"depth":66,"text":138630},{"id":138706,"depth":66,"text":138707},{"id":139037,"depth":66,"text":139038},{"id":139328,"depth":54,"text":139329,"children":140301},[140302,140303],{"id":139332,"depth":66,"text":139333},{"id":140195,"depth":66,"text":140196},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138617,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140310,"title":140311,"body":140312,"description":2493,"extension":2494,"meta":142056,"navigation":69,"path":142057,"seo":142058,"stem":142059,"__hash__":142060},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140313,"toc":142037},[140314,140317,140321,140324,140330,140336,140340,140342,140345,140348,140351,140354,140357,140360,140363,140367,140371,140374,140377,140380,140384,140387,140390,140395,140398,140401,140404,140408,140411,140420,140423,140426,140430,140433,140436,140441,140448,140462,140470,140477,140482,140485,140488,140491,140498,140502,140508,140514,140517,140520,140525,140531,140533,140541,140546,140549,140555,140557,140562,140567,140570,140572,140577,140580,140585,140590,140624,140628,140632,140635,140639,140642,140728,140731,140768,140771,140807,140811,140816,140829,140883,140885,140913,140915,140943,140949,140963,140965,141009,141011,141055,141058,141065,141076,141078,141105,141107,141133,141140,141156,141158,141252,141254,141348,141355,141358,141363,141369,141443,141446,141448,141484,141486,141522,141525,141532,141551,141554,141557,141559,141584,141586,141610,141613,141616,141646,141650,141653,141716,141718,141784,141786,141850,141853,141885,141887,141913,141915,141941,141944,141975,141977,142003,142005,142031,142034],[10,140315,140311],{"id":140316},"_15-品优购项目上篇-搭建与公共模块",[14,140318,140320],{"id":140319},"_151-项目规划","15.1 项目规划",[3879,140322],{"style":128747,"src":140323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140325,140326,140329],{},[667,140327,140328],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140331,140332,140335],{},[667,140333,140334],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140337,140339],{"id":140338},"_152-项目介绍","15.2 项目介绍",[19,140341,140328],{},[3879,140343],{"style":128747,"src":140344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140346,140347],{},"主页：",[3879,140349],{"style":128747,"src":140350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140352,140353],{},"列表页：",[3879,140355],{"style":128747,"src":140356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140358,140359],{},"注册页：",[3879,140361],{"style":128747,"src":140362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140364,140366],{"id":140365},"_153-项目搭建工作","15.3 项目搭建工作",[1752,140368,140370],{"id":140369},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3879,140372],{"style":128747,"src":140373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140375,140376],{},"经常更换的图片要放到upload文件夹中",[19,140378,140379],{},"不经常换的放到images文件夹中",[1752,140381,140383],{"id":140382},"_1532-创建文件如下","15.3.2 创建文件如下",[3879,140385],{"style":128747,"src":140386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3879,140388],{"style":128747,"src":140389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140391,140392],{},[667,140393,140394],{},"初始化样式：",[19,140396,140397],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140399,140400],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140402,140403],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1752,140405,140407],{"id":140406},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140409,140410],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140412,140413,140414,140419],{},"这里最典型的应用就是 ",[667,140415,140416],{},[33,140417,140418],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3879,140421],{"style":128747,"src":140422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140424,140425],{},"通过link方法来引入",[1752,140427,140429],{"id":140428},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3879,140431],{"style":128747,"src":140432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140434,140435],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[650,140437,140438],{},[653,140439,140440],{},"制作favicon图标",[19,140442,140443,140444,140447],{},"①把品优购图标切成 ",[33,140445,140446],{},"png"," 图片",[19,140449,140450,140451,140453,140454,140457,140458],{},"②把 ",[33,140452,140446],{}," 图片转换为 ",[33,140455,140456],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2796,140459,140460],{"href":140460,"rel":140461},"http:\u002F\u002Fwww.bitbug.net\u002F",[26235],[650,140463,140464,140467],{"start":54},[653,140465,140466],{},"favicon图标放到网站根目录下",[653,140468,140469],{},"HTML页面引入favicon",[19,140471,140472,140473,140476],{},"在html 页面里面的 ",[33,140474,140475],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140478,140479],{},[33,140480,140481],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140483,140484],{},"复制这行代码或者在生成这个的网站进行复制",[3879,140486],{"style":128747,"src":140487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140489,140490],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140492,140493,140494],{},"例如:",[2796,140495,140496],{"href":140496,"rel":140497},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26235],[1752,140499,140501],{"id":140500},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140503,140504,140507],{},[667,140505,140506],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140509,140510,140513],{},[667,140511,140512],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140515,140516],{},"页面必须有三个标签用来符合 SEO 优化",[3879,140518],{"style":128747,"src":140519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[650,140521,140522],{},[653,140523,140524],{},"title网站标题",[19,140526,140527,140530],{},[667,140528,140529],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140532,71137],{},[3557,140534,140535,140538],{},[653,140536,140537],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[653,140539,140540],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[650,140542,140543],{"start":54},[653,140544,140545],{},"description网站描述",[19,140547,140548],{},"简要说明我们网站主要是做什么的",[19,140550,140551,140554],{},[667,140552,140553],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140556,71137],{},[19,140558,140559],{},[33,140560,140561],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[650,140563,140564],{"start":66},[653,140565,140566],{},"keywords关键词",[19,140568,140569],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140571,71137],{},[19,140573,140574],{},[33,140575,140576],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140578,140579],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140581,140582],{},[667,140583,140584],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[650,140586,140587],{"start":73},[653,140588,140589],{},"代码总结",[26,140591,140592],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,140593,140594,140598,140612,140616],{"__ignoreMap":31},[36,140595,140596],{"class":38,"line":39},[36,140597,133002],{"class":2621},[36,140599,140600,140602,140604,140606,140608,140610],{"class":38,"line":54},[36,140601,3463],{"class":42},[36,140603,53959],{"class":53649},[36,140605,55834],{"class":79},[36,140607,47],{"class":42},[36,140609,133015],{"class":50},[36,140611,53656],{"class":42},[36,140613,140614],{"class":38,"line":66},[36,140615,133022],{"class":42},[36,140617,140618,140620,140622],{"class":38,"line":73},[36,140619,54133],{"class":42},[36,140621,53959],{"class":53649},[36,140623,53656],{"class":42},[14,140625,140627],{"id":140626},"_154-项目公共部分制作","15.4 项目公共部分制作",[1752,140629,140631],{"id":140630},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3879,140633],{"style":128747,"src":140634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1752,140636,140638],{"id":140637},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140640,140641],{},"布局思路：",[3557,140643,140644,140647,140650,140672,140705],{},[653,140645,140646],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[653,140648,140649],{},"里面包含版心的盒子",[653,140651,140652,140653],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3557,140654,140655,140663,140669],{},[653,140656,140657,140658,23870,140660,140662],{},"1 号盒子 里面包含一个",[33,140659,3557],{},[33,140661,3557],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[653,140664,140665,140666,140668],{},"里面的内容是水平排列，所以需要给",[33,140667,653],{},"设置浮动",[653,140670,140671],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[653,140673,140674,140675],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3557,140676,140677,140691,140696],{},[653,140678,140679,140680,23870,140682,140684,140685,140687,140688,140690],{},"2 号盒子 里面包含一个",[33,140681,3557],{},[33,140683,3557],{},"包裹",[33,140686,653],{},"，中间的",[33,140689,3474],{},"可以用样式去设置，也可以用字符 |",[653,140692,140693,140694,140668],{},"里面内容水平排列，给",[33,140695,653],{},[653,140697,140698,140699,140701,140702,140704],{},"找到里面所有偶数的 ",[33,140700,653],{}," 设置样式（偶数的 ",[33,140703,653],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[653,140706,140707,140708],{},"需要用到字体图标",[3557,140709,140710,140716,140719,140722,140725],{},[653,140711,140712,140713],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,140714,140715],{},"arrow-icon",[653,140717,140718],{},"先要引入字体图片的资源",[653,140720,140721],{},"在样式里面利用 font-face 来进行声明",[653,140723,140724],{},"在伪元素的 content属性设置 图标的编码",[653,140726,140727],{},"给伪元素设置font-family属性",[19,140729,140730],{},"结构实例代码：",[26,140732,140734],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,140735,140736,140744,140754,140764],{"__ignoreMap":31},[36,140737,140738,140740,140742],{"class":38,"line":39},[36,140739,53959],{"class":53649},[36,140741,139892],{"class":79},[36,140743,2150],{"class":42},[36,140745,140746,140748,140750,140752],{"class":38,"line":54},[36,140747,139899],{"class":62},[36,140749,2158],{"class":42},[36,140751,10033],{"class":50},[36,140753,3711],{"class":42},[36,140755,140756,140758,140760,140762],{"class":38,"line":66},[36,140757,130507],{"class":62},[36,140759,2158],{"class":42},[36,140761,63217],{"class":62},[36,140763,3711],{"class":42},[36,140765,140766],{"class":38,"line":73},[36,140767,3982],{"class":42},[19,140769,140770],{},"样式实例代码：",[26,140772,140773],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,140774,140775,140783,140793,140803],{"__ignoreMap":31},[36,140776,140777,140779,140781],{"class":38,"line":39},[36,140778,53959],{"class":53649},[36,140780,139892],{"class":79},[36,140782,2150],{"class":42},[36,140784,140785,140787,140789,140791],{"class":38,"line":54},[36,140786,139899],{"class":62},[36,140788,2158],{"class":42},[36,140790,10033],{"class":50},[36,140792,3711],{"class":42},[36,140794,140795,140797,140799,140801],{"class":38,"line":66},[36,140796,130507],{"class":62},[36,140798,2158],{"class":42},[36,140800,63217],{"class":62},[36,140802,3711],{"class":42},[36,140804,140805],{"class":38,"line":73},[36,140806,3982],{"class":42},[1752,140808,140810],{"id":140809},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3557,140812,140813],{},[653,140814,140815],{},"header 盒子必须要有高度",[19,140817,140818,140819,140821,140822],{},"1 号盒子是 ",[33,140820,133903],{}," 标志定位，在正常开发过程中， ",[667,140823,140824,140825,140828],{},"logo的布局其实是有讲究的，需要进行 ",[33,140826,140827],{},"logoSEO","的优化 （★★★）",[3557,140830,140831,140839,140847,140874],{},[653,140832,140833,140835,140836,140838],{},[33,140834,133903],{}," 里面首先放一个 ",[33,140837,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[653,140840,140841,140843,140844,140846],{},[33,140842,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,140845,133903],{}," 的背景图片给链接即可",[653,140848,140849,140850],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3557,140851,140852,140867],{},[653,140853,140854,140855,140858,140859,140862,140863,140866],{},"方法1：",[33,140856,140857],{},"text-indent"," 移到盒子外面（",[33,140860,140861],{},"text-indent: -9999px",") ，然后 ",[33,140864,140865],{},"overflow:hidden"," ，淘宝的做法",[653,140868,140869,140870,140873],{},"方法2：直接给 ",[33,140871,140872],{},"font-size: 0;"," 就看不到文字了，京东的做法",[653,140875,140876,140877,140879,140880,140882],{},"最后给链接一个 ",[33,140878,53756],{}," 属性，这样鼠标放到 ",[33,140881,133903],{}," 上就可以看到提示文字了",[19,140884,140730],{},[26,140886,140887],{"className":129638,"code":134124,"language":129640,"meta":31,"style":31},[33,140888,140889],{"__ignoreMap":31},[36,140890,140891,140893,140895,140897,140899,140901,140903,140905,140907,140909,140911],{"class":38,"line":39},[36,140892,3463],{"class":42},[36,140894,2796],{"class":53649},[36,140896,63405],{"class":79},[36,140898,47],{"class":42},[36,140900,134139],{"class":50},[36,140902,134142],{"class":79},[36,140904,47],{"class":42},[36,140906,134147],{"class":50},[36,140908,134150],{"class":42},[36,140910,2796],{"class":53649},[36,140912,53656],{"class":42},[19,140914,140770],{},[26,140916,140917],{"className":129638,"code":134124,"language":129640,"meta":31,"style":31},[33,140918,140919],{"__ignoreMap":31},[36,140920,140921,140923,140925,140927,140929,140931,140933,140935,140937,140939,140941],{"class":38,"line":39},[36,140922,3463],{"class":42},[36,140924,2796],{"class":53649},[36,140926,63405],{"class":79},[36,140928,47],{"class":42},[36,140930,134139],{"class":50},[36,140932,134142],{"class":79},[36,140934,47],{"class":42},[36,140936,134147],{"class":50},[36,140938,134150],{"class":42},[36,140940,2796],{"class":53649},[36,140942,53656],{"class":42},[19,140944,140945,140946,140948],{},"2 号盒子是 ",[33,140947,133916],{}," 搜索模块定位",[3557,140950,140951,140954,140957,140960],{},[653,140952,140953],{},"search盒子利用定位的方式放在对应的位置",[653,140955,140956],{},"search盒子设置绝对定位，header盒子设置相对定位",[653,140958,140959],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[653,140961,140962],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140964,140730],{},[26,140966,140967],{"className":128891,"code":134211,"language":128893,"meta":31,"style":31},[33,140968,140969,140991,140995,141005],{"__ignoreMap":31},[36,140970,140971,140973,140975,140977,140979,140981,140983,140985,140987,140989],{"class":38,"line":39},[36,140972,53959],{"class":53649},[36,140974,630],{"class":42},[36,140976,19],{"class":53649},[36,140978,630],{"class":42},[36,140980,10],{"class":53649},[36,140982,630],{"class":42},[36,140984,3557],{"class":53649},[36,140986,630],{"class":42},[36,140988,653],{"class":53649},[36,140990,2150],{"class":42},[36,140992,140993],{"class":38,"line":54},[36,140994,134240],{"class":2621},[36,140996,140997,140999,141001,141003],{"class":38,"line":66},[36,140998,130507],{"class":62},[36,141000,2158],{"class":42},[36,141002,63217],{"class":62},[36,141004,3711],{"class":42},[36,141006,141007],{"class":38,"line":73},[36,141008,3982],{"class":42},[19,141010,140770],{},[26,141012,141013],{"className":128891,"code":134211,"language":128893,"meta":31,"style":31},[33,141014,141015,141037,141041,141051],{"__ignoreMap":31},[36,141016,141017,141019,141021,141023,141025,141027,141029,141031,141033,141035],{"class":38,"line":39},[36,141018,53959],{"class":53649},[36,141020,630],{"class":42},[36,141022,19],{"class":53649},[36,141024,630],{"class":42},[36,141026,10],{"class":53649},[36,141028,630],{"class":42},[36,141030,3557],{"class":53649},[36,141032,630],{"class":42},[36,141034,653],{"class":53649},[36,141036,2150],{"class":42},[36,141038,141039],{"class":38,"line":54},[36,141040,134240],{"class":2621},[36,141042,141043,141045,141047,141049],{"class":38,"line":66},[36,141044,130507],{"class":62},[36,141046,2158],{"class":42},[36,141048,63217],{"class":62},[36,141050,3711],{"class":42},[36,141052,141053],{"class":38,"line":73},[36,141054,3982],{"class":42},[19,141056,141057],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141059,141060,141061,141064],{},"3 号盒子是 ",[33,141062,141063],{},"hotwords"," 热词模块定位",[3557,141066,141067,141070,141073],{},[653,141068,141069],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[653,141071,141072],{},"给里面所有的a标签设置 左右10px的外边距",[653,141074,141075],{},"给第一个a标签设置文字变红色（#c81623）",[19,141077,140730],{},[26,141079,141081],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,141082,141083,141089,141101],{"__ignoreMap":31},[36,141084,141085,141087],{"class":38,"line":39},[36,141086,53959],{"class":53649},[36,141088,2150],{"class":42},[36,141090,141091,141093,141095,141097,141099],{"class":38,"line":54},[36,141092,72815],{"class":62},[36,141094,2158],{"class":42},[36,141096,2751],{"class":62},[36,141098,53904],{"class":62},[36,141100,3711],{"class":42},[36,141102,141103],{"class":38,"line":66},[36,141104,3982],{"class":42},[19,141106,140770],{},[26,141108,141109],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,141110,141111,141117,141129],{"__ignoreMap":31},[36,141112,141113,141115],{"class":38,"line":39},[36,141114,53959],{"class":53649},[36,141116,2150],{"class":42},[36,141118,141119,141121,141123,141125,141127],{"class":38,"line":54},[36,141120,72815],{"class":62},[36,141122,2158],{"class":42},[36,141124,2751],{"class":62},[36,141126,53904],{"class":62},[36,141128,3711],{"class":42},[36,141130,141131],{"class":38,"line":66},[36,141132,3982],{"class":42},[19,141134,141135,141136,141139],{},"4 号盒子是 ",[33,141137,141138],{},"shopcar"," 购物车模块",[3557,141141,141142,141147,141150,141153],{},[653,141143,125674,141144,141146],{},[33,141145,141138],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[653,141148,141149],{},"count 统计部分用绝对定位做",[653,141151,141152],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[653,141154,141155],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141157,140730],{},[26,141159,141160],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,141161,141162,141166,141180,141184,141198,141202,141216,141220,141234,141238],{"__ignoreMap":31},[36,141163,141164],{"class":38,"line":39},[36,141165,134330],{"class":2621},[36,141167,141168,141170,141172,141174,141176,141178],{"class":38,"line":54},[36,141169,134335],{"class":79},[36,141171,82152],{"class":42},[36,141173,131251],{"class":62},[36,141175,2158],{"class":42},[36,141177,134344],{"class":62},[36,141179,131821],{"class":42},[36,141181,141182],{"class":38,"line":66},[36,141183,134351],{"class":2621},[36,141185,141186,141188,141190,141192,141194,141196],{"class":38,"line":73},[36,141187,134356],{"class":79},[36,141189,82152],{"class":42},[36,141191,131251],{"class":62},[36,141193,2158],{"class":42},[36,141195,57112],{"class":62},[36,141197,131821],{"class":42},[36,141199,141200],{"class":38,"line":86},[36,141201,134371],{"class":2621},[36,141203,141204,141206,141208,141210,141212,141214],{"class":38,"line":126},[36,141205,134376],{"class":79},[36,141207,82152],{"class":42},[36,141209,131251],{"class":62},[36,141211,2158],{"class":42},[36,141213,57179],{"class":62},[36,141215,131821],{"class":42},[36,141217,141218],{"class":38,"line":131},[36,141219,134391],{"class":2621},[36,141221,141222,141224,141226,141228,141230,141232],{"class":38,"line":225},[36,141223,134396],{"class":79},[36,141225,82152],{"class":42},[36,141227,131251],{"class":62},[36,141229,2158],{"class":42},[36,141231,88575],{"class":62},[36,141233,131821],{"class":42},[36,141235,141236],{"class":38,"line":235},[36,141237,134411],{"class":2621},[36,141239,141240,141242,141244,141246,141248,141250],{"class":38,"line":377},[36,141241,134416],{"class":79},[36,141243,82152],{"class":42},[36,141245,131251],{"class":62},[36,141247,2158],{"class":42},[36,141249,134425],{"class":62},[36,141251,131821],{"class":42},[19,141253,140770],{},[26,141255,141256],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,141257,141258,141262,141276,141280,141294,141298,141312,141316,141330,141334],{"__ignoreMap":31},[36,141259,141260],{"class":38,"line":39},[36,141261,134330],{"class":2621},[36,141263,141264,141266,141268,141270,141272,141274],{"class":38,"line":54},[36,141265,134335],{"class":79},[36,141267,82152],{"class":42},[36,141269,131251],{"class":62},[36,141271,2158],{"class":42},[36,141273,134344],{"class":62},[36,141275,131821],{"class":42},[36,141277,141278],{"class":38,"line":66},[36,141279,134351],{"class":2621},[36,141281,141282,141284,141286,141288,141290,141292],{"class":38,"line":73},[36,141283,134356],{"class":79},[36,141285,82152],{"class":42},[36,141287,131251],{"class":62},[36,141289,2158],{"class":42},[36,141291,57112],{"class":62},[36,141293,131821],{"class":42},[36,141295,141296],{"class":38,"line":86},[36,141297,134371],{"class":2621},[36,141299,141300,141302,141304,141306,141308,141310],{"class":38,"line":126},[36,141301,134376],{"class":79},[36,141303,82152],{"class":42},[36,141305,131251],{"class":62},[36,141307,2158],{"class":42},[36,141309,57179],{"class":62},[36,141311,131821],{"class":42},[36,141313,141314],{"class":38,"line":131},[36,141315,134391],{"class":2621},[36,141317,141318,141320,141322,141324,141326,141328],{"class":38,"line":225},[36,141319,134396],{"class":79},[36,141321,82152],{"class":42},[36,141323,131251],{"class":62},[36,141325,2158],{"class":42},[36,141327,88575],{"class":62},[36,141329,131821],{"class":42},[36,141331,141332],{"class":38,"line":235},[36,141333,134411],{"class":2621},[36,141335,141336,141338,141340,141342,141344,141346],{"class":38,"line":377},[36,141337,134416],{"class":79},[36,141339,82152],{"class":42},[36,141341,131251],{"class":62},[36,141343,2158],{"class":42},[36,141345,134425],{"class":62},[36,141347,131821],{"class":42},[1752,141349,141351,141352,141354],{"id":141350},"_1544-nav导航模块制作","15.4.4 ",[33,141353,56061],{},"导航模块制作",[3879,141356],{"style":128747,"src":141357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141359,141360,141362],{},[33,141361,56061],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141364,141365,141366],{},"1 号盒子左侧浮动，",[33,141367,141368],{},"dropdown",[3557,141370,141371,141381,141389,141395,141403,141413,141421,141432],{},[653,141372,141373,141374,302,141377,141380],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,141375,141376],{},".dt",[33,141378,141379],{},".dd"," 两个盒子",[653,141382,141383,141385,141386,141388],{},[33,141384,141376],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,141387,141379],{}," 挤到下面去了",[653,141390,141391,141392,141394],{},"给 ",[33,141393,141379],{}," 盒子设置宽度 和 高度，以及背景颜色",[653,141396,141391,141397,141399,141400,122576],{},[33,141398,141379],{}," 盒子里面定义 无序列表 （",[33,141401,141402],{},"ul > li > a",[653,141404,141405,141406,141408,141409,141412],{},"每个 ",[33,141407,653],{}," 都有一个高度（",[33,141410,141411],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[653,141414,141391,141415,141417,141418,122576],{},[33,141416,653],{}," 里面的a设置文字大小（",[33,141419,141420],{},"14px",[653,141422,141391,141423,141425,141426,141428,141429,141431],{},[33,141424,653],{}," 设置 ",[33,141427,130052],{},"，当鼠标移入的时候，让",[33,141430,653],{},"的背景变成白色，让里面的文字变成红色",[653,141433,141434,141436,141437,141439,141440,141442],{},[33,141435,653],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,141438,653],{},"的右侧，那么给",[33,141441,653],{},"设置相对定位",[19,141444,141445],{},"一定要注意相关性",[19,141447,140730],{},[26,141449,141450],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,141451,141452,141460,141470,141480],{"__ignoreMap":31},[36,141453,141454,141456,141458],{"class":38,"line":39},[36,141455,53959],{"class":53649},[36,141457,139892],{"class":79},[36,141459,2150],{"class":42},[36,141461,141462,141464,141466,141468],{"class":38,"line":54},[36,141463,139899],{"class":62},[36,141465,2158],{"class":42},[36,141467,10033],{"class":50},[36,141469,3711],{"class":42},[36,141471,141472,141474,141476,141478],{"class":38,"line":66},[36,141473,130507],{"class":62},[36,141475,2158],{"class":42},[36,141477,63217],{"class":62},[36,141479,3711],{"class":42},[36,141481,141482],{"class":38,"line":73},[36,141483,3982],{"class":42},[19,141485,140770],{},[26,141487,141488],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,141489,141490,141498,141508,141518],{"__ignoreMap":31},[36,141491,141492,141494,141496],{"class":38,"line":39},[36,141493,53959],{"class":53649},[36,141495,139892],{"class":79},[36,141497,2150],{"class":42},[36,141499,141500,141502,141504,141506],{"class":38,"line":54},[36,141501,139899],{"class":62},[36,141503,2158],{"class":42},[36,141505,10033],{"class":50},[36,141507,3711],{"class":42},[36,141509,141510,141512,141514,141516],{"class":38,"line":66},[36,141511,130507],{"class":62},[36,141513,2158],{"class":42},[36,141515,63217],{"class":62},[36,141517,3711],{"class":42},[36,141519,141520],{"class":38,"line":73},[36,141521,3982],{"class":42},[19,141523,141524],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141526,141527,141528,141531],{},"2 号盒子左侧浮动，",[33,141529,141530],{},"navitems"," 导航栏组",[3557,141533,141534,141539,141548],{},[653,141535,141536,141537],{},"里面结构是 ",[33,141538,141402],{},[653,141540,141541,141542,141544,141545,141547],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,141543,2796],{},"左右的",[33,141546,33238],{},"把两侧撑开",[653,141549,141550],{},"让文字垂直居中（行高等于高度）",[3879,141552],{"style":128747,"src":141553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141555,141556],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141558,140730],{},[26,141560,141562],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,141563,141564,141570,141580],{"__ignoreMap":31},[36,141565,141566,141568],{"class":38,"line":39},[36,141567,132739],{"class":79},[36,141569,2150],{"class":42},[36,141571,141572,141574,141576,141578],{"class":38,"line":54},[36,141573,133371],{"class":62},[36,141575,2158],{"class":42},[36,141577,26106],{"class":62},[36,141579,3711],{"class":42},[36,141581,141582],{"class":38,"line":66},[36,141583,3982],{"class":42},[19,141585,140770],{},[26,141587,141588],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,141589,141590,141596,141606],{"__ignoreMap":31},[36,141591,141592,141594],{"class":38,"line":39},[36,141593,132739],{"class":79},[36,141595,2150],{"class":42},[36,141597,141598,141600,141602,141604],{"class":38,"line":54},[36,141599,133371],{"class":62},[36,141601,2158],{"class":42},[36,141603,26106],{"class":62},[36,141605,3711],{"class":42},[36,141607,141608],{"class":38,"line":66},[36,141609,3982],{"class":42},[19,141611,141612],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3879,141614],{"style":128747,"src":141615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,141617,141618],{"className":128891,"code":133048,"language":128893,"meta":31,"style":31},[33,141619,141620,141626,141642],{"__ignoreMap":31},[36,141621,141622,141624],{"class":38,"line":39},[36,141623,53959],{"class":53649},[36,141625,2150],{"class":42},[36,141627,141628,141630,141632,141634,141636,141638,141640],{"class":38,"line":54},[36,141629,73241],{"class":62},[36,141631,2158],{"class":42},[36,141633,1906],{"class":62},[36,141635,53840],{"class":46},[36,141637,53869],{"class":62},[36,141639,132283],{"class":62},[36,141641,3711],{"class":42},[36,141643,141644],{"class":38,"line":66},[36,141645,3982],{"class":42},[1752,141647,141649],{"id":141648},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3879,141651],{"style":128747,"src":141652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3557,141654,141655,141660,141665],{},[653,141656,141657,141659],{},[33,141658,134094],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[653,141661,141662,141664],{},[33,141663,134094],{}," 里面有一个大的版心",[653,141666,141667,141668,141671,141672],{},"版心里面包含 1 号盒子，",[33,141669,141670],{},"mod_service"," 是服务模块，mod 是模块的意思",[3557,141673,141674,141679,141692,141708,141713],{},[653,141675,141391,141676,141678],{},[33,141677,141670],{}," 设置高度（80px）和下边框",[653,141680,141681,141682,141685,141686,141688,141689,141691],{},"在里面定义 ",[33,141683,141684],{},"ul > li"," ,每个",[33,141687,653],{}," 宽度是300px 高度是 50px，给每个",[33,141690,653],{},"设置35px的左内边距",[653,141693,141694,141695,141697,141698,141700,141701,141703,141704,20781,141706,122576],{},"在每个",[33,141696,653],{},"里面，放一个 ",[33,141699,25280],{},"（里面放图标），一个",[33,141702,53959],{},"（里面放",[33,141705,53959],{},[33,141707,19],{},[653,141709,141391,141710,141712],{},[33,141711,25280],{},"设置浮动，让h5与这个div左右排列",[653,141714,141715],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141717,140730],{},[26,141719,141721],{"className":128891,"code":141720,"language":128893,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,141722,141723,141729,141741,141753,141780],{"__ignoreMap":31},[36,141724,141725,141727],{"class":38,"line":39},[36,141726,136648],{"class":79},[36,141728,2150],{"class":42},[36,141730,141731,141733,141735,141737,141739],{"class":38,"line":54},[36,141732,72913],{"class":62},[36,141734,2158],{"class":42},[36,141736,3254],{"class":62},[36,141738,53840],{"class":46},[36,141740,3711],{"class":42},[36,141742,141743,141745,141747,141749,141751],{"class":38,"line":66},[36,141744,73133],{"class":62},[36,141746,2158],{"class":42},[36,141748,3254],{"class":62},[36,141750,53840],{"class":46},[36,141752,3711],{"class":42},[36,141754,141755,141757,141759,141761,141763,141765,141767,141769,141772,141774,141776,141778],{"class":38,"line":73},[36,141756,72956],{"class":62},[36,141758,2158],{"class":42},[36,141760,64074],{"class":62},[36,141762,92],{"class":42},[36,141764,136687],{"class":7598},[36,141766,16091],{"class":42},[36,141768,64084],{"class":62},[36,141770,141771],{"class":62}," -10",[36,141773,53840],{"class":46},[36,141775,136706],{"class":62},[36,141777,53840],{"class":46},[36,141779,3711],{"class":42},[36,141781,141782],{"class":38,"line":86},[36,141783,3982],{"class":42},[19,141785,140770],{},[26,141787,141788],{"className":128891,"code":141720,"language":128893,"meta":31,"style":31},[33,141789,141790,141796,141808,141820,141846],{"__ignoreMap":31},[36,141791,141792,141794],{"class":38,"line":39},[36,141793,136648],{"class":79},[36,141795,2150],{"class":42},[36,141797,141798,141800,141802,141804,141806],{"class":38,"line":54},[36,141799,72913],{"class":62},[36,141801,2158],{"class":42},[36,141803,3254],{"class":62},[36,141805,53840],{"class":46},[36,141807,3711],{"class":42},[36,141809,141810,141812,141814,141816,141818],{"class":38,"line":66},[36,141811,73133],{"class":62},[36,141813,2158],{"class":42},[36,141815,3254],{"class":62},[36,141817,53840],{"class":46},[36,141819,3711],{"class":42},[36,141821,141822,141824,141826,141828,141830,141832,141834,141836,141838,141840,141842,141844],{"class":38,"line":73},[36,141823,72956],{"class":62},[36,141825,2158],{"class":42},[36,141827,64074],{"class":62},[36,141829,92],{"class":42},[36,141831,136687],{"class":7598},[36,141833,16091],{"class":42},[36,141835,64084],{"class":62},[36,141837,141771],{"class":62},[36,141839,53840],{"class":46},[36,141841,136706],{"class":62},[36,141843,53840],{"class":46},[36,141845,3711],{"class":42},[36,141847,141848],{"class":38,"line":86},[36,141849,3982],{"class":42},[19,141851,141852],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3557,141854,141855,141858,141864,141870,141882],{},[653,141856,141857],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[653,141859,141860,141861,122576],{},"里面的布局利用 自定义列表来实现（",[33,141862,141863],{},"dl > dt + dd",[653,141865,141391,141866,141869],{},[33,141867,141868],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[653,141871,141391,141872,141875,141876,20781,141878,141881],{},[33,141873,141874],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,141877,141874],{},[33,141879,141880],{},"dd","之间有些距离",[653,141883,141884],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141886,140730],{},[26,141888,141889],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,141890,141891,141897,141909],{"__ignoreMap":31},[36,141892,141893,141895],{"class":38,"line":39},[36,141894,53959],{"class":53649},[36,141896,2150],{"class":42},[36,141898,141899,141901,141903,141905,141907],{"class":38,"line":54},[36,141900,72815],{"class":62},[36,141902,2158],{"class":42},[36,141904,2751],{"class":62},[36,141906,53904],{"class":62},[36,141908,3711],{"class":42},[36,141910,141911],{"class":38,"line":66},[36,141912,3982],{"class":42},[19,141914,140770],{},[26,141916,141917],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,141918,141919,141925,141937],{"__ignoreMap":31},[36,141920,141921,141923],{"class":38,"line":39},[36,141922,53959],{"class":53649},[36,141924,2150],{"class":42},[36,141926,141927,141929,141931,141933,141935],{"class":38,"line":54},[36,141928,72815],{"class":62},[36,141930,2158],{"class":42},[36,141932,2751],{"class":62},[36,141934,53904],{"class":62},[36,141936,3711],{"class":42},[36,141938,141939],{"class":38,"line":66},[36,141940,3982],{"class":42},[19,141942,141943],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3557,141945,141946,141955,141958,141969],{},[653,141947,141948,141949,141951,141952,141954],{},"分为上下两块，上面是 ",[33,141950,134111],{}," 友情链接，下面是 ",[33,141953,134104],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[653,141956,141957],{},"把内容分别复制到相应模块中",[653,141959,141391,141960,141962,141963,141965,141966,141968],{},[33,141961,134111],{}," 设置 15px 的下外边距，给",[33,141964,134111],{}," 里面 的 ",[33,141967,2796],{}," 标签设置 左右 3px 的外边距",[653,141970,141971,141972,141974],{},"给",[33,141973,134104],{}," 设置 20px 的行高",[19,141976,140730],{},[26,141978,141979],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,141980,141981,141987,141999],{"__ignoreMap":31},[36,141982,141983,141985],{"class":38,"line":39},[36,141984,53959],{"class":53649},[36,141986,2150],{"class":42},[36,141988,141989,141991,141993,141995,141997],{"class":38,"line":54},[36,141990,72815],{"class":62},[36,141992,2158],{"class":42},[36,141994,2751],{"class":62},[36,141996,53904],{"class":62},[36,141998,3711],{"class":42},[36,142000,142001],{"class":38,"line":66},[36,142002,3982],{"class":42},[19,142004,140770],{},[26,142006,142007],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,142008,142009,142015,142027],{"__ignoreMap":31},[36,142010,142011,142013],{"class":38,"line":39},[36,142012,53959],{"class":53649},[36,142014,2150],{"class":42},[36,142016,142017,142019,142021,142023,142025],{"class":38,"line":54},[36,142018,72815],{"class":62},[36,142020,2158],{"class":42},[36,142022,2751],{"class":62},[36,142024,53904],{"class":62},[36,142026,3711],{"class":42},[36,142028,142029],{"class":38,"line":66},[36,142030,3982],{"class":42},[19,142032,142033],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2467,142035,142036],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":142038},[142039,142040,142041,142048],{"id":140319,"depth":54,"text":140320},{"id":140338,"depth":54,"text":140339},{"id":140365,"depth":54,"text":140366,"children":142042},[142043,142044,142045,142046,142047],{"id":140369,"depth":66,"text":140370},{"id":140382,"depth":66,"text":140383},{"id":140406,"depth":66,"text":140407},{"id":140428,"depth":66,"text":140429},{"id":140500,"depth":66,"text":140501},{"id":140626,"depth":54,"text":140627,"children":142049},[142050,142051,142052,142053,142055],{"id":140630,"depth":66,"text":140631},{"id":140637,"depth":66,"text":140638},{"id":140809,"depth":66,"text":140810},{"id":141350,"depth":66,"text":142054},"15.4.4 nav导航模块制作",{"id":141648,"depth":66,"text":141649},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140311,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142062,"title":142063,"body":142064,"description":2493,"extension":2494,"meta":144466,"navigation":69,"path":144467,"seo":144468,"stem":144469,"__hash__":144470},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142065,"toc":144443},[142066,142069,142073,142077,142089,142092,142095,142098,142109,142111,142135,142137,142161,142166,142169,142171,142207,142209,142245,142248,142253,142256,142259,142262,142292,142299,142302,142312,142314,142348,142351,142385,142391,142408,142410,142446,142448,142484,142489,142514,142516,142542,142544,142568,142575,142578,142642,142644,142686,142688,142728,142735,142740,142742,142772,142774,142804,142808,142811,142818,142830,142832,142858,142860,142884,142887,142889,142913,142919,142929,142931,142961,142963,142993,143000,143041,143043,143079,143081,143117,143121,143124,143127,143130,143136,143141,143144,143167,143170,143194,143197,143221,143226,143229,143232,143235,143238,143241,143315,143317,143347,143349,143379,143382,143385,143417,143421,143425,143439,143448,143451,143456,143458,143552,143554,143648,143671,143673,143697,143699,143723,143730,143733,143743,143745,143769,143774,143782,143784,143814,143819,143859,143861,143887,143889,143915,143919,143922,143927,143930,143934,143942,143949,143957,143959,143989,143991,144021,144029,144032,144035,144037,144067,144069,144099,144102,144107,144109,144133,144135,144159,144162,144247,144249,144273,144275,144299,144303,144305,144329,144331,144365,144369,144383,144386,144391,144394,144399,144402,144432,144440],[10,142067,142063],{"id":142068},"_16-品优购项目下篇-主体与页面开发",[14,142070,142072],{"id":142071},"_161-项目主体模块制作","16.1 项目主体模块制作",[1752,142074,142076],{"id":142075},"_1611-首页制作","16.1.1 首页制作",[19,142078,142079,142081,142082,142084,142085,142088],{},[667,142080,104398],{}," 主体模块是 ",[667,142083,76403],{}," 里面专有的，注意需要新的样式文件 ",[667,142086,142087],{},"index.css，"," 就不要写在common.css中了",[3879,142090],{"style":128747,"src":142091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3879,142093],{"style":128747,"src":142094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142096,142097],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3557,142099,142100,142103,142106],{},[653,142101,142102],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[653,142104,142105],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[653,142107,142108],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142110,140730],{},[26,142112,142113],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,142114,142115,142121,142131],{"__ignoreMap":31},[36,142116,142117,142119],{"class":38,"line":39},[36,142118,132739],{"class":79},[36,142120,2150],{"class":42},[36,142122,142123,142125,142127,142129],{"class":38,"line":54},[36,142124,133371],{"class":62},[36,142126,2158],{"class":42},[36,142128,26106],{"class":62},[36,142130,3711],{"class":42},[36,142132,142133],{"class":38,"line":66},[36,142134,3982],{"class":42},[19,142136,140770],{},[26,142138,142139],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,142140,142141,142147,142157],{"__ignoreMap":31},[36,142142,142143,142145],{"class":38,"line":39},[36,142144,132739],{"class":79},[36,142146,2150],{"class":42},[36,142148,142149,142151,142153,142155],{"class":38,"line":54},[36,142150,133371],{"class":62},[36,142152,2158],{"class":42},[36,142154,26106],{"class":62},[36,142156,3711],{"class":42},[36,142158,142159],{"class":38,"line":66},[36,142160,3982],{"class":42},[650,142162,142163],{},[653,142164,142165],{},"左侧focus模块制作",[3879,142167],{"style":128747,"src":142168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142170,140730],{},[26,142172,142173],{"className":128891,"code":130214,"language":128893,"meta":31,"style":31},[33,142174,142175,142183,142193,142203],{"__ignoreMap":31},[36,142176,142177,142179,142181],{"class":38,"line":39},[36,142178,56169],{"class":53649},[36,142180,64248],{"class":79},[36,142182,2150],{"class":42},[36,142184,142185,142187,142189,142191],{"class":38,"line":54},[36,142186,130229],{"class":62},[36,142188,2158],{"class":42},[36,142190,57237],{"class":62},[36,142192,3711],{"class":42},[36,142194,142195,142197,142199,142201],{"class":38,"line":66},[36,142196,73143],{"class":62},[36,142198,2158],{"class":42},[36,142200,57085],{"class":62},[36,142202,3711],{"class":42},[36,142204,142205],{"class":38,"line":73},[36,142206,3982],{"class":42},[19,142208,140770],{},[26,142210,142211],{"className":128891,"code":130214,"language":128893,"meta":31,"style":31},[33,142212,142213,142221,142231,142241],{"__ignoreMap":31},[36,142214,142215,142217,142219],{"class":38,"line":39},[36,142216,56169],{"class":53649},[36,142218,64248],{"class":79},[36,142220,2150],{"class":42},[36,142222,142223,142225,142227,142229],{"class":38,"line":54},[36,142224,130229],{"class":62},[36,142226,2158],{"class":42},[36,142228,57237],{"class":62},[36,142230,3711],{"class":42},[36,142232,142233,142235,142237,142239],{"class":38,"line":66},[36,142234,73143],{"class":62},[36,142236,2158],{"class":42},[36,142238,57085],{"class":62},[36,142240,3711],{"class":42},[36,142242,142243],{"class":38,"line":73},[36,142244,3982],{"class":42},[19,142246,142247],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[650,142249,142250],{"start":54},[653,142251,142252],{},"右侧newsflash模块制作",[3879,142254],{"style":128747,"src":142255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142257,142258],{},"右侧的模块 分为上中下三个盒子",[19,142260,142261],{},"结构代码：",[26,142263,142264],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,142265,142266],{"__ignoreMap":31},[36,142267,142268,142270,142272,142274,142276,142278,142280,142282,142284,142286,142288,142290],{"class":38,"line":39},[36,142269,3463],{"class":42},[36,142271,3879],{"class":53649},[36,142273,57587],{"class":79},[36,142275,47],{"class":42},[36,142277,136408],{"class":50},[36,142279,57595],{"class":79},[36,142281,47],{"class":42},[36,142283,136415],{"class":50},[36,142285,136418],{"class":79},[36,142287,47],{"class":42},[36,142289,136423],{"class":50},[36,142291,53656],{"class":42},[19,142293,142294,142295,142298],{},"1 号盒子为 ",[33,142296,142297],{},"news"," 新闻模块 高度为 165px",[3879,142300],{"style":128747,"src":142301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142303,142304,142305,142308,142309],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,142306,142307],{},"news-hd","，下面是 ",[33,142310,142311],{},"news-bd",[19,142313,142261],{},[26,142315,142316],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,142317,142318,142322,142336,142340],{"__ignoreMap":31},[36,142319,142320],{"class":38,"line":39},[36,142321,133002],{"class":2621},[36,142323,142324,142326,142328,142330,142332,142334],{"class":38,"line":54},[36,142325,3463],{"class":42},[36,142327,53959],{"class":53649},[36,142329,55834],{"class":79},[36,142331,47],{"class":42},[36,142333,133015],{"class":50},[36,142335,53656],{"class":42},[36,142337,142338],{"class":38,"line":66},[36,142339,133022],{"class":42},[36,142341,142342,142344,142346],{"class":38,"line":73},[36,142343,54133],{"class":42},[36,142345,53959],{"class":53649},[36,142347,53656],{"class":42},[19,142349,142350],{},"样式代码：",[26,142352,142353],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,142354,142355,142359,142373,142377],{"__ignoreMap":31},[36,142356,142357],{"class":38,"line":39},[36,142358,133002],{"class":2621},[36,142360,142361,142363,142365,142367,142369,142371],{"class":38,"line":54},[36,142362,3463],{"class":42},[36,142364,53959],{"class":53649},[36,142366,55834],{"class":79},[36,142368,47],{"class":42},[36,142370,133015],{"class":50},[36,142372,53656],{"class":42},[36,142374,142375],{"class":38,"line":66},[36,142376,133022],{"class":42},[36,142378,142379,142381,142383],{"class":38,"line":73},[36,142380,54133],{"class":42},[36,142382,53959],{"class":53649},[36,142384,53656],{"class":42},[19,142386,142387,142388,142390],{},"上面是",[33,142389,142307],{},"，设置高度是 33px，设置下边框",[3557,142392,142393,142399],{},[653,142394,142395,142396,142398],{},"里面放一个",[33,142397,25280],{}," 标题",[653,142400,142401,142402,142404,142405,142407],{},"放一个a",[33,142403,105033],{},"，内容是 更多，然后让 ",[33,142406,2796],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142409,142261],{},[26,142411,142412],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,142413,142414,142422,142432,142442],{"__ignoreMap":31},[36,142415,142416,142418,142420],{"class":38,"line":39},[36,142417,53959],{"class":53649},[36,142419,139892],{"class":79},[36,142421,2150],{"class":42},[36,142423,142424,142426,142428,142430],{"class":38,"line":54},[36,142425,139899],{"class":62},[36,142427,2158],{"class":42},[36,142429,10033],{"class":50},[36,142431,3711],{"class":42},[36,142433,142434,142436,142438,142440],{"class":38,"line":66},[36,142435,130507],{"class":62},[36,142437,2158],{"class":42},[36,142439,63217],{"class":62},[36,142441,3711],{"class":42},[36,142443,142444],{"class":38,"line":73},[36,142445,3982],{"class":42},[19,142447,142350],{},[26,142449,142450],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,142451,142452,142460,142470,142480],{"__ignoreMap":31},[36,142453,142454,142456,142458],{"class":38,"line":39},[36,142455,53959],{"class":53649},[36,142457,139892],{"class":79},[36,142459,2150],{"class":42},[36,142461,142462,142464,142466,142468],{"class":38,"line":54},[36,142463,139899],{"class":62},[36,142465,2158],{"class":42},[36,142467,10033],{"class":50},[36,142469,3711],{"class":42},[36,142471,142472,142474,142476,142478],{"class":38,"line":66},[36,142473,130507],{"class":62},[36,142475,2158],{"class":42},[36,142477,63217],{"class":62},[36,142479,3711],{"class":42},[36,142481,142482],{"class":38,"line":73},[36,142483,3982],{"class":42},[19,142485,142486,142487],{},"下面是",[33,142488,142311],{},[3557,142490,142491,142499],{},[653,142492,142493,142494,302,142496,142498],{},"里面包含 ",[33,142495,3557],{},[33,142497,653],{}," 还有链接",[653,142500,141971,142501,142503,142504,142506,142507,142510,142511],{},[33,142502,653],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,142505,133557],{}," 2.设置 ",[33,142508,142509],{},"white-space: nowrap;"," 3. 设置 ",[33,142512,142513],{},"text-overflow: ellipsis;",[19,142515,142261],{},[26,142517,142519],{"className":128891,"code":142518,"language":128893,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,142520,142521,142527,142538],{"__ignoreMap":31},[36,142522,142523,142525],{"class":38,"line":39},[36,142524,53959],{"class":53649},[36,142526,2150],{"class":42},[36,142528,142529,142532,142534,142536],{"class":38,"line":54},[36,142530,142531],{"class":62},"  overflow",[36,142533,2158],{"class":42},[36,142535,64062],{"class":62},[36,142537,3711],{"class":42},[36,142539,142540],{"class":38,"line":66},[36,142541,3982],{"class":42},[19,142543,142350],{},[26,142545,142546],{"className":128891,"code":142518,"language":128893,"meta":31,"style":31},[33,142547,142548,142554,142564],{"__ignoreMap":31},[36,142549,142550,142552],{"class":38,"line":39},[36,142551,53959],{"class":53649},[36,142553,2150],{"class":42},[36,142555,142556,142558,142560,142562],{"class":38,"line":54},[36,142557,142531],{"class":62},[36,142559,2158],{"class":42},[36,142561,64062],{"class":62},[36,142563,3711],{"class":42},[36,142565,142566],{"class":38,"line":66},[36,142567,3982],{"class":42},[19,142569,142570,142571,142574],{},"2 号盒子为 ",[33,142572,142573],{},"lifeservice"," 生活服务模块 高度为 209px",[3879,142576],{"style":128747,"src":142577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3557,142579,142580,142583,142593,142617,142628],{},[653,142581,142582],{},"设置边框（左右下边框）",[653,142584,142585,142586,142589,142590,142592],{},"里面的内容 是 ",[33,142587,142588],{},"ul > 12*li","，给",[33,142591,653],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[653,142594,142595,142596],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3557,142597,142598,142603,142612],{},[653,142599,142600,142602],{},[33,142601,142573],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[653,142604,142605,142606,142608,142609,142611],{},"可以让 ",[33,142607,142573],{}," 里面的 ",[33,142610,3557],{}," 宽度为 252，就可以装的下 4 个 小 li",[653,142613,142614,142616],{},[33,142615,142573],{}," 盒子 overflow 隐藏多余的部分就可以了",[653,142618,118806,142619,142621,142622,142624,142625,142627],{},[33,142620,653],{}," 里面放一个 ",[33,142623,2997],{},"（里面放图标），下面的文本用 ",[33,142626,19],{}," 标签包裹",[653,142629,141391,142630,142632,142633,142635,142636,141425,142638,142641],{},[33,142631,2997],{}," 设置 24px宽和28px的高（注意 ",[33,142634,2997],{}," 是行内元素， 转成行内块），给 ",[33,142637,653],{},[33,142639,142640],{},"text-align:center"," 让里面内容居中显示",[19,142643,142261],{},[26,142645,142647],{"className":128891,"code":142646,"language":128893,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,142648,142649,142667,142672,142682],{"__ignoreMap":31},[36,142650,142651,142653,142655,142657,142659,142661,142663,142665],{"class":38,"line":39},[36,142652,36],{"class":53649},[36,142654,630],{"class":42},[36,142656,2796],{"class":53649},[36,142658,630],{"class":42},[36,142660,25923],{"class":53649},[36,142662,630],{"class":42},[36,142664,667],{"class":53649},[36,142666,2150],{"class":42},[36,142668,142669],{"class":38,"line":54},[36,142670,142671],{"class":2621},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,142673,142674,142676,142678,142680],{"class":38,"line":66},[36,142675,130507],{"class":62},[36,142677,2158],{"class":42},[36,142679,130569],{"class":62},[36,142681,3711],{"class":42},[36,142683,142684],{"class":38,"line":73},[36,142685,3982],{"class":42},[19,142687,142350],{},[26,142689,142690],{"className":128891,"code":142646,"language":128893,"meta":31,"style":31},[33,142691,142692,142710,142714,142724],{"__ignoreMap":31},[36,142693,142694,142696,142698,142700,142702,142704,142706,142708],{"class":38,"line":39},[36,142695,36],{"class":53649},[36,142697,630],{"class":42},[36,142699,2796],{"class":53649},[36,142701,630],{"class":42},[36,142703,25923],{"class":53649},[36,142705,630],{"class":42},[36,142707,667],{"class":53649},[36,142709,2150],{"class":42},[36,142711,142712],{"class":38,"line":54},[36,142713,142671],{"class":2621},[36,142715,142716,142718,142720,142722],{"class":38,"line":66},[36,142717,130507],{"class":62},[36,142719,2158],{"class":42},[36,142721,130569],{"class":62},[36,142723,3711],{"class":42},[36,142725,142726],{"class":38,"line":73},[36,142727,3982],{"class":42},[19,142729,142730,142731,142734],{},"3 号盒子为 ",[33,142732,142733],{},"bargain"," 特价商品",[3557,142736,142737],{},[653,142738,142739],{},"这个比较简单，直接插入一张图片即可",[19,142741,142261],{},[26,142743,142744],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,142745,142746],{"__ignoreMap":31},[36,142747,142748,142750,142752,142754,142756,142758,142760,142762,142764,142766,142768,142770],{"class":38,"line":39},[36,142749,3463],{"class":42},[36,142751,3879],{"class":53649},[36,142753,57587],{"class":79},[36,142755,47],{"class":42},[36,142757,136408],{"class":50},[36,142759,57595],{"class":79},[36,142761,47],{"class":42},[36,142763,136415],{"class":50},[36,142765,136418],{"class":79},[36,142767,47],{"class":42},[36,142769,136423],{"class":50},[36,142771,53656],{"class":42},[19,142773,142350],{},[26,142775,142776],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,142777,142778],{"__ignoreMap":31},[36,142779,142780,142782,142784,142786,142788,142790,142792,142794,142796,142798,142800,142802],{"class":38,"line":39},[36,142781,3463],{"class":42},[36,142783,3879],{"class":53649},[36,142785,57587],{"class":79},[36,142787,47],{"class":42},[36,142789,136408],{"class":50},[36,142791,57595],{"class":79},[36,142793,47],{"class":42},[36,142795,136415],{"class":50},[36,142797,136418],{"class":79},[36,142799,47],{"class":42},[36,142801,136423],{"class":50},[36,142803,53656],{"class":42},[1752,142805,142807],{"id":142806},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3879,142809],{"style":128747,"src":142810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142812,142813,142814,142817],{},"大盒子 ",[33,142815,142816],{},"recom"," 推荐模块 recommend",[3557,142819,142820],{},[653,142821,142822,142823,142825,142826,142829],{},"给这个 ",[33,142824,142816],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,142827,142828],{},"#ebebeb","），设置距离上边 12px",[19,142831,142261],{},[26,142833,142835],{"className":128891,"code":142834,"language":128893,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,142836,142837,142843,142854],{"__ignoreMap":31},[36,142838,142839,142841],{"class":38,"line":39},[36,142840,53959],{"class":53649},[36,142842,2150],{"class":42},[36,142844,142845,142847,142849,142852],{"class":38,"line":54},[36,142846,73223],{"class":62},[36,142848,2158],{"class":42},[36,142850,142851],{"class":62},"#f0f0f0",[36,142853,3711],{"class":42},[36,142855,142856],{"class":38,"line":66},[36,142857,3982],{"class":42},[19,142859,142350],{},[26,142861,142862],{"className":128891,"code":142834,"language":128893,"meta":31,"style":31},[33,142863,142864,142870,142880],{"__ignoreMap":31},[36,142865,142866,142868],{"class":38,"line":39},[36,142867,53959],{"class":53649},[36,142869,2150],{"class":42},[36,142871,142872,142874,142876,142878],{"class":38,"line":54},[36,142873,73223],{"class":62},[36,142875,2158],{"class":42},[36,142877,142851],{"class":62},[36,142879,3711],{"class":42},[36,142881,142882],{"class":38,"line":66},[36,142883,3982],{"class":42},[19,142885,142886],{},"里面包含 2 个盒子， 浮动即可",[19,142888,142261],{},[26,142890,142891],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,142892,142893,142899,142909],{"__ignoreMap":31},[36,142894,142895,142897],{"class":38,"line":39},[36,142896,132739],{"class":79},[36,142898,2150],{"class":42},[36,142900,142901,142903,142905,142907],{"class":38,"line":54},[36,142902,133371],{"class":62},[36,142904,2158],{"class":42},[36,142906,26106],{"class":62},[36,142908,3711],{"class":42},[36,142910,142911],{"class":38,"line":66},[36,142912,3982],{"class":42},[19,142914,142915,142916],{},"1 号盒子 ",[33,142917,142918],{},"recom_hd",[3557,142920,142921,142924],{},[653,142922,142923],{},"设置宽度205px，高度163px",[653,142925,142395,142926,142928],{},[33,142927,3879],{},"标签，插入图片即可",[19,142930,142261],{},[26,142932,142933],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,142934,142935],{"__ignoreMap":31},[36,142936,142937,142939,142941,142943,142945,142947,142949,142951,142953,142955,142957,142959],{"class":38,"line":39},[36,142938,3463],{"class":42},[36,142940,3879],{"class":53649},[36,142942,57587],{"class":79},[36,142944,47],{"class":42},[36,142946,136408],{"class":50},[36,142948,57595],{"class":79},[36,142950,47],{"class":42},[36,142952,136415],{"class":50},[36,142954,136418],{"class":79},[36,142956,47],{"class":42},[36,142958,136423],{"class":50},[36,142960,53656],{"class":42},[19,142962,142350],{},[26,142964,142965],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,142966,142967],{"__ignoreMap":31},[36,142968,142969,142971,142973,142975,142977,142979,142981,142983,142985,142987,142989,142991],{"class":38,"line":39},[36,142970,3463],{"class":42},[36,142972,3879],{"class":53649},[36,142974,57587],{"class":79},[36,142976,47],{"class":42},[36,142978,136408],{"class":50},[36,142980,57595],{"class":79},[36,142982,47],{"class":42},[36,142984,136415],{"class":50},[36,142986,136418],{"class":79},[36,142988,47],{"class":42},[36,142990,136423],{"class":50},[36,142992,53656],{"class":42},[19,142994,142995,142996,142999],{},"2 号盒子 ",[33,142997,142998],{},"recom_bd"," ，注意里面的小竖线",[3557,143001,143002,143013,143016,143021,143026],{},[653,143003,143004,143005,143007,143008,143010,143011],{},"右侧结构里面放 ",[33,143006,3557],{}," 包含 4个 ",[33,143009,653],{},"，每个li里面包含一个",[33,143012,3879],{},[653,143014,143015],{},"直接利用切片工具把里面的内容当成一张图片",[653,143017,141391,143018,143020],{},[33,143019,653],{}," 设置浮动",[653,143022,141391,143023,143025],{},[33,143024,3879],{}," 设置宽高，宽度 248px，高度 163px",[653,143027,143028,143029,142589,143032,143034,143035,143037,143038],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,143030,143031],{},"top 10px",[33,143033,653],{},"设置相对定位（注意，最后一个",[33,143036,653],{},"不用设置伪元素），可以利用 ",[33,143039,143040],{},"nth-child(-n+3){...}",[19,143042,142261],{},[26,143044,143045],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,143046,143047,143055,143065,143075],{"__ignoreMap":31},[36,143048,143049,143051,143053],{"class":38,"line":39},[36,143050,53959],{"class":53649},[36,143052,139892],{"class":79},[36,143054,2150],{"class":42},[36,143056,143057,143059,143061,143063],{"class":38,"line":54},[36,143058,139899],{"class":62},[36,143060,2158],{"class":42},[36,143062,10033],{"class":50},[36,143064,3711],{"class":42},[36,143066,143067,143069,143071,143073],{"class":38,"line":66},[36,143068,130507],{"class":62},[36,143070,2158],{"class":42},[36,143072,63217],{"class":62},[36,143074,3711],{"class":42},[36,143076,143077],{"class":38,"line":73},[36,143078,3982],{"class":42},[19,143080,142350],{},[26,143082,143083],{"className":128891,"code":140733,"language":128893,"meta":31,"style":31},[33,143084,143085,143093,143103,143113],{"__ignoreMap":31},[36,143086,143087,143089,143091],{"class":38,"line":39},[36,143088,53959],{"class":53649},[36,143090,139892],{"class":79},[36,143092,2150],{"class":42},[36,143094,143095,143097,143099,143101],{"class":38,"line":54},[36,143096,139899],{"class":62},[36,143098,2158],{"class":42},[36,143100,10033],{"class":50},[36,143102,3711],{"class":42},[36,143104,143105,143107,143109,143111],{"class":38,"line":66},[36,143106,130507],{"class":62},[36,143108,2158],{"class":42},[36,143110,63217],{"class":62},[36,143112,3711],{"class":42},[36,143114,143115],{"class":38,"line":73},[36,143116,3982],{"class":42},[1752,143118,143120],{"id":143119},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3879,143122],{"style":128747,"src":143123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143125,143126],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143128,143129],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143131,143132,143135],{},[33,143133,143134],{},"box_hd"," 制作",[19,143137,142915,143138,143140],{},[33,143139,143134],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3879,143142],{"style":128747,"src":143143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3557,143145,143146,143151,143156,143159],{},[653,143147,143148,143150],{},[33,143149,143134],{}," 给 30px 的高度，2个像素的下边框",[653,143152,143153,143154],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,143155,141402],{},[653,143157,143158],{},"左侧盒左浮动，右侧盒子右浮动",[653,143160,143161,143163,143164,143166],{},[33,143162,2796],{},"标签之间的距离用左右的",[33,143165,33238],{},"撑开即可",[19,143168,143169],{},"结构代码",[26,143171,143172],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,143173,143174,143180,143190],{"__ignoreMap":31},[36,143175,143176,143178],{"class":38,"line":39},[36,143177,132739],{"class":79},[36,143179,2150],{"class":42},[36,143181,143182,143184,143186,143188],{"class":38,"line":54},[36,143183,133371],{"class":62},[36,143185,2158],{"class":42},[36,143187,26106],{"class":62},[36,143189,3711],{"class":42},[36,143191,143192],{"class":38,"line":66},[36,143193,3982],{"class":42},[19,143195,143196],{},"样式代码",[26,143198,143199],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,143200,143201,143207,143217],{"__ignoreMap":31},[36,143202,143203,143205],{"class":38,"line":39},[36,143204,132739],{"class":79},[36,143206,2150],{"class":42},[36,143208,143209,143211,143213,143215],{"class":38,"line":54},[36,143210,133371],{"class":62},[36,143212,2158],{"class":42},[36,143214,26106],{"class":62},[36,143216,3711],{"class":42},[36,143218,143219],{"class":38,"line":66},[36,143220,3982],{"class":42},[19,143222,143223,143135],{},[33,143224,143225],{},"box_bd",[19,143227,143228],{},"2 号盒子 box_bd，不要给高度",[3879,143230],{"style":128747,"src":143231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143233,143234],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143236,143237],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143239,143240],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3557,143242,143243,143255,143271],{},[653,143244,143245,143247,143248,143251,143252,143254],{},[33,143246,143225],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,143249,143250],{},"tab_content","，在",[33,143253,143250],{}," 里面包裹tab选项卡对应的内容",[653,143256,143257,143258,143261,143262,143264,143265,143267,143268,143270],{},"内容被一个大盒子包裹（",[33,143259,143260],{},"tab_list_item","），里面是 ",[33,143263,3557],{}," 包裹 5个 ",[33,143266,653],{},"，每个",[33,143269,653],{},"设置对应的宽度，然后设置浮动",[653,143272,143273,143274,143276,143277,143279,143280],{},"而这5个",[33,143275,653],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,143278,653],{},"设置",[3557,143281,143282,143300,143303],{},[653,143283,143284,143285,143287,143288,143290,143291,143293,143294,143296,143297,143299],{},"第一个小 ",[33,143286,653],{}," 分为上下结构，上面是 ",[33,143289,3557],{}," 包裹 ",[33,143292,653],{}," ，",[33,143295,653],{},"里面包裹 ",[33,143298,2796],{},"，下面插入一张图片",[653,143301,143302],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[653,143304,143305,143306,143308,143309,143311,143312,143314],{},"后面的小 ",[33,143307,653],{}," 里面先放一个",[33,143310,2796],{},"标签，然后在",[33,143313,2796],{},"标签里面插入图片即可",[19,143316,143169],{},[26,143318,143319],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,143320,143321],{"__ignoreMap":31},[36,143322,143323,143325,143327,143329,143331,143333,143335,143337,143339,143341,143343,143345],{"class":38,"line":39},[36,143324,3463],{"class":42},[36,143326,3879],{"class":53649},[36,143328,57587],{"class":79},[36,143330,47],{"class":42},[36,143332,136408],{"class":50},[36,143334,57595],{"class":79},[36,143336,47],{"class":42},[36,143338,136415],{"class":50},[36,143340,136418],{"class":79},[36,143342,47],{"class":42},[36,143344,136423],{"class":50},[36,143346,53656],{"class":42},[19,143348,143196],{},[26,143350,143351],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,143352,143353],{"__ignoreMap":31},[36,143354,143355,143357,143359,143361,143363,143365,143367,143369,143371,143373,143375,143377],{"class":38,"line":39},[36,143356,3463],{"class":42},[36,143358,3879],{"class":53649},[36,143360,57587],{"class":79},[36,143362,47],{"class":42},[36,143364,136408],{"class":50},[36,143366,57595],{"class":79},[36,143368,47],{"class":42},[36,143370,136415],{"class":50},[36,143372,136418],{"class":79},[36,143374,47],{"class":42},[36,143376,136423],{"class":50},[36,143378,53656],{"class":42},[19,143380,143381],{},"tab栏切换需求！！！！！！介绍：",[3879,143383],{"style":128747,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3557,143386,143387,143395,143401,143404],{},[653,143388,143389,143392,143393],{},[33,143390,143391],{},"tab","栏的布局是 ",[33,143394,141402],{},[653,143396,143397,143398,143400],{},"有多少个",[33,143399,143391],{},"选项卡，那么对应就有多少个内容",[653,143402,143403],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[653,143405,143406,143407,143410,143411,143413,143414,143416],{},"等后面我们学习了",[33,143408,143409],{},"js","之后，我们就会配合",[33,143412,143409],{},"来实现，",[33,143415,143391],{},"栏的切换",[14,143418,143420],{"id":143419},"_162-列表制作","16.2 列表制作",[1752,143422,143424],{"id":143423},"_1621-准备工作","16.2.1 准备工作",[3557,143426,143427,143430,143433,143436],{},[653,143428,143429],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[653,143431,143432],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[653,143434,143435],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[653,143437,143438],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1752,143440,143442,143443,302,143445,143447],{"id":143441},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,143444,133896],{},[33,143446,56061],{}," 修改",[3879,143449],{"style":128747,"src":143450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3557,143452,143453],{},[653,143454,143455],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143457,142261],{},[26,143459,143460],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,143461,143462,143466,143480,143484,143498,143502,143516,143520,143534,143538],{"__ignoreMap":31},[36,143463,143464],{"class":38,"line":39},[36,143465,134330],{"class":2621},[36,143467,143468,143470,143472,143474,143476,143478],{"class":38,"line":54},[36,143469,134335],{"class":79},[36,143471,82152],{"class":42},[36,143473,131251],{"class":62},[36,143475,2158],{"class":42},[36,143477,134344],{"class":62},[36,143479,131821],{"class":42},[36,143481,143482],{"class":38,"line":66},[36,143483,134351],{"class":2621},[36,143485,143486,143488,143490,143492,143494,143496],{"class":38,"line":73},[36,143487,134356],{"class":79},[36,143489,82152],{"class":42},[36,143491,131251],{"class":62},[36,143493,2158],{"class":42},[36,143495,57112],{"class":62},[36,143497,131821],{"class":42},[36,143499,143500],{"class":38,"line":86},[36,143501,134371],{"class":2621},[36,143503,143504,143506,143508,143510,143512,143514],{"class":38,"line":126},[36,143505,134376],{"class":79},[36,143507,82152],{"class":42},[36,143509,131251],{"class":62},[36,143511,2158],{"class":42},[36,143513,57179],{"class":62},[36,143515,131821],{"class":42},[36,143517,143518],{"class":38,"line":131},[36,143519,134391],{"class":2621},[36,143521,143522,143524,143526,143528,143530,143532],{"class":38,"line":225},[36,143523,134396],{"class":79},[36,143525,82152],{"class":42},[36,143527,131251],{"class":62},[36,143529,2158],{"class":42},[36,143531,88575],{"class":62},[36,143533,131821],{"class":42},[36,143535,143536],{"class":38,"line":235},[36,143537,134411],{"class":2621},[36,143539,143540,143542,143544,143546,143548,143550],{"class":38,"line":377},[36,143541,134416],{"class":79},[36,143543,82152],{"class":42},[36,143545,131251],{"class":62},[36,143547,2158],{"class":42},[36,143549,134425],{"class":62},[36,143551,131821],{"class":42},[19,143553,142350],{},[26,143555,143556],{"className":128891,"code":134323,"language":128893,"meta":31,"style":31},[33,143557,143558,143562,143576,143580,143594,143598,143612,143616,143630,143634],{"__ignoreMap":31},[36,143559,143560],{"class":38,"line":39},[36,143561,134330],{"class":2621},[36,143563,143564,143566,143568,143570,143572,143574],{"class":38,"line":54},[36,143565,134335],{"class":79},[36,143567,82152],{"class":42},[36,143569,131251],{"class":62},[36,143571,2158],{"class":42},[36,143573,134344],{"class":62},[36,143575,131821],{"class":42},[36,143577,143578],{"class":38,"line":66},[36,143579,134351],{"class":2621},[36,143581,143582,143584,143586,143588,143590,143592],{"class":38,"line":73},[36,143583,134356],{"class":79},[36,143585,82152],{"class":42},[36,143587,131251],{"class":62},[36,143589,2158],{"class":42},[36,143591,57112],{"class":62},[36,143593,131821],{"class":42},[36,143595,143596],{"class":38,"line":86},[36,143597,134371],{"class":2621},[36,143599,143600,143602,143604,143606,143608,143610],{"class":38,"line":126},[36,143601,134376],{"class":79},[36,143603,82152],{"class":42},[36,143605,131251],{"class":62},[36,143607,2158],{"class":42},[36,143609,57179],{"class":62},[36,143611,131821],{"class":42},[36,143613,143614],{"class":38,"line":131},[36,143615,134391],{"class":2621},[36,143617,143618,143620,143622,143624,143626,143628],{"class":38,"line":225},[36,143619,134396],{"class":79},[36,143621,82152],{"class":42},[36,143623,131251],{"class":62},[36,143625,2158],{"class":42},[36,143627,88575],{"class":62},[36,143629,131821],{"class":42},[36,143631,143632],{"class":38,"line":235},[36,143633,134411],{"class":2621},[36,143635,143636,143638,143640,143642,143644,143646],{"class":38,"line":377},[36,143637,134416],{"class":79},[36,143639,82152],{"class":42},[36,143641,131251],{"class":62},[36,143643,2158],{"class":42},[36,143645,134425],{"class":62},[36,143647,131821],{"class":42},[3557,143649,143650,143661],{},[653,143651,143652,143653,143656,143657,302,143659],{},"1 号盒子左侧浮动 ",[33,143654,143655],{},"sk_list"," 里面包含 ",[33,143658,3557],{},[33,143660,653],{},[653,143662,143663,143664,143656,143667,302,143669],{},"2 号盒子左侧浮动 ",[33,143665,143666],{},"sk_con",[33,143668,3557],{},[33,143670,653],{},[19,143672,142261],{},[26,143674,143675],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,143676,143677,143683,143693],{"__ignoreMap":31},[36,143678,143679,143681],{"class":38,"line":39},[36,143680,132739],{"class":79},[36,143682,2150],{"class":42},[36,143684,143685,143687,143689,143691],{"class":38,"line":54},[36,143686,133371],{"class":62},[36,143688,2158],{"class":42},[36,143690,26106],{"class":62},[36,143692,3711],{"class":42},[36,143694,143695],{"class":38,"line":66},[36,143696,3982],{"class":42},[19,143698,142350],{},[26,143700,143701],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,143702,143703,143709,143719],{"__ignoreMap":31},[36,143704,143705,143707],{"class":38,"line":39},[36,143706,132739],{"class":79},[36,143708,2150],{"class":42},[36,143710,143711,143713,143715,143717],{"class":38,"line":54},[36,143712,133371],{"class":62},[36,143714,2158],{"class":42},[36,143716,26106],{"class":62},[36,143718,3711],{"class":42},[36,143720,143721],{"class":38,"line":66},[36,143722,3982],{"class":42},[1752,143724,143726,143727],{"id":143725},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,143728,143729],{},"sk_container",[3879,143731],{"style":128747,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3557,143734,143735,143740],{},[653,143736,142915,143737,143739],{},[33,143738,143729],{}," 给宽度 1200，不要给高度",[653,143741,143742],{},"一定不要忘记清除浮动",[19,143744,142261],{},[26,143746,143747],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,143748,143749,143755,143765],{"__ignoreMap":31},[36,143750,143751,143753],{"class":38,"line":39},[36,143752,132739],{"class":79},[36,143754,2150],{"class":42},[36,143756,143757,143759,143761,143763],{"class":38,"line":54},[36,143758,133371],{"class":62},[36,143760,2158],{"class":42},[36,143762,26106],{"class":62},[36,143764,3711],{"class":42},[36,143766,143767],{"class":38,"line":66},[36,143768,3982],{"class":42},[650,143770,143771],{},[653,143772,143773],{},"sk_hd制作",[3557,143775,143776],{},[653,143777,142995,143778,143781],{},[33,143779,143780],{},"sk_hd"," ，插入图片即可",[19,143783,142261],{},[26,143785,143786],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,143787,143788],{"__ignoreMap":31},[36,143789,143790,143792,143794,143796,143798,143800,143802,143804,143806,143808,143810,143812],{"class":38,"line":39},[36,143791,3463],{"class":42},[36,143793,3879],{"class":53649},[36,143795,57587],{"class":79},[36,143797,47],{"class":42},[36,143799,136408],{"class":50},[36,143801,57595],{"class":79},[36,143803,47],{"class":42},[36,143805,136415],{"class":50},[36,143807,136418],{"class":79},[36,143809,47],{"class":42},[36,143811,136423],{"class":50},[36,143813,53656],{"class":42},[650,143815,143816],{"start":54},[653,143817,143818],{},"sk_bd制作",[3557,143820,143821],{},[653,143822,143823,143824,143827,143828,302,143830,143832],{},"3 号盒子 ",[33,143825,143826],{},"sk_bd"," ，里面包含很多的 ",[33,143829,3557],{},[33,143831,653],{},[3557,143833,143834,143843],{},[653,143835,143836,143837,143839,143840,143842],{},"当鼠标移入到 ",[33,143838,653],{}," 上面的时候显示红色的边框，在这里先给 ",[33,143841,653],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[653,143844,143845,143846,143848,143849,143851,143852,143855,143856,143858],{},"由于给每个 ",[33,143847,653],{}," 都设置了外边距，导致一行的最后一个 ",[33,143850,653],{}," 掉了下来，在这里我们利用 ",[33,143853,143854],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,143857,653],{},"，去掉外边距就好了",[19,143860,142261],{},[26,143862,143863],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,143864,143865,143871,143883],{"__ignoreMap":31},[36,143866,143867,143869],{"class":38,"line":39},[36,143868,53959],{"class":53649},[36,143870,2150],{"class":42},[36,143872,143873,143875,143877,143879,143881],{"class":38,"line":54},[36,143874,72815],{"class":62},[36,143876,2158],{"class":42},[36,143878,2751],{"class":62},[36,143880,53904],{"class":62},[36,143882,3711],{"class":42},[36,143884,143885],{"class":38,"line":66},[36,143886,3982],{"class":42},[19,143888,142350],{},[26,143890,143891],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,143892,143893,143899,143911],{"__ignoreMap":31},[36,143894,143895,143897],{"class":38,"line":39},[36,143896,53959],{"class":53649},[36,143898,2150],{"class":42},[36,143900,143901,143903,143905,143907,143909],{"class":38,"line":54},[36,143902,72815],{"class":62},[36,143904,2158],{"class":42},[36,143906,2751],{"class":62},[36,143908,53904],{"class":62},[36,143910,3711],{"class":42},[36,143912,143913],{"class":38,"line":66},[36,143914,3982],{"class":42},[14,143916,143918],{"id":143917},"_163-注册页面制作","16.3 注册页面制作",[3879,143920],{"style":128747,"src":143921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143923,143924,143926],{},[667,143925,11405],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3879,143928],{"style":128747,"src":143929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1752,143931,143933],{"id":143932},"_1631-准备工作","16.3.1 准备工作",[3557,143935,143936,143939],{},[653,143937,143938],{},"创建register.html，引入 base.css，引入favicon图标",[653,143940,143941],{},"创建register.css ，在html页面进行引入",[1752,143943,143945,143946,143948],{"id":143944},"_1632-header-头部实现","16.3.2 ",[33,143947,133896],{}," 头部实现",[3557,143950,143951,143954],{},[653,143952,143953],{},"整个内容用 版心 进行包裹",[653,143955,143956],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143958,142261],{},[26,143960,143961],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,143962,143963],{"__ignoreMap":31},[36,143964,143965,143967,143969,143971,143973,143975,143977,143979,143981,143983,143985,143987],{"class":38,"line":39},[36,143966,3463],{"class":42},[36,143968,3879],{"class":53649},[36,143970,57587],{"class":79},[36,143972,47],{"class":42},[36,143974,136408],{"class":50},[36,143976,57595],{"class":79},[36,143978,47],{"class":42},[36,143980,136415],{"class":50},[36,143982,136418],{"class":79},[36,143984,47],{"class":42},[36,143986,136423],{"class":50},[36,143988,53656],{"class":42},[19,143990,142350],{},[26,143992,143993],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,143994,143995],{"__ignoreMap":31},[36,143996,143997,143999,144001,144003,144005,144007,144009,144011,144013,144015,144017,144019],{"class":38,"line":39},[36,143998,3463],{"class":42},[36,144000,3879],{"class":53649},[36,144002,57587],{"class":79},[36,144004,47],{"class":42},[36,144006,136408],{"class":50},[36,144008,57595],{"class":79},[36,144010,47],{"class":42},[36,144012,136415],{"class":50},[36,144014,136418],{"class":79},[36,144016,47],{"class":42},[36,144018,136423],{"class":50},[36,144020,53656],{"class":42},[1752,144022,144024,144025,144028],{"id":144023},"_1633-registerarea-主体模块实现","16.3.3 ",[33,144026,144027],{},"registerarea"," 主体模块实现",[3879,144030],{"style":128747,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144033,144034],{},"整个大盒子 高度为 522px，设置4个边框",[19,144036,142261],{},[26,144038,144039],{"className":128891,"code":133048,"language":128893,"meta":31,"style":31},[33,144040,144041,144047,144063],{"__ignoreMap":31},[36,144042,144043,144045],{"class":38,"line":39},[36,144044,53959],{"class":53649},[36,144046,2150],{"class":42},[36,144048,144049,144051,144053,144055,144057,144059,144061],{"class":38,"line":54},[36,144050,73241],{"class":62},[36,144052,2158],{"class":42},[36,144054,1906],{"class":62},[36,144056,53840],{"class":46},[36,144058,53869],{"class":62},[36,144060,132283],{"class":62},[36,144062,3711],{"class":42},[36,144064,144065],{"class":38,"line":66},[36,144066,3982],{"class":42},[19,144068,142350],{},[26,144070,144071],{"className":128891,"code":133048,"language":128893,"meta":31,"style":31},[33,144072,144073,144079,144095],{"__ignoreMap":31},[36,144074,144075,144077],{"class":38,"line":39},[36,144076,53959],{"class":53649},[36,144078,2150],{"class":42},[36,144080,144081,144083,144085,144087,144089,144091,144093],{"class":38,"line":54},[36,144082,73241],{"class":62},[36,144084,2158],{"class":42},[36,144086,1906],{"class":62},[36,144088,53840],{"class":46},[36,144090,53869],{"class":62},[36,144092,132283],{"class":62},[36,144094,3711],{"class":42},[36,144096,144097],{"class":38,"line":66},[36,144098,3982],{"class":42},[19,144100,144101],{},"1号盒子 是一个 h3 标签，放标题",[3557,144103,144104],{},[653,144105,144106],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144108,142261],{},[26,144110,144111],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,144112,144113,144119,144129],{"__ignoreMap":31},[36,144114,144115,144117],{"class":38,"line":39},[36,144116,132739],{"class":79},[36,144118,2150],{"class":42},[36,144120,144121,144123,144125,144127],{"class":38,"line":54},[36,144122,133371],{"class":62},[36,144124,2158],{"class":42},[36,144126,26106],{"class":62},[36,144128,3711],{"class":42},[36,144130,144131],{"class":38,"line":66},[36,144132,3982],{"class":42},[19,144134,142350],{},[26,144136,144137],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,144138,144139,144145,144155],{"__ignoreMap":31},[36,144140,144141,144143],{"class":38,"line":39},[36,144142,132739],{"class":79},[36,144144,2150],{"class":42},[36,144146,144147,144149,144151,144153],{"class":38,"line":54},[36,144148,133371],{"class":62},[36,144150,2158],{"class":42},[36,144152,26106],{"class":62},[36,144154,3711],{"class":42},[36,144156,144157],{"class":38,"line":66},[36,144158,3982],{"class":42},[19,144160,144161],{},"2号盒子 里面放注册的内容",[3557,144163,144164,144167,144176,144190,144203,144206,144209,144227,144241],{},[653,144165,144166],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[653,144168,144169,144170,144172,144173,144175],{},"里面的内容利用 ",[33,144171,3557],{}," 包含 ",[33,144174,653],{}," 来实现的（不需要用表格）",[653,144177,141405,144178,144180,144181,144183,144184,144186,144187,144189],{},[33,144179,653],{}," 里面，左侧放 ",[33,144182,35960],{}," 标签， 中间放",[33,144185,56169],{}," 标签， 右侧放 ",[33,144188,36],{}," 提示信息",[653,144191,144192,144193,144195,144196,144198,144199,144202],{},"左侧 ",[33,144194,35960],{},"里面的文字都是右对齐，我们可以给",[33,144197,35960],{},"设置一个宽度（88px），然后利用",[33,144200,144201],{},"text-align"," 来设置右对齐",[653,144204,144205],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[653,144207,144208],{},"右侧 span修饰一下文字颜色",[653,144210,144211,144212],{},"提示信息的样式优化",[3557,144213,144214,144217,144220],{},[653,144215,144216],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[653,144218,144219],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[653,144221,144222,144223,144226],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,144224,144225],{},"vertical-algin"," 来设置 图片与文字对齐方式",[653,144228,144229,144230],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3557,144231,144232,144238],{},[653,144233,144234,144235,144237],{},"设置 ",[33,144236,25923],{}," 的 左右 12px 的内边距，设置一下文字颜色",[653,144239,144240],{},"分别设置 背景颜色",[653,144242,144243,144244,144246],{},"同意协议 和 完成注册 都是用 ",[33,144245,653],{}," 进行包裹",[19,144248,142261],{},[26,144250,144251],{"className":128891,"code":142834,"language":128893,"meta":31,"style":31},[33,144252,144253,144259,144269],{"__ignoreMap":31},[36,144254,144255,144257],{"class":38,"line":39},[36,144256,53959],{"class":53649},[36,144258,2150],{"class":42},[36,144260,144261,144263,144265,144267],{"class":38,"line":54},[36,144262,73223],{"class":62},[36,144264,2158],{"class":42},[36,144266,142851],{"class":62},[36,144268,3711],{"class":42},[36,144270,144271],{"class":38,"line":66},[36,144272,3982],{"class":42},[19,144274,142350],{},[26,144276,144277],{"className":128891,"code":142834,"language":128893,"meta":31,"style":31},[33,144278,144279,144285,144295],{"__ignoreMap":31},[36,144280,144281,144283],{"class":38,"line":39},[36,144282,53959],{"class":53649},[36,144284,2150],{"class":42},[36,144286,144287,144289,144291,144293],{"class":38,"line":54},[36,144288,73223],{"class":62},[36,144290,2158],{"class":42},[36,144292,142851],{"class":62},[36,144294,3711],{"class":42},[36,144296,144297],{"class":38,"line":66},[36,144298,3982],{"class":42},[1752,144300,144302],{"id":144301},"_1634-底部实现","16.3.4 底部实现",[19,144304,142261],{},[26,144306,144307],{"className":128891,"code":142834,"language":128893,"meta":31,"style":31},[33,144308,144309,144315,144325],{"__ignoreMap":31},[36,144310,144311,144313],{"class":38,"line":39},[36,144312,53959],{"class":53649},[36,144314,2150],{"class":42},[36,144316,144317,144319,144321,144323],{"class":38,"line":54},[36,144318,73223],{"class":62},[36,144320,2158],{"class":42},[36,144322,142851],{"class":62},[36,144324,3711],{"class":42},[36,144326,144327],{"class":38,"line":66},[36,144328,3982],{"class":42},[19,144330,142350],{},[26,144332,144333],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,144334,144335,144339,144353,144357],{"__ignoreMap":31},[36,144336,144337],{"class":38,"line":39},[36,144338,133002],{"class":2621},[36,144340,144341,144343,144345,144347,144349,144351],{"class":38,"line":54},[36,144342,3463],{"class":42},[36,144344,53959],{"class":53649},[36,144346,55834],{"class":79},[36,144348,47],{"class":42},[36,144350,133015],{"class":50},[36,144352,53656],{"class":42},[36,144354,144355],{"class":38,"line":66},[36,144356,133022],{"class":42},[36,144358,144359,144361,144363],{"class":38,"line":73},[36,144360,54133],{"class":42},[36,144362,53959],{"class":53649},[36,144364,53656],{"class":42},[14,144366,144368],{"id":144367},"_164-项目总结","16.4 项目总结",[650,144370,144371,144374,144377,144380],{},[653,144372,144373],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[653,144375,144376],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[653,144378,144379],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[653,144381,144382],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3879,144384],{"style":128747,"src":144385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[650,144387,144388],{"start":86},[653,144389,144390],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3879,144392],{"style":128747,"src":144393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[650,144395,144396],{"start":126},[653,144397,144398],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3879,144400],{"style":128747,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,144403,144404],{"className":129638,"code":139048,"language":129640,"meta":31,"style":31},[33,144405,144406],{"__ignoreMap":31},[36,144407,144408,144410,144412,144414,144416,144418,144420,144422,144424,144426,144428,144430],{"class":38,"line":39},[36,144409,3463],{"class":42},[36,144411,56169],{"class":53649},[36,144413,56172],{"class":79},[36,144415,47],{"class":42},[36,144417,65046],{"class":50},[36,144419,17295],{"class":79},[36,144421,47],{"class":42},[36,144423,139069],{"class":50},[36,144425,63368],{"class":79},[36,144427,47],{"class":42},[36,144429,139076],{"class":50},[36,144431,53656],{"class":42},[650,144433,144434,144437],{"start":131},[653,144435,144436],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[653,144438,144439],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2467,144441,144442],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":144444},[144445,144450,144457,144465],{"id":142071,"depth":54,"text":142072,"children":144446},[144447,144448,144449],{"id":142075,"depth":66,"text":142076},{"id":142806,"depth":66,"text":142807},{"id":143119,"depth":66,"text":143120},{"id":143419,"depth":54,"text":143420,"children":144451},[144452,144453,144455],{"id":143423,"depth":66,"text":143424},{"id":143441,"depth":66,"text":144454},"16.2.2 列表页 header 和 nav 修改",{"id":143725,"depth":66,"text":144456},"16.2.3 列表页主体 sk_container",{"id":143917,"depth":54,"text":143918,"children":144458},[144459,144460,144462,144464],{"id":143932,"depth":66,"text":143933},{"id":143944,"depth":66,"text":144461},"16.3.2 header 头部实现",{"id":144023,"depth":66,"text":144463},"16.3.3 registerarea 主体模块实现",{"id":144301,"depth":66,"text":144302},{"id":144367,"depth":54,"text":144368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142063,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144472,"title":144473,"body":144474,"description":2493,"extension":2494,"meta":144582,"navigation":69,"path":144583,"seo":144584,"stem":144585,"__hash__":144586},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144475,"toc":144577},[144476,144479,144483,144486,144489,144498,144507,144511,144516,144523,144541,144544,144547,144550,144553,144556,144559,144562,144565,144568,144571,144574],[10,144477,144473],{"id":144478},"_17-web服务器与网站发布",[14,144480,144482],{"id":144481},"_171-web服务器","17.1 Web服务器",[19,144484,144485],{},"把自己网站上传到服务器上，可以让其他人访问",[3879,144487],{"style":128747,"src":144488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144490,144491,144494,144495],{},[667,144492,144493],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[667,144496,144497],{},"Web 服务器等",[19,144499,144500,144501,302,144504,28110],{},"根据服务器在网络中所在的位置不同，又可分为 ",[667,144502,144503],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[667,144505,144506],{},"远程服务器",[1752,144508,144510],{"id":144509},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144512,144513],{},[667,144514,144515],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144517,144518,144519],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2796,144520,144521],{"href":144521,"rel":144522},"http:\u002F\u002Ffree.3v.do\u002F",[26235],[3557,144524,144525,144528,144531,144538],{},[653,144526,144527],{},"去免费空间网站注册账号。",[653,144529,144530],{},"记录下主机名、用户名、密码、域名。",[653,144532,144533,144534,144537],{},"利用 ",[33,144535,144536],{},"utftp"," 软件 上传网站到远程服务器",[653,144539,144540],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144542,144543],{},"使用软件上传，对上传软件文件进行解压",[3879,144545],{"style":128747,"src":144546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3879,144548],{"style":128747,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144551,144552],{},"输入刚刚申请的服务器账号信息：",[3879,144554],{"style":128747,"src":144555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3879,144557],{"style":128747,"src":144558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3879,144560],{"style":128747,"src":144561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3879,144563],{"style":128747,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144566,144567],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3879,144569],{"style":128747,"src":144570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144572,144573],{},"浏览器输入域名即可访问",[19,144575,144576],{},"首页一定必须是index",{"title":31,"searchDepth":54,"depth":54,"links":144578},[144579],{"id":144481,"depth":54,"text":144482,"children":144580},[144581],{"id":144509,"depth":66,"text":144510},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144473,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144588,"title":144589,"body":144590,"description":2493,"extension":2494,"meta":145517,"navigation":69,"path":145518,"seo":145519,"stem":145520,"__hash__":145521},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144591,"toc":145500},[144592,144595,144599,144602,144605,144616,144619,144623,144627,144632,144635,144638,144641,144644,144648,144674,144678,144682,144685,144688,144692,144725,144729,144732,144735,144799,144803,144807,144810,144813,144816,144820,144865,144869,144872,144902,144906,144910,144913,144916,144920,144923,144992,144995,145103,145105,145111,145115,145118,145121,145217,145220,145224,145248,145252,145255,145259,145262,145266,145269,145272,145275,145278,145282,145285,145288,145292,145296,145299,145302,145305,145308,145312,145315,145319,145322,145325,145370,145374,145378,145381,145384,145387,145419,145423,145426,145460,145464,145467,145497],[10,144593,144589],{"id":144594},"_18-2d动画与3d转换",[14,144596,144598],{"id":144597},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144600,144601],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144603,144604],{},"转换（transform）你可以简单理解为变形",[3557,144606,144607,144610,144613],{},[653,144608,144609],{},"移动：translate",[653,144611,144612],{},"旋转：rotate",[653,144614,144615],{},"缩放：scale",[3879,144617],{"style":128747,"src":144618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1752,144620,144622],{"id":144621},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24368,144624,144626],{"id":144625},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144628,144629,144630],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[667,144631,135550],{},[3879,144633],{"style":128747,"src":144634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144636,144637],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144639,144640],{},"对于行内元素无效",[19,144642,144643],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24368,144645,144647],{"id":144646},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,144649,144650],{"className":128891,"code":141080,"language":128893,"meta":31,"style":31},[33,144651,144652,144658,144670],{"__ignoreMap":31},[36,144653,144654,144656],{"class":38,"line":39},[36,144655,53959],{"class":53649},[36,144657,2150],{"class":42},[36,144659,144660,144662,144664,144666,144668],{"class":38,"line":54},[36,144661,72815],{"class":62},[36,144663,2158],{"class":42},[36,144665,2751],{"class":62},[36,144667,53904],{"class":62},[36,144669,3711],{"class":42},[36,144671,144672],{"class":38,"line":66},[36,144673,3982],{"class":42},[1752,144675,144677],{"id":144676},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24368,144679,144681],{"id":144680},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144683,144684],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3879,144686],{"style":128747,"src":144687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24368,144689,144691],{"id":144690},"_18122-旋转效果","18.1.2.2 旋转效果",[26,144693,144695],{"className":128891,"code":144694,"language":128893,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,144696,144697,144703,144721],{"__ignoreMap":31},[36,144698,144699,144701],{"class":38,"line":39},[36,144700,53959],{"class":53649},[36,144702,2150],{"class":42},[36,144704,144705,144707,144709,144712,144714,144716,144719],{"class":38,"line":54},[36,144706,138875],{"class":62},[36,144708,2158],{"class":42},[36,144710,144711],{"class":62},"rotate",[36,144713,92],{"class":42},[36,144715,3084],{"class":62},[36,144717,144718],{"class":46},"deg",[36,144720,5104],{"class":42},[36,144722,144723],{"class":38,"line":66},[36,144724,3982],{"class":42},[24368,144726,144728],{"id":144727},"_18123-三角做法","18.1.2.3 三角做法",[19,144730,144731],{},"该下标当经过最外层大盒子时会实现向上反转",[3879,144733],{"style":128747,"src":144734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,144736,144737],{"className":128891,"code":137411,"language":128893,"meta":31,"style":31},[33,144738,144739,144743,144749,144759,144769,144785,144795],{"__ignoreMap":31},[36,144740,144741],{"class":38,"line":39},[36,144742,137418],{"class":2621},[36,144744,144745,144747],{"class":38,"line":54},[36,144746,137423],{"class":79},[36,144748,2150],{"class":42},[36,144750,144751,144753,144755,144757],{"class":38,"line":66},[36,144752,72913],{"class":62},[36,144754,2158],{"class":42},[36,144756,2751],{"class":62},[36,144758,3711],{"class":42},[36,144760,144761,144763,144765,144767],{"class":38,"line":73},[36,144762,73133],{"class":62},[36,144764,2158],{"class":42},[36,144766,2751],{"class":62},[36,144768,3711],{"class":42},[36,144770,144771,144773,144775,144777,144779,144781,144783],{"class":38,"line":86},[36,144772,73241],{"class":62},[36,144774,2158],{"class":42},[36,144776,3002],{"class":62},[36,144778,53840],{"class":46},[36,144780,53869],{"class":62},[36,144782,66338],{"class":62},[36,144784,3711],{"class":42},[36,144786,144787,144789,144791,144793],{"class":38,"line":126},[36,144788,137466],{"class":62},[36,144790,2158],{"class":42},[36,144792,64717],{"class":62},[36,144794,3711],{"class":42},[36,144796,144797],{"class":38,"line":131},[36,144798,3982],{"class":42},[1752,144800,144802],{"id":144801},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24368,144804,144806],{"id":144805},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144808,144809],{},"设置中心点",[3879,144811],{"style":128747,"src":144812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144814,144815],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24368,144817,144819],{"id":144818},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,144821,144823],{"className":128891,"code":144822,"language":128893,"meta":31,"style":31},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[33,144824,144825,144830,144836,144851,144856,144861],{"__ignoreMap":31},[36,144826,144827],{"class":38,"line":39},[36,144828,144829],{"class":2621},"\u002F* 转换中心点 *\u002F\n",[36,144831,144832,144834],{"class":38,"line":54},[36,144833,53959],{"class":53649},[36,144835,2150],{"class":42},[36,144837,144838,144841,144843,144845,144847,144849],{"class":38,"line":66},[36,144839,144840],{"class":62},"  transform-origin",[36,144842,2158],{"class":42},[36,144844,53940],{"class":62},[36,144846,19517],{"class":62},[36,144848,132754],{"class":42},[36,144850,137564],{"class":2621},[36,144852,144853],{"class":38,"line":73},[36,144854,144855],{"class":2621},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,144857,144858],{"class":38,"line":86},[36,144859,144860],{"class":2621},"  \u002F* transform-origin: left top; *\u002F\n",[36,144862,144863],{"class":38,"line":126},[36,144864,3982],{"class":42},[24368,144866,144868],{"id":144867},"_18133-旋转案例","18.1.3.3 旋转案例",[3879,144870],{"style":128747,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,144873,144874],{"className":128891,"code":144694,"language":128893,"meta":31,"style":31},[33,144875,144876,144882,144898],{"__ignoreMap":31},[36,144877,144878,144880],{"class":38,"line":39},[36,144879,53959],{"class":53649},[36,144881,2150],{"class":42},[36,144883,144884,144886,144888,144890,144892,144894,144896],{"class":38,"line":54},[36,144885,138875],{"class":62},[36,144887,2158],{"class":42},[36,144889,144711],{"class":62},[36,144891,92],{"class":42},[36,144893,3084],{"class":62},[36,144895,144718],{"class":46},[36,144897,5104],{"class":42},[36,144899,144900],{"class":38,"line":66},[36,144901,3982],{"class":42},[1752,144903,144905],{"id":144904},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24368,144907,144909],{"id":144908},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144911,144912],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3879,144914],{"style":128747,"src":144915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24368,144917,144919],{"id":144918},"_18142-分页按钮","18.1.4.2 分页按钮",[3879,144921],{"style":128747,"src":144922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,144924,144926],{"className":128891,"code":144925,"language":128893,"meta":31,"style":31},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[33,144927,144928,144934,144950,144954,144958,144963,144969,144983,144988],{"__ignoreMap":31},[36,144929,144930,144932],{"class":38,"line":39},[36,144931,53959],{"class":53649},[36,144933,2150],{"class":42},[36,144935,144936,144938,144940,144943,144945,144948],{"class":38,"line":54},[36,144937,138875],{"class":62},[36,144939,2158],{"class":42},[36,144941,144942],{"class":62},"scale",[36,144944,92],{"class":42},[36,144946,144947],{"class":62},"1.2",[36,144949,5104],{"class":42},[36,144951,144952],{"class":38,"line":66},[36,144953,3982],{"class":42},[36,144955,144956],{"class":38,"line":73},[36,144957,138352],{"class":42},[36,144959,144960],{"class":38,"line":86},[36,144961,144962],{"class":2621},"\u002F* 2D 缩放 *\u002F\n",[36,144964,144965,144967],{"class":38,"line":126},[36,144966,53959],{"class":53649},[36,144968,2150],{"class":42},[36,144970,144971,144973,144975,144977,144979,144981],{"class":38,"line":131},[36,144972,138875],{"class":62},[36,144974,2158],{"class":42},[36,144976,144942],{"class":62},[36,144978,92],{"class":42},[36,144980,144947],{"class":62},[36,144982,5104],{"class":42},[36,144984,144985],{"class":38,"line":225},[36,144986,144987],{"class":2621},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,144989,144990],{"class":38,"line":235},[36,144991,3982],{"class":42},[19,144993,144994],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,144996,144998],{"className":128891,"code":144997,"language":128893,"meta":31,"style":31},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[33,144999,145000,145005,145015,145036,145057,145061,145066,145072,145099],{"__ignoreMap":31},[36,145001,145002],{"class":38,"line":39},[36,145003,145004],{"class":2621},"\u002F* 定义动画 *\u002F\n",[36,145006,145007,145010,145013],{"class":38,"line":54},[36,145008,145009],{"class":46},"@keyframes",[36,145011,145012],{"class":7598}," move",[36,145014,2150],{"class":42},[36,145016,145017,145020,145022,145024,145026,145029,145031,145033],{"class":38,"line":66},[36,145018,145019],{"class":79},"  0%",[36,145021,82152],{"class":42},[36,145023,50483],{"class":62},[36,145025,2158],{"class":42},[36,145027,145028],{"class":62},"translateX",[36,145030,92],{"class":42},[36,145032,2751],{"class":62},[36,145034,145035],{"class":42},"); }\n",[36,145037,145038,145041,145043,145045,145047,145049,145051,145053,145055],{"class":38,"line":73},[36,145039,145040],{"class":79},"  100%",[36,145042,82152],{"class":42},[36,145044,50483],{"class":62},[36,145046,2158],{"class":42},[36,145048,145028],{"class":62},[36,145050,92],{"class":42},[36,145052,1070],{"class":62},[36,145054,53840],{"class":46},[36,145056,145035],{"class":42},[36,145058,145059],{"class":38,"line":86},[36,145060,3982],{"class":42},[36,145062,145063],{"class":38,"line":126},[36,145064,145065],{"class":2621},"\u002F* 调用动画 *\u002F\n",[36,145067,145068,145070],{"class":38,"line":131},[36,145069,53959],{"class":53649},[36,145071,2150],{"class":42},[36,145073,145074,145077,145079,145081,145083,145085,145087,145089,145091,145094,145097],{"class":38,"line":225},[36,145075,145076],{"class":62},"  animation",[36,145078,2158],{"class":42},[36,145080,137577],{"class":62},[36,145082,27489],{"class":62},[36,145084,3249],{"class":46},[36,145086,81025],{"class":62},[36,145088,899],{"class":62},[36,145090,3249],{"class":46},[36,145092,145093],{"class":62}," infinite",[36,145095,145096],{"class":62}," alternate",[36,145098,3711],{"class":42},[36,145100,145101],{"class":38,"line":235},[36,145102,3982],{"class":42},[19,145104,144994],{},[26,145106,145109],{"className":145107,"code":145108,"language":7570},[7568],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[33,145110,145108],{"__ignoreMap":31},[24368,145112,145114],{"id":145113},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145116,145117],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3879,145119],{"style":128747,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,145122,145123],{"className":128891,"code":144997,"language":128893,"meta":31,"style":31},[33,145124,145125,145129,145137,145155,145175,145179,145183,145189,145213],{"__ignoreMap":31},[36,145126,145127],{"class":38,"line":39},[36,145128,145004],{"class":2621},[36,145130,145131,145133,145135],{"class":38,"line":54},[36,145132,145009],{"class":46},[36,145134,145012],{"class":7598},[36,145136,2150],{"class":42},[36,145138,145139,145141,145143,145145,145147,145149,145151,145153],{"class":38,"line":66},[36,145140,145019],{"class":79},[36,145142,82152],{"class":42},[36,145144,50483],{"class":62},[36,145146,2158],{"class":42},[36,145148,145028],{"class":62},[36,145150,92],{"class":42},[36,145152,2751],{"class":62},[36,145154,145035],{"class":42},[36,145156,145157,145159,145161,145163,145165,145167,145169,145171,145173],{"class":38,"line":73},[36,145158,145040],{"class":79},[36,145160,82152],{"class":42},[36,145162,50483],{"class":62},[36,145164,2158],{"class":42},[36,145166,145028],{"class":62},[36,145168,92],{"class":42},[36,145170,1070],{"class":62},[36,145172,53840],{"class":46},[36,145174,145035],{"class":42},[36,145176,145177],{"class":38,"line":86},[36,145178,3982],{"class":42},[36,145180,145181],{"class":38,"line":126},[36,145182,145065],{"class":2621},[36,145184,145185,145187],{"class":38,"line":131},[36,145186,53959],{"class":53649},[36,145188,2150],{"class":42},[36,145190,145191,145193,145195,145197,145199,145201,145203,145205,145207,145209,145211],{"class":38,"line":225},[36,145192,145076],{"class":62},[36,145194,2158],{"class":42},[36,145196,137577],{"class":62},[36,145198,27489],{"class":62},[36,145200,3249],{"class":46},[36,145202,81025],{"class":62},[36,145204,899],{"class":62},[36,145206,3249],{"class":46},[36,145208,145093],{"class":62},[36,145210,145096],{"class":62},[36,145212,3711],{"class":42},[36,145214,145215],{"class":38,"line":235},[36,145216,3982],{"class":42},[19,145218,145219],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1752,145221,145223],{"id":145222},"_1823-知识点回顾","18.2.3 知识点回顾",[26,145225,145226],{"className":128891,"code":131060,"language":128893,"meta":31,"style":31},[33,145227,145228,145234,145244],{"__ignoreMap":31},[36,145229,145230,145232],{"class":38,"line":39},[36,145231,53959],{"class":53649},[36,145233,2150],{"class":42},[36,145235,145236,145238,145240,145242],{"class":38,"line":54},[36,145237,131073],{"class":62},[36,145239,2158],{"class":42},[36,145241,64084],{"class":62},[36,145243,3711],{"class":42},[36,145245,145246],{"class":38,"line":66},[36,145247,3982],{"class":42},[14,145249,145251],{"id":145250},"_183-3d-转换","18.3 3D 转换",[19,145253,145254],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1752,145256,145258],{"id":145257},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3879,145260],{"style":128747,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1752,145263,145265],{"id":145264},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3879,145267],{"style":128747,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145270,145271],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145273,145274],{},"translate3d的效果需要搭配透视perspective来使用",[3879,145276],{"style":128747,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1752,145279,145281],{"id":145280},"_1833-透视-perspective","18.3.3 透视 perspective",[3879,145283],{"style":128747,"src":145284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145286,145287],{},"透视写在父盒子上，单位为像素",[1752,145289,145291],{"id":145290},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24368,145293,145295],{"id":145294},"_18341-分开解释","18.3.4.1 分开解释",[3879,145297],{"style":128747,"src":145298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3879,145300],{"style":128747,"src":145301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3879,145303],{"style":128747,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145306,145307],{},"总结来说就是左手原则",[24368,145309,145311],{"id":145310},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3879,145313],{"style":128747,"src":145314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1752,145316,145318],{"id":145317},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3879,145320],{"style":128747,"src":145321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3879,145323],{"style":128747,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,145326,145328],{"className":128891,"code":145327,"language":128893,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,145329,145330,145336,145349,145366],{"__ignoreMap":31},[36,145331,145332,145334],{"class":38,"line":39},[36,145333,53959],{"class":53649},[36,145335,2150],{"class":42},[36,145337,145338,145341,145343,145345,145347],{"class":38,"line":54},[36,145339,145340],{"class":62},"  perspective",[36,145342,2158],{"class":42},[36,145344,67421],{"class":62},[36,145346,53840],{"class":46},[36,145348,3711],{"class":42},[36,145350,145351,145353,145355,145358,145360,145362,145364],{"class":38,"line":66},[36,145352,138875],{"class":62},[36,145354,2158],{"class":42},[36,145356,145357],{"class":62},"rotateX",[36,145359,92],{"class":42},[36,145361,3084],{"class":62},[36,145363,144718],{"class":46},[36,145365,5104],{"class":42},[36,145367,145368],{"class":38,"line":73},[36,145369,3982],{"class":42},[1752,145371,145373],{"id":145372},"_1836-案例","18.3.6 案例",[24368,145375,145377],{"id":145376},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3879,145379],{"style":128747,"src":145380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3879,145382],{"style":128747,"src":145383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3879,145385],{"style":128747,"src":145386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,145388,145390],{"className":128891,"code":145389,"language":128893,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,145391,145392,145397,145403,145415],{"__ignoreMap":31},[36,145393,145394],{"class":38,"line":39},[36,145395,145396],{"class":2621},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,145398,145399,145401],{"class":38,"line":54},[36,145400,135888],{"class":79},[36,145402,2150],{"class":42},[36,145404,145405,145407,145409,145411,145413],{"class":38,"line":66},[36,145406,145340],{"class":62},[36,145408,2158],{"class":42},[36,145410,67421],{"class":62},[36,145412,53840],{"class":46},[36,145414,3711],{"class":42},[36,145416,145417],{"class":38,"line":73},[36,145418,3982],{"class":42},[24368,145420,145422],{"id":145421},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3879,145424],{"style":128747,"src":145425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,145427,145428],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,145429,145430,145434,145448,145452],{"__ignoreMap":31},[36,145431,145432],{"class":38,"line":39},[36,145433,133002],{"class":2621},[36,145435,145436,145438,145440,145442,145444,145446],{"class":38,"line":54},[36,145437,3463],{"class":42},[36,145439,53959],{"class":53649},[36,145441,55834],{"class":79},[36,145443,47],{"class":42},[36,145445,133015],{"class":50},[36,145447,53656],{"class":42},[36,145449,145450],{"class":38,"line":66},[36,145451,133022],{"class":42},[36,145453,145454,145456,145458],{"class":38,"line":73},[36,145455,54133],{"class":42},[36,145457,53959],{"class":53649},[36,145459,53656],{"class":42},[24368,145461,145463],{"id":145462},"_18363-旋转木马","18.3.6.3 旋转木马",[3879,145465],{"style":128747,"src":145466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,145468,145469],{"className":128891,"code":144694,"language":128893,"meta":31,"style":31},[33,145470,145471,145477,145493],{"__ignoreMap":31},[36,145472,145473,145475],{"class":38,"line":39},[36,145474,53959],{"class":53649},[36,145476,2150],{"class":42},[36,145478,145479,145481,145483,145485,145487,145489,145491],{"class":38,"line":54},[36,145480,138875],{"class":62},[36,145482,2158],{"class":42},[36,145484,144711],{"class":62},[36,145486,92],{"class":42},[36,145488,3084],{"class":62},[36,145490,144718],{"class":46},[36,145492,5104],{"class":42},[36,145494,145495],{"class":38,"line":66},[36,145496,3982],{"class":42},[2467,145498,145499],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":145501},[145502,145509],{"id":144597,"depth":54,"text":144598,"children":145503},[145504,145505,145506,145507,145508],{"id":144621,"depth":66,"text":144622},{"id":144676,"depth":66,"text":144677},{"id":144801,"depth":66,"text":144802},{"id":144904,"depth":66,"text":144905},{"id":145222,"depth":66,"text":145223},{"id":145250,"depth":54,"text":145251,"children":145510},[145511,145512,145513,145514,145515,145516],{"id":145257,"depth":66,"text":145258},{"id":145264,"depth":66,"text":145265},{"id":145280,"depth":66,"text":145281},{"id":145290,"depth":66,"text":145291},{"id":145317,"depth":66,"text":145318},{"id":145372,"depth":66,"text":145373},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144589,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145523,"title":145524,"body":145525,"description":2493,"extension":2494,"meta":145728,"navigation":69,"path":145729,"seo":145730,"stem":145731,"__hash__":145732},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145526,"toc":145717},[145527,145530,145534,145537,145540,145544,145547,145550,145553,145557,145560,145564,145567,145571,145574,145578,145592,145596,145621,145624,145627,145644,145648,145652,145655,145658,145662,145665,145668,145686,145690,145693,145707,145711,145714],[10,145528,145524],{"id":145529},"_19-移动端基础-前缀现状与视口",[14,145531,145533],{"id":145532},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3879,145535],{"style":128747,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145538,145539],{},"意思就是加个前缀，增加兼容性",[14,145541,145543],{"id":145542},"_192-移动端现状认识","19.2 移动端现状认识",[3879,145545],{"style":128747,"src":145546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145548,145549],{},"调试方法：",[3879,145551],{"style":128747,"src":145552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145554,145556],{"id":145555},"_193-视口","19.3 视口",[19,145558,145559],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1752,145561,145563],{"id":145562},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3879,145565],{"style":128747,"src":145566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1752,145568,145570],{"id":145569},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3879,145572],{"style":128747,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1752,145575,145577],{"id":145576},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3557,145579,145580,145583,145586,145589],{},[653,145581,145582],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[653,145584,145585],{},"理想视口，对设备来讲，是最理想的视口尺寸",[653,145587,145588],{},"需要手动添写meta视口标签通知浏览器操作",[653,145590,145591],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1752,145593,145595],{"id":145594},"_1934-meta视口标签","19.3.4 meta视口标签",[26,145597,145599],{"className":129638,"code":145598,"language":129640,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,145600,145601],{"__ignoreMap":31},[36,145602,145603,145605,145607,145609,145611,145613,145615,145617,145619],{"class":38,"line":39},[36,145604,3463],{"class":42},[36,145606,53693],{"class":53649},[36,145608,17295],{"class":79},[36,145610,47],{"class":42},[36,145612,53740],{"class":50},[36,145614,53720],{"class":79},[36,145616,47],{"class":42},[36,145618,53747],{"class":50},[36,145620,53656],{"class":42},[3879,145622],{"style":128747,"src":145623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145625,145626],{},"标准视口设置：",[650,145628,145629,145632,145635,145638,145641],{},[653,145630,145631],{},"视口宽度和设备保持一致",[653,145633,145634],{},"视口的默认缩放比例1.0",[653,145636,145637],{},"不允许用户自行缩放",[653,145639,145640],{},"最大允许的缩放比例1.0",[653,145642,145643],{},"最小允许的缩放比例1.0",[1752,145645,145647],{"id":145646},"_1935-二倍图","19.3.5 二倍图",[24368,145649,145651],{"id":145650},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3879,145653],{"style":128747,"src":145654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3879,145656],{"style":128747,"src":145657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24368,145659,145661],{"id":145660},"_19352-多倍图","19.3.5.2 多倍图",[3879,145663],{"style":128747,"src":145664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145666,145667],{},"二倍图法，代码如下：",[26,145669,145671],{"className":128891,"code":145670,"language":128893,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,145672,145673,145678],{"__ignoreMap":31},[36,145674,145675],{"class":38,"line":39},[36,145676,145677],{"class":2621},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,145679,145680,145683],{"class":38,"line":54},[36,145681,145682],{"class":53649},"background-size",[36,145684,145685],{"class":42},": 50% 50%;\n",[24368,145687,145689],{"id":145688},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3879,145691],{"style":128747,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[650,145694,145695,145698,145701,145704],{},[653,145696,145697],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[653,145699,145700],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[653,145702,145703],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[653,145705,145706],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24368,145708,145710],{"id":145709},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3879,145712],{"style":128747,"src":145713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2467,145715,145716],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":145718},[145719,145720,145721],{"id":145532,"depth":54,"text":145533},{"id":145542,"depth":54,"text":145543},{"id":145555,"depth":54,"text":145556,"children":145722},[145723,145724,145725,145726,145727],{"id":145562,"depth":66,"text":145563},{"id":145569,"depth":66,"text":145570},{"id":145576,"depth":66,"text":145577},{"id":145594,"depth":66,"text":145595},{"id":145646,"depth":66,"text":145647},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145524,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145734,"title":145735,"body":145736,"description":2493,"extension":2494,"meta":146613,"navigation":69,"path":146614,"seo":146615,"stem":146616,"__hash__":146617},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145737,"toc":146597},[145738,145741,145745,145752,145755,145762,145765,145770,145773,145777,145781,145788,145791,145794,145798,145801,145804,145807,145810,145813,145817,145820,145824,145826,145829,145832,145835,145838,145840,145843,145845,145875,145877,145907,145911,145914,145918,145921,145938,145941,145944,146020,146022,146025,146028,146031,146034,146036,146039,146042,146046,146068,146071,146074,146078,146081,146087,146090,146094,146097,146100,146104,146107,146110,146113,146117,146120,146123,146126,146129,146133,146136,146140,146147,146150,146153,146156,146159,146169,146172,146175,146182,146185,146189,146192,146195,146199,146202,146205,146208,146253,146256,146259,146262,146264,146393,146395,146433,146436,146439,146441,146559,146561,146595],[10,145739,145735],{"id":145740},"_20-移动端布局实战上篇",[14,145742,145744],{"id":145743},"_201-移动端主流方案","20.1 移动端主流方案",[650,145746,145747],{},[653,145748,145749],{},[667,145750,145751],{},"单独移动端页面（主流）",[3879,145753],{"style":128747,"src":145754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[650,145756,145757],{"start":54},[653,145758,145759],{},[667,145760,145761],{},"响应式兼容PC移动端",[3879,145763],{"style":128747,"src":145764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[650,145766,145767],{"start":66},[653,145768,145769],{},"两种页面选型布局方式",[3879,145771],{"style":128747,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145774,145776],{"id":145775},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1752,145778,145780],{"id":145779},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145782,145783,145784],{},"官网地址： ",[2796,145785,145786],{"href":145786,"rel":145787},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26235],[3879,145789],{"style":128747,"src":145790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3879,145792],{"style":128747,"src":145793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1752,145795,145797],{"id":145796},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3879,145799],{"style":128747,"src":145800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3879,145802],{"style":128747,"src":145803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145805,145806],{},"去除高亮：",[19,145808,145809],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145811,145812],{},"-webkit- tap-highlight-color: transparent;",[14,145814,145816],{"id":145815},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3879,145818],{"style":128747,"src":145819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145821,145823],{"id":145822},"_204-流式布局案例","20.4 流式布局案例",[19,145825,2595],{},[19,145827,145828],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145830,145831],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145833,145834],{},"图片格式：",[3879,145836],{"style":128747,"src":145837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145839,137934],{},[3879,145841],{"style":128747,"src":145842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145844,142261],{},[26,145846,145847],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,145848,145849],{"__ignoreMap":31},[36,145850,145851,145853,145855,145857,145859,145861,145863,145865,145867,145869,145871,145873],{"class":38,"line":39},[36,145852,3463],{"class":42},[36,145854,3879],{"class":53649},[36,145856,57587],{"class":79},[36,145858,47],{"class":42},[36,145860,136408],{"class":50},[36,145862,57595],{"class":79},[36,145864,47],{"class":42},[36,145866,136415],{"class":50},[36,145868,136418],{"class":79},[36,145870,47],{"class":42},[36,145872,136423],{"class":50},[36,145874,53656],{"class":42},[19,145876,142350],{},[26,145878,145879],{"className":129638,"code":136393,"language":129640,"meta":31,"style":31},[33,145880,145881],{"__ignoreMap":31},[36,145882,145883,145885,145887,145889,145891,145893,145895,145897,145899,145901,145903,145905],{"class":38,"line":39},[36,145884,3463],{"class":42},[36,145886,3879],{"class":53649},[36,145888,57587],{"class":79},[36,145890,47],{"class":42},[36,145892,136408],{"class":50},[36,145894,57595],{"class":79},[36,145896,47],{"class":42},[36,145898,136415],{"class":50},[36,145900,136418],{"class":79},[36,145902,47],{"class":42},[36,145904,136423],{"class":50},[36,145906,53656],{"class":42},[14,145908,145910],{"id":145909},"_205-flex布局","20.5 flex布局",[3879,145912],{"style":128747,"src":145913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1752,145915,145917],{"id":145916},"_2051-布局原理","20.5.1 布局原理",[19,145919,145920],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3557,145922,145923,145926,145929,145932,145935],{},[653,145924,145925],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[653,145927,145928],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[653,145930,145931],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[653,145933,145934],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[653,145936,145937],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145939,145940],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145942,145943],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,145945,145947],{"className":128891,"code":145946,"language":128893,"meta":31,"style":31},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[33,145948,145949,145954,145961,145971,145983,145994,146005,146016],{"__ignoreMap":31},[36,145950,145951],{"class":38,"line":39},[36,145952,145953],{"class":2621},"\u002F* Flex 弹性布局 *\u002F\n",[36,145955,145956,145959],{"class":38,"line":54},[36,145957,145958],{"class":79},".container",[36,145960,2150],{"class":42},[36,145962,145963,145965,145967,145969],{"class":38,"line":66},[36,145964,130507],{"class":62},[36,145966,2158],{"class":42},[36,145968,53825],{"class":62},[36,145970,3711],{"class":42},[36,145972,145973,145976,145978,145981],{"class":38,"line":73},[36,145974,145975],{"class":62},"  flex-direction",[36,145977,2158],{"class":42},[36,145979,145980],{"class":62},"row",[36,145982,3711],{"class":42},[36,145984,145985,145988,145990,145992],{"class":38,"line":86},[36,145986,145987],{"class":62},"  justify-content",[36,145989,2158],{"class":42},[36,145991,54016],{"class":62},[36,145993,3711],{"class":42},[36,145995,145996,145999,146001,146003],{"class":38,"line":126},[36,145997,145998],{"class":62},"  align-items",[36,146000,2158],{"class":42},[36,146002,53940],{"class":62},[36,146004,3711],{"class":42},[36,146006,146007,146010,146012,146014],{"class":38,"line":131},[36,146008,146009],{"class":62},"  flex-wrap",[36,146011,2158],{"class":42},[36,146013,80955],{"class":62},[36,146015,3711],{"class":42},[36,146017,146018],{"class":38,"line":225},[36,146019,3982],{"class":42},[19,146021,72798],{},[19,146023,146024],{},".form-item .male-label {",[19,146026,146027],{},"   margin-right: 20px;",[19,146029,146030],{},"   display: inline-flex;",[19,146032,146033],{},"   align-items: center;",[19,146035,107],{},[3879,146037],{"style":128747,"src":146038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3879,146040],{"style":128747,"src":146041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1752,146043,146045],{"id":146044},"_2052-常见父项属性","20.5.2 常见父项属性",[650,146047,146048,146051,146054,146057,146060,146063,146066],{},[653,146049,146050],{},"flex-direction：设置主轴的方向",[653,146052,146053],{},"justify-content：设置主轴上的子元素排列方式",[653,146055,146056],{},"flex-wrap：设置子元素是否换行",[653,146058,146059],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[653,146061,146062],{},"align-items：设置侧轴上的子元素排列方式（单行）",[653,146064,146065],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[653,146067,146050],{},[3879,146069],{"style":128747,"src":146070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3879,146072],{"style":128747,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[650,146075,146076],{"start":54},[653,146077,146053],{},[3879,146079],{"style":128747,"src":146080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146082,146083,146086],{},[33,146084,146085],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146088,146089],{},"跟着主轴走",[650,146091,146092],{"start":66},[653,146093,146056],{},[3879,146095],{"style":128747,"src":146096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146098,146099],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[650,146101,146102],{"start":73},[653,146103,146059],{},[3879,146105],{"style":128747,"src":146106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146108,146109],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146111,146112],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[650,146114,146115],{"start":86},[653,146116,146062],{},[3879,146118],{"style":128747,"src":146119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146121,146122],{},"align-items与align-content之间的区别：",[19,146124,146125],{},"单找items，多找content",[3879,146127],{"style":128747,"src":146128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[650,146130,146131],{"start":126},[653,146132,146065],{},[3879,146134],{"style":128747,"src":146135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1752,146137,146139],{"id":146138},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[650,146141,146142],{},[653,146143,146144],{},[667,146145,146146],{},"flex 属性",[19,146148,146149],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3879,146151],{"style":128747,"src":146152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146154,146155],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146157,146158],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[650,146160,146161],{"start":54},[653,146162,146163,16172,146166],{},[667,146164,146165],{},"align-self",[667,146167,146168],{},"控制子项自己在侧轴上的排列方式",[3879,146170],{"style":128747,"src":146171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146173,146174],{},"单个子盒子在父盒子侧轴上的排列方式",[650,146176,146177],{"start":66},[653,146178,146179,146181],{},[667,146180,97638],{}," 属性定义项目的排列顺序",[3879,146183],{"style":128747,"src":146184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1752,146186,146188],{"id":146187},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3879,146190],{"style":128747,"src":146191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146193,146194],{},"必须要添加浏览器的私有前缀",[1752,146196,146198],{"id":146197},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146200,146201],{},"学到最重要的知识：",[19,146203,146204],{},"flex处理这样的布局思路",[3879,146206],{"style":128747,"src":146207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,146209,146211],{"className":128891,"code":146210,"language":128893,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,146212,146213,146219,146229,146239,146249],{"__ignoreMap":31},[36,146214,146215,146217],{"class":38,"line":39},[36,146216,145958],{"class":79},[36,146218,2150],{"class":42},[36,146220,146221,146223,146225,146227],{"class":38,"line":54},[36,146222,130507],{"class":62},[36,146224,2158],{"class":42},[36,146226,53825],{"class":62},[36,146228,3711],{"class":42},[36,146230,146231,146233,146235,146237],{"class":38,"line":66},[36,146232,145987],{"class":62},[36,146234,2158],{"class":42},[36,146236,53940],{"class":62},[36,146238,3711],{"class":42},[36,146240,146241,146243,146245,146247],{"class":38,"line":73},[36,146242,145998],{"class":62},[36,146244,2158],{"class":42},[36,146246,53940],{"class":62},[36,146248,3711],{"class":42},[36,146250,146251],{"class":38,"line":86},[36,146252,3982],{"class":42},[19,146254,146255],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146257,146258],{},"使用属性选择器",[3879,146260],{"style":128747,"src":146261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146263,71236],{},[26,146265,146267],{"className":129638,"code":146266,"language":129640,"meta":31,"style":31},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[33,146268,146269,146274,146288,146293,146313,146318,146337,146342,146361,146366,146385],{"__ignoreMap":31},[36,146270,146271],{"class":38,"line":39},[36,146272,146273],{"class":2621},"\u003C!-- 携程网移动端案例结构 -->\n",[36,146275,146276,146278,146280,146282,146284,146286],{"class":38,"line":54},[36,146277,3463],{"class":42},[36,146279,53959],{"class":53649},[36,146281,55834],{"class":79},[36,146283,47],{"class":42},[36,146285,94664],{"class":50},[36,146287,53656],{"class":42},[36,146289,146290],{"class":38,"line":66},[36,146291,146292],{"class":2621},"  \u003C!-- 搜索栏 -->\n",[36,146294,146295,146297,146299,146301,146303,146306,146309,146311],{"class":38,"line":73},[36,146296,54492],{"class":42},[36,146298,53959],{"class":53649},[36,146300,55834],{"class":79},[36,146302,47],{"class":42},[36,146304,146305],{"class":50},"\"search-index\"",[36,146307,146308],{"class":42},">...\u003C\u002F",[36,146310,53959],{"class":53649},[36,146312,53656],{"class":42},[36,146314,146315],{"class":38,"line":86},[36,146316,146317],{"class":2621},"  \u003C!-- 焦点图 -->\n",[36,146319,146320,146322,146324,146326,146328,146331,146333,146335],{"class":38,"line":126},[36,146321,54492],{"class":42},[36,146323,53959],{"class":53649},[36,146325,55834],{"class":79},[36,146327,47],{"class":42},[36,146329,146330],{"class":50},"\"focus\"",[36,146332,146308],{"class":42},[36,146334,53959],{"class":53649},[36,146336,53656],{"class":42},[36,146338,146339],{"class":38,"line":131},[36,146340,146341],{"class":2621},"  \u003C!-- 主导航 -->\n",[36,146343,146344,146346,146348,146350,146352,146355,146357,146359],{"class":38,"line":225},[36,146345,54492],{"class":42},[36,146347,53959],{"class":53649},[36,146349,55834],{"class":79},[36,146351,47],{"class":42},[36,146353,146354],{"class":50},"\"local-nav\"",[36,146356,146308],{"class":42},[36,146358,53959],{"class":53649},[36,146360,53656],{"class":42},[36,146362,146363],{"class":38,"line":235},[36,146364,146365],{"class":2621},"  \u003C!-- 子导航 -->\n",[36,146367,146368,146370,146372,146374,146376,146379,146381,146383],{"class":38,"line":377},[36,146369,54492],{"class":42},[36,146371,53959],{"class":53649},[36,146373,55834],{"class":79},[36,146375,47],{"class":42},[36,146377,146378],{"class":50},"\"nav-common\"",[36,146380,146308],{"class":42},[36,146382,53959],{"class":53649},[36,146384,53656],{"class":42},[36,146386,146387,146389,146391],{"class":38,"line":617},[36,146388,54133],{"class":42},[36,146390,53959],{"class":53649},[36,146392,53656],{"class":42},[19,146394,72798],{},[26,146396,146397],{"className":128891,"code":139343,"language":128893,"meta":31,"style":31},[33,146398,146399,146413,146429],{"__ignoreMap":31},[36,146400,146401,146403,146405,146407,146409,146411],{"class":38,"line":39},[36,146402,56169],{"class":53649},[36,146404,3444],{"class":42},[36,146406,105447],{"class":79},[36,146408,47],{"class":46},[36,146410,65046],{"class":50},[36,146412,139360],{"class":42},[36,146414,146415,146417,146419,146421,146423,146425,146427],{"class":38,"line":54},[36,146416,73241],{"class":62},[36,146418,2158],{"class":42},[36,146420,1906],{"class":62},[36,146422,53840],{"class":46},[36,146424,53869],{"class":62},[36,146426,132471],{"class":62},[36,146428,3711],{"class":42},[36,146430,146431],{"class":38,"line":66},[36,146432,3982],{"class":42},[19,146434,146435],{},"总代码和效果展示：",[3879,146437],{"style":128747,"src":146438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146440,71236],{},[26,146442,146443],{"className":129638,"code":146266,"language":129640,"meta":31,"style":31},[33,146444,146445,146449,146463,146467,146485,146489,146507,146511,146529,146533,146551],{"__ignoreMap":31},[36,146446,146447],{"class":38,"line":39},[36,146448,146273],{"class":2621},[36,146450,146451,146453,146455,146457,146459,146461],{"class":38,"line":54},[36,146452,3463],{"class":42},[36,146454,53959],{"class":53649},[36,146456,55834],{"class":79},[36,146458,47],{"class":42},[36,146460,94664],{"class":50},[36,146462,53656],{"class":42},[36,146464,146465],{"class":38,"line":66},[36,146466,146292],{"class":2621},[36,146468,146469,146471,146473,146475,146477,146479,146481,146483],{"class":38,"line":73},[36,146470,54492],{"class":42},[36,146472,53959],{"class":53649},[36,146474,55834],{"class":79},[36,146476,47],{"class":42},[36,146478,146305],{"class":50},[36,146480,146308],{"class":42},[36,146482,53959],{"class":53649},[36,146484,53656],{"class":42},[36,146486,146487],{"class":38,"line":86},[36,146488,146317],{"class":2621},[36,146490,146491,146493,146495,146497,146499,146501,146503,146505],{"class":38,"line":126},[36,146492,54492],{"class":42},[36,146494,53959],{"class":53649},[36,146496,55834],{"class":79},[36,146498,47],{"class":42},[36,146500,146330],{"class":50},[36,146502,146308],{"class":42},[36,146504,53959],{"class":53649},[36,146506,53656],{"class":42},[36,146508,146509],{"class":38,"line":131},[36,146510,146341],{"class":2621},[36,146512,146513,146515,146517,146519,146521,146523,146525,146527],{"class":38,"line":225},[36,146514,54492],{"class":42},[36,146516,53959],{"class":53649},[36,146518,55834],{"class":79},[36,146520,47],{"class":42},[36,146522,146354],{"class":50},[36,146524,146308],{"class":42},[36,146526,53959],{"class":53649},[36,146528,53656],{"class":42},[36,146530,146531],{"class":38,"line":235},[36,146532,146365],{"class":2621},[36,146534,146535,146537,146539,146541,146543,146545,146547,146549],{"class":38,"line":377},[36,146536,54492],{"class":42},[36,146538,53959],{"class":53649},[36,146540,55834],{"class":79},[36,146542,47],{"class":42},[36,146544,146378],{"class":50},[36,146546,146308],{"class":42},[36,146548,53959],{"class":53649},[36,146550,53656],{"class":42},[36,146552,146553,146555,146557],{"class":38,"line":617},[36,146554,54133],{"class":42},[36,146556,53959],{"class":53649},[36,146558,53656],{"class":42},[19,146560,72798],{},[26,146562,146563],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,146564,146565,146569,146583,146587],{"__ignoreMap":31},[36,146566,146567],{"class":38,"line":39},[36,146568,133002],{"class":2621},[36,146570,146571,146573,146575,146577,146579,146581],{"class":38,"line":54},[36,146572,3463],{"class":42},[36,146574,53959],{"class":53649},[36,146576,55834],{"class":79},[36,146578,47],{"class":42},[36,146580,133015],{"class":50},[36,146582,53656],{"class":42},[36,146584,146585],{"class":38,"line":66},[36,146586,133022],{"class":42},[36,146588,146589,146591,146593],{"class":38,"line":73},[36,146590,54133],{"class":42},[36,146592,53959],{"class":53649},[36,146594,53656],{"class":42},[2467,146596,140292],{},{"title":31,"searchDepth":54,"depth":54,"links":146598},[146599,146600,146604,146605,146606],{"id":145743,"depth":54,"text":145744},{"id":145775,"depth":54,"text":145776,"children":146601},[146602,146603],{"id":145779,"depth":66,"text":145780},{"id":145796,"depth":66,"text":145797},{"id":145815,"depth":54,"text":145816},{"id":145822,"depth":54,"text":145823},{"id":145909,"depth":54,"text":145910,"children":146607},[146608,146609,146610,146611,146612],{"id":145916,"depth":66,"text":145917},{"id":146044,"depth":66,"text":146045},{"id":146138,"depth":66,"text":146139},{"id":146187,"depth":66,"text":146188},{"id":146197,"depth":66,"text":146198},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145735,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146619,"title":146620,"body":146621,"description":2493,"extension":2494,"meta":147848,"navigation":69,"path":147849,"seo":147850,"stem":147851,"__hash__":147852},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146622,"toc":147826},[146623,146626,146630,146634,146637,146640,146644,146649,146652,146655,146658,146661,146664,146721,146724,146729,146732,146735,146739,146750,146754,146757,146760,146767,146772,146776,146779,146785,146788,146792,146795,146802,146805,146808,146815,146818,146825,146828,146831,146838,146841,146844,146846,146863,146867,146870,146873,146876,146880,146883,146886,146889,146892,146895,146898,146900,146903,146906,146968,146971,147081,147088,147094,147097,147100,147104,147107,147111,147116,147119,147126,147129,147135,147140,147143,147146,147149,147152,147155,147158,147161,147164,147220,147222,147248,147252,147255,147258,147261,147269,147272,147275,147279,147335,147338,147342,147348,147359,147362,147367,147370,147373,147379,147382,147385,147388,147391,147394,147397,147400,147403,147428,147434,147437,147440,147443,147446,147449,147452,147457,147460,147463,147466,147474,147477,147484,147487,147490,147492,147516,147518,147521,147524,147527,147530,147533,147536,147539,147573,147576,147579,147613,147620,147623,147626,147629,147632,147635,147638,147645,147648,147651,147654,147657,147664,147667,147670,147677,147680,147683,147687,147690,147693,147696,147699,147702,147705,147708,147711,147713,147737,147739,147763,147767,147778,147781,147784,147787,147790,147793,147796,147799,147802,147805,147808,147811,147814,147817,147820,147823],[10,146624,146620],{"id":146625},"_21-移动端布局实战下篇",[14,146627,146629],{"id":146628},"_211-rem适配布局","21.1 rem适配布局",[1752,146631,146633],{"id":146632},"_2111-rem单位","21.1.1 rem单位",[3879,146635],{"style":128747,"src":146636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146638,146639],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1752,146641,146643],{"id":146642},"_2112-媒体查询","21.1.2 媒体查询",[650,146645,146646],{},[653,146647,146648],{},"参数介绍",[3879,146650],{"style":128747,"src":146651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3879,146653],{"style":128747,"src":146654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3879,146656],{"style":128747,"src":146657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3879,146659],{"style":128747,"src":146660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3879,146662],{"style":128747,"src":146663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,146665,146667],{"className":128891,"code":146666,"language":128893,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,146668,146669,146674,146693,146700,146713,146717],{"__ignoreMap":31},[36,146670,146671],{"class":38,"line":39},[36,146672,146673],{"class":2621},"\u002F* 媒体查询 *\u002F\n",[36,146675,146676,146679,146681,146684,146686,146689,146691],{"class":38,"line":54},[36,146677,146678],{"class":46},"@media",[36,146680,4066],{"class":42},[36,146682,146683],{"class":62},"max-width",[36,146685,2158],{"class":42},[36,146687,146688],{"class":62},"768",[36,146690,53840],{"class":46},[36,146692,14819],{"class":42},[36,146694,146695,146698],{"class":38,"line":66},[36,146696,146697],{"class":79},"  .container",[36,146699,2150],{"class":42},[36,146701,146702,146705,146707,146709,146711],{"class":38,"line":73},[36,146703,146704],{"class":62},"    width",[36,146706,2158],{"class":42},[36,146708,1070],{"class":62},[36,146710,2884],{"class":46},[36,146712,3711],{"class":42},[36,146714,146715],{"class":38,"line":86},[36,146716,129687],{"class":42},[36,146718,146719],{"class":38,"line":126},[36,146720,3982],{"class":42},[19,146722,146723],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[650,146725,146726],{"start":54},[653,146727,146728],{},"引入资源",[3879,146730],{"style":128747,"src":146731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146733,146734],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1752,146736,146738],{"id":146737},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3557,146740,146741,146744,146747],{},[653,146742,146743],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[653,146745,146746],{},"媒体查询可以根据不同设备宽度来修改样式",[653,146748,146749],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146751,146753],{"id":146752},"_212-less基础","21.2 Less基础",[19,146755,146756],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146758,146759],{},"Less可以解决该问题，它是css的扩展语言",[19,146761,146762,146763],{},"Less中文网址： ",[2796,146764,146765],{"href":146765,"rel":146766},"http:\u002F\u002Flesscss.cn\u002F",[26235],[19,146768,146769],{},[667,146770,146771],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1752,146773,146775],{"id":146774},"_2121-less安装","21.2.1 less安装",[19,146777,146778],{},"如果使用vscode，则无需进行下方安装步骤",[19,146780,146781],{},[2796,146782,146783],{"href":146783,"rel":146784},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26235],[3879,146786],{"style":128747,"src":146787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1752,146789,146791],{"id":146790},"_2122-less使用","21.2.2 less使用",[19,146793,146794],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[650,146796,146797],{},[653,146798,146799],{},[667,146800,146801],{},"Less 变量",[3879,146803],{"style":128747,"src":146804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3879,146806],{"style":128747,"src":146807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[650,146809,146810],{"start":54},[653,146811,146812],{},[667,146813,146814],{},"Less 编译",[3879,146816],{"style":128747,"src":146817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[650,146819,146820],{"start":66},[653,146821,146822],{},[667,146823,146824],{},"Less 嵌套",[3879,146826],{"style":128747,"src":146827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3879,146829],{"style":128747,"src":146830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[650,146832,146833],{"start":73},[653,146834,146835],{},[667,146836,146837],{},"Less 运算",[3879,146839],{"style":128747,"src":146840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146842,146843],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146845,2595],{},[3557,146847,146848,146851,146854,146857,146860],{},[653,146849,146850],{},"乘号（*）和除号（\u002F）的写法",[653,146852,146853],{},"运算符中间左右有个空格隔开 1px + 5",[653,146855,146856],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[653,146858,146859],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[653,146861,146862],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146864,146866],{"id":146865},"_213-rem-适配方案","21.3 rem 适配方案",[19,146868,146869],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146871,146872],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3879,146874],{"style":128747,"src":146875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1752,146877,146879],{"id":146878},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146881,146882],{},"rem + 媒体查询 + less 技术",[3879,146884],{"style":128747,"src":146885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146887,146888],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146890,146891],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3879,146893],{"style":128747,"src":146894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146896,146897],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146899,17010],{},[3879,146901],{"style":128747,"src":146902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146904,146905],{},"index.html:",[26,146907,146909],{"className":128891,"code":146908,"language":128893,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,146910,146911,146916,146922,146938,146942,146948,146964],{"__ignoreMap":31},[36,146912,146913],{"class":38,"line":39},[36,146914,146915],{"class":2621},"\u002F* rem 适配方案 *\u002F\n",[36,146917,146918,146920],{"class":38,"line":54},[36,146919,52984],{"class":53649},[36,146921,2150],{"class":42},[36,146923,146924,146926,146928,146931,146933,146935],{"class":38,"line":66},[36,146925,72971],{"class":62},[36,146927,2158],{"class":42},[36,146929,146930],{"class":62},"62.5",[36,146932,2884],{"class":46},[36,146934,132754],{"class":42},[36,146936,146937],{"class":2621},"\u002F* 1rem = 10px *\u002F\n",[36,146939,146940],{"class":38,"line":73},[36,146941,3982],{"class":42},[36,146943,146944,146946],{"class":38,"line":86},[36,146945,132739],{"class":79},[36,146947,2150],{"class":42},[36,146949,146950,146952,146954,146956,146959,146961],{"class":38,"line":126},[36,146951,72913],{"class":62},[36,146953,2158],{"class":42},[36,146955,3002],{"class":62},[36,146957,146958],{"class":46},"rem",[36,146960,132754],{"class":42},[36,146962,146963],{"class":2621},"\u002F* 100px *\u002F\n",[36,146965,146966],{"class":38,"line":131},[36,146967,3982],{"class":42},[19,146969,146970],{},"common.less",[26,146972,146974],{"className":128891,"code":146973,"language":128893,"meta":31,"style":31},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,146975,146976,146982,146997,147001,147007,147021,147025,147029,147033,147039,147053,147057,147063,147077],{"__ignoreMap":31},[36,146977,146978,146980],{"class":38,"line":39},[36,146979,52984],{"class":53649},[36,146981,2150],{"class":42},[36,146983,146984,146986,146988,146990,146992,146994],{"class":38,"line":54},[36,146985,72971],{"class":62},[36,146987,2158],{"class":42},[36,146989,146930],{"class":62},[36,146991,2884],{"class":46},[36,146993,28437],{"class":42},[36,146995,146996],{"class":2621},"\u002F* 10px *\u002F\n",[36,146998,146999],{"class":38,"line":66},[36,147000,3982],{"class":42},[36,147002,147003,147005],{"class":38,"line":73},[36,147004,53959],{"class":53649},[36,147006,2150],{"class":42},[36,147008,147009,147011,147013,147015,147017,147019],{"class":38,"line":86},[36,147010,72913],{"class":62},[36,147012,2158],{"class":42},[36,147014,3002],{"class":62},[36,147016,146958],{"class":46},[36,147018,28437],{"class":42},[36,147020,146963],{"class":2621},[36,147022,147023],{"class":38,"line":126},[36,147024,3982],{"class":42},[36,147026,147027],{"class":38,"line":131},[36,147028,138352],{"class":42},[36,147030,147031],{"class":38,"line":225},[36,147032,146915],{"class":2621},[36,147034,147035,147037],{"class":38,"line":235},[36,147036,52984],{"class":53649},[36,147038,2150],{"class":42},[36,147040,147041,147043,147045,147047,147049,147051],{"class":38,"line":377},[36,147042,72971],{"class":62},[36,147044,2158],{"class":42},[36,147046,146930],{"class":62},[36,147048,2884],{"class":46},[36,147050,132754],{"class":42},[36,147052,146937],{"class":2621},[36,147054,147055],{"class":38,"line":617},[36,147056,3982],{"class":42},[36,147058,147059,147061],{"class":38,"line":643},[36,147060,132739],{"class":79},[36,147062,2150],{"class":42},[36,147064,147065,147067,147069,147071,147073,147075],{"class":38,"line":921},[36,147066,72913],{"class":62},[36,147068,2158],{"class":42},[36,147070,3002],{"class":62},[36,147072,146958],{"class":46},[36,147074,132754],{"class":42},[36,147076,146963],{"class":2621},[36,147078,147079],{"class":38,"line":934},[36,147080,3982],{"class":42},[19,147082,147083,147084,147087],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25923,147085,147086],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,147089,147092],{"className":147090,"code":147091,"language":7570},[7568],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,147093,147091],{"__ignoreMap":31},[19,147095,147096],{},"less保存时会自动变成.css文件",[19,147098,147099],{},"好好搞懂上述代码写法",[1752,147101,147103],{"id":147102},"_2132-样式导入样式","21.3.2 样式导入样式",[3879,147105],{"style":128747,"src":147106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1752,147108,147110],{"id":147109},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[650,147112,147113],{},[653,147114,147115],{},"准备工作",[3879,147117],{"style":128747,"src":147118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147120,147121,147122],{},"github地址：",[2796,147123,147124],{"href":147124,"rel":147125},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26235],[19,147127,147128],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147130,147131,147132],{},"js文件引入到index.html中使用的是",[33,147133,147134],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[650,147136,147137],{"start":54},[653,147138,147139],{},"vscode插件",[3879,147141],{"style":128747,"src":147142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147144,147145],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147147,147148],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3879,147150],{"style":128747,"src":147151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147153,147154],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3879,147156],{"style":128747,"src":147157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147159,147160],{},"修改成75就可以，alt+z为快捷键",[19,147162,147163],{},"index.css：",[26,147165,147166],{"className":128891,"code":146908,"language":128893,"meta":31,"style":31},[33,147167,147168,147172,147178,147192,147196,147202,147216],{"__ignoreMap":31},[36,147169,147170],{"class":38,"line":39},[36,147171,146915],{"class":2621},[36,147173,147174,147176],{"class":38,"line":54},[36,147175,52984],{"class":53649},[36,147177,2150],{"class":42},[36,147179,147180,147182,147184,147186,147188,147190],{"class":38,"line":66},[36,147181,72971],{"class":62},[36,147183,2158],{"class":42},[36,147185,146930],{"class":62},[36,147187,2884],{"class":46},[36,147189,132754],{"class":42},[36,147191,146937],{"class":2621},[36,147193,147194],{"class":38,"line":73},[36,147195,3982],{"class":42},[36,147197,147198,147200],{"class":38,"line":86},[36,147199,132739],{"class":79},[36,147201,2150],{"class":42},[36,147203,147204,147206,147208,147210,147212,147214],{"class":38,"line":126},[36,147205,72913],{"class":62},[36,147207,2158],{"class":42},[36,147209,3002],{"class":62},[36,147211,146958],{"class":46},[36,147213,132754],{"class":42},[36,147215,146963],{"class":2621},[36,147217,147218],{"class":38,"line":131},[36,147219,3982],{"class":42},[19,147221,146905],{},[26,147223,147224],{"className":128891,"code":129295,"language":128893,"meta":31,"style":31},[33,147225,147226,147232,147244],{"__ignoreMap":31},[36,147227,147228,147230],{"class":38,"line":39},[36,147229,54148],{"class":53649},[36,147231,2150],{"class":42},[36,147233,147234,147236,147238,147240,147242],{"class":38,"line":54},[36,147235,72971],{"class":62},[36,147237,2158],{"class":42},[36,147239,3156],{"class":62},[36,147241,53840],{"class":46},[36,147243,3711],{"class":42},[36,147245,147246],{"class":38,"line":66},[36,147247,3982],{"class":42},[14,147249,147251],{"id":147250},"_214-响应式开发","21.4 响应式开发",[19,147253,147254],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3879,147256],{"style":128747,"src":147257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147259,147260],{},"做法：",[3557,147262,147263,147266],{},[653,147264,147265],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[653,147267,147268],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3879,147270],{"style":128747,"src":147271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147273,147274],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1752,147276,147278],{"id":147277},"_2141-简单代码示范","21.4.1 简单代码示范",[26,147280,147281],{"className":128891,"code":146908,"language":128893,"meta":31,"style":31},[33,147282,147283,147287,147293,147307,147311,147317,147331],{"__ignoreMap":31},[36,147284,147285],{"class":38,"line":39},[36,147286,146915],{"class":2621},[36,147288,147289,147291],{"class":38,"line":54},[36,147290,52984],{"class":53649},[36,147292,2150],{"class":42},[36,147294,147295,147297,147299,147301,147303,147305],{"class":38,"line":66},[36,147296,72971],{"class":62},[36,147298,2158],{"class":42},[36,147300,146930],{"class":62},[36,147302,2884],{"class":46},[36,147304,132754],{"class":42},[36,147306,146937],{"class":2621},[36,147308,147309],{"class":38,"line":73},[36,147310,3982],{"class":42},[36,147312,147313,147315],{"class":38,"line":86},[36,147314,132739],{"class":79},[36,147316,2150],{"class":42},[36,147318,147319,147321,147323,147325,147327,147329],{"class":38,"line":126},[36,147320,72913],{"class":62},[36,147322,2158],{"class":42},[36,147324,3002],{"class":62},[36,147326,146958],{"class":46},[36,147328,132754],{"class":42},[36,147330,146963],{"class":2621},[36,147332,147333],{"class":38,"line":131},[36,147334,3982],{"class":42},[19,147336,147337],{},"父盒子一般命名为container",[1752,147339,147341],{"id":147340},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147343,147344,147345],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[667,147346,147347],{},"使得 Web 开发更加快捷",[3557,147349,147350],{},[653,147351,147352,147353],{},"官网：",[667,147354,147355],{},[2796,147356,147357],{"href":147357,"rel":147358},"http:\u002F\u002Fgetbootstrap.com\u002F",[26235],[19,147360,147361],{},"可以直接去官网拿现成的东西",[650,147363,147364],{},[653,147365,147366],{},"Bootstrap的使用",[19,147368,147369],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147371,147372],{},"Bootstrap 使用四步曲：",[19,147374,147375,147378],{},[667,147376,147377],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3879,147380],{"style":128747,"src":147381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147383,147384],{},"打开Bootstrap官网，然后下载",[3879,147386],{"style":128747,"src":147387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3879,147389],{"style":128747,"src":147390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147392,147393],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147395,147396],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147398,147399],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3879,147401],{"style":128747,"src":147402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,147404,147406],{"className":128891,"code":147405,"language":128893,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,147407,147408,147414,147424],{"__ignoreMap":31},[36,147409,147410,147412],{"class":38,"line":39},[36,147411,129182],{"class":79},[36,147413,2150],{"class":42},[36,147415,147416,147418,147420,147422],{"class":38,"line":54},[36,147417,73250],{"class":62},[36,147419,2158],{"class":42},[36,147421,59769],{"class":62},[36,147423,3711],{"class":42},[36,147425,147426],{"class":38,"line":66},[36,147427,3982],{"class":42},[19,147429,147430,147433],{},[33,147431,147432],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3879,147435],{"style":128747,"src":147436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3879,147438],{"style":128747,"src":147439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3879,147441],{"style":128747,"src":147442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147444,147445],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3879,147447],{"style":128747,"src":147448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147450,147451],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[650,147453,147454],{"start":54},[653,147455,147456],{},"布局容器",[3879,147458],{"style":128747,"src":147459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147461,147462],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147464,147465],{},"container-fluid用于移动式布局比较方便",[650,147467,147468],{"start":66},[653,147469,147470,147471],{},"bootstrap ",[667,147472,147473],{},"栅格系统原理",[3879,147475],{"style":128747,"src":147476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[650,147478,147479],{"start":73},[653,147480,147481],{},[667,147482,147483],{},"栅格选项参数",[3879,147485],{"style":128747,"src":147486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147488,147489],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147491,17010],{},[26,147493,147494],{"className":128891,"code":147405,"language":128893,"meta":31,"style":31},[33,147495,147496,147502,147512],{"__ignoreMap":31},[36,147497,147498,147500],{"class":38,"line":39},[36,147499,129182],{"class":79},[36,147501,2150],{"class":42},[36,147503,147504,147506,147508,147510],{"class":38,"line":54},[36,147505,73250],{"class":62},[36,147507,2158],{"class":42},[36,147509,59769],{"class":62},[36,147511,3711],{"class":42},[36,147513,147514],{"class":38,"line":66},[36,147515,3982],{"class":42},[19,147517,137934],{},[3879,147519],{"style":128747,"src":147520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147522,147523],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147525,147526],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147528,147529],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147531,147532],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147534,147535],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147537,147538],{},"汇总展示说明：",[26,147540,147541],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,147542,147543,147547,147561,147565],{"__ignoreMap":31},[36,147544,147545],{"class":38,"line":39},[36,147546,133002],{"class":2621},[36,147548,147549,147551,147553,147555,147557,147559],{"class":38,"line":54},[36,147550,3463],{"class":42},[36,147552,53959],{"class":53649},[36,147554,55834],{"class":79},[36,147556,47],{"class":42},[36,147558,133015],{"class":50},[36,147560,53656],{"class":42},[36,147562,147563],{"class":38,"line":66},[36,147564,133022],{"class":42},[36,147566,147567,147569,147571],{"class":38,"line":73},[36,147568,54133],{"class":42},[36,147570,53959],{"class":53649},[36,147572,53656],{"class":42},[3879,147574],{"style":128747,"src":147575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147577,147578],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,147580,147581],{"className":129638,"code":132995,"language":129640,"meta":31,"style":31},[33,147582,147583,147587,147601,147605],{"__ignoreMap":31},[36,147584,147585],{"class":38,"line":39},[36,147586,133002],{"class":2621},[36,147588,147589,147591,147593,147595,147597,147599],{"class":38,"line":54},[36,147590,3463],{"class":42},[36,147592,53959],{"class":53649},[36,147594,55834],{"class":79},[36,147596,47],{"class":42},[36,147598,133015],{"class":50},[36,147600,53656],{"class":42},[36,147602,147603],{"class":38,"line":66},[36,147604,133022],{"class":42},[36,147606,147607,147609,147611],{"class":38,"line":73},[36,147608,54133],{"class":42},[36,147610,53959],{"class":53649},[36,147612,53656],{"class":42},[650,147614,147615],{"start":86},[653,147616,147617],{},[667,147618,147619],{},"列嵌套",[3879,147621],{"style":128747,"src":147622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147624,147625],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147627,147628],{},"没加row内部这样：",[3879,147630],{"style":128747,"src":147631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147633,147634],{},"加上row之后内部为：",[3879,147636],{"style":128747,"src":147637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[650,147639,147640],{"start":126},[653,147641,147642],{},[667,147643,147644],{},"列偏移",[3879,147646],{"style":128747,"src":147647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147649,147650],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147652,147653],{},"要加偏移量，即偏移份数",[19,147655,147656],{},"偏移的份数=12-两个盒子的份数",[650,147658,147659],{"start":131},[653,147660,147661],{},[667,147662,147663],{},"列排序",[3879,147665],{"style":128747,"src":147666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147668,147669],{},"pull拉左；push推右",[650,147671,147672],{"start":225},[653,147673,147674],{},[667,147675,147676],{},"响应式工具",[3879,147678],{"style":128747,"src":147679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147681,147682],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1752,147684,147686],{"id":147685},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147688,147689],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147691,147692],{},"ul {",[19,147694,147695],{},"list-style: none;",[19,147697,147698],{},"margin:0;",[19,147700,147701],{},"padding:0; }",[3879,147703],{"style":128747,"src":147704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3879,147706],{"style":128747,"src":147707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147709,147710],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147712,71236],{},[26,147714,147715],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,147716,147717,147723,147733],{"__ignoreMap":31},[36,147718,147719,147721],{"class":38,"line":39},[36,147720,132739],{"class":79},[36,147722,2150],{"class":42},[36,147724,147725,147727,147729,147731],{"class":38,"line":54},[36,147726,133371],{"class":62},[36,147728,2158],{"class":42},[36,147730,26106],{"class":62},[36,147732,3711],{"class":42},[36,147734,147735],{"class":38,"line":66},[36,147736,3982],{"class":42},[19,147738,72798],{},[26,147740,147741],{"className":128891,"code":141561,"language":128893,"meta":31,"style":31},[33,147742,147743,147749,147759],{"__ignoreMap":31},[36,147744,147745,147747],{"class":38,"line":39},[36,147746,132739],{"class":79},[36,147748,2150],{"class":42},[36,147750,147751,147753,147755,147757],{"class":38,"line":54},[36,147752,133371],{"class":62},[36,147754,2158],{"class":42},[36,147756,26106],{"class":62},[36,147758,3711],{"class":42},[36,147760,147761],{"class":38,"line":66},[36,147762,3982],{"class":42},[14,147764,147766],{"id":147765},"_215-swiper-插件使用","21.5 swiper 插件使用",[3557,147768,147769,147772,147775],{},[653,147770,147771],{},"下载需要的css和js文件html页面中 引入相关文件",[653,147773,147774],{},"官网找到类似案例，复制html结构，css样式 js 语法",[653,147776,147777],{},"根据需求定制修改模块",[3879,147779],{"style":128747,"src":147780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147782,147783],{},"解压后将这两部分放到项目中",[3879,147785],{"style":128747,"src":147786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147788,147789],{},"这个插件可以帮助我们实现轮播图效果",[19,147791,147792],{},"用法：",[3879,147794],{"style":128747,"src":147795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147797,147798],{},"找到自己喜欢的",[3879,147800],{"style":128747,"src":147801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147803,147804],{},"右键，查看网页源代码",[3879,147806],{"style":128747,"src":147807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147809,147810],{},"复制人家的结构内容",[19,147812,147813],{},"然后去看API文档：",[3879,147815],{"style":128747,"src":147816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147818,147819],{},"可以看看如何修改样式",[19,147821,147822],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2467,147824,147825],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":147827},[147828,147833,147837,147842,147847],{"id":146628,"depth":54,"text":146629,"children":147829},[147830,147831,147832],{"id":146632,"depth":66,"text":146633},{"id":146642,"depth":66,"text":146643},{"id":146737,"depth":66,"text":146738},{"id":146752,"depth":54,"text":146753,"children":147834},[147835,147836],{"id":146774,"depth":66,"text":146775},{"id":146790,"depth":66,"text":146791},{"id":146865,"depth":54,"text":146866,"children":147838},[147839,147840,147841],{"id":146878,"depth":66,"text":146879},{"id":147102,"depth":66,"text":147103},{"id":147109,"depth":66,"text":147110},{"id":147250,"depth":54,"text":147251,"children":147843},[147844,147845,147846],{"id":147277,"depth":66,"text":147278},{"id":147340,"depth":66,"text":147341},{"id":147685,"depth":66,"text":147686},{"id":147765,"depth":54,"text":147766},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146620,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147854,"title":147855,"body":147856,"description":2493,"extension":2494,"meta":148076,"navigation":69,"path":148077,"seo":148078,"stem":148079,"__hash__":148080},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147857,"toc":148072},[147858,147861,147865,147868,147883,147888,147891,147896,147931,147936,147948,147953,147966,147971,147988,147993,148013,148018,148036,148039,148042,148045,148048,148052,148055,148058,148061,148064,148067,148070],[10,147859,147855],{"id":147860},"_22-代码提交与新型相对单位",[14,147862,147864],{"id":147863},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147866,147867],{},"法1：",[650,147869,147870,147877,147880],{},[653,147871,147872,147873],{},"登录网站注册：",[2796,147874,147875],{"href":147875,"rel":147876},"https:\u002F\u002Fgitee.com\u002F",[26235],[653,147878,147879],{},"码云创建新的仓库",[653,147881,147882],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3557,147884,147885],{},[653,147886,147887],{},"在网站根目录右键-- Git Bash Here",[3879,147889],{"style":128747,"src":147890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3557,147892,147893],{},[653,147894,147895],{},"如果是第一次利用git提交，请配置好全局选项",[26,147897,147899],{"className":119635,"code":147898,"language":119637,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,147900,147901,147917],{"__ignoreMap":31},[36,147902,147903,147906,147908,147911,147914],{"class":38,"line":39},[36,147904,147905],{"class":79},"git",[36,147907,122058],{"class":50},[36,147909,147910],{"class":62}," --global",[36,147912,147913],{"class":50}," user.name",[36,147915,147916],{"class":50}," \"你的名字\"\n",[36,147918,147919,147921,147923,147925,147928],{"class":38,"line":54},[36,147920,147905],{"class":79},[36,147922,122058],{"class":50},[36,147924,147910],{"class":62},[36,147926,147927],{"class":50}," user.email",[36,147929,147930],{"class":50}," \"你的邮箱\"\n",[3557,147932,147933],{},[653,147934,147935],{},"初始化仓库",[26,147937,147939],{"className":119635,"code":147938,"language":119637,"meta":31,"style":31},"git init\n",[33,147940,147941],{"__ignoreMap":31},[36,147942,147943,147945],{"class":38,"line":39},[36,147944,147905],{"class":79},[36,147946,147947],{"class":50}," init\n",[3557,147949,147950],{},[653,147951,147952],{},"把本地文件放到暂存区",[26,147954,147956],{"className":119635,"code":147955,"language":119637,"meta":31,"style":31},"git add .\n",[33,147957,147958],{"__ignoreMap":31},[36,147959,147960,147962,147964],{"class":38,"line":39},[36,147961,147905],{"class":79},[36,147963,1872],{"class":50},[36,147965,31110],{"class":50},[3557,147967,147968],{},[653,147969,147970],{},"把本地文件放到本地仓库里面",[26,147972,147974],{"className":119635,"code":147973,"language":119637,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,147975,147976],{"__ignoreMap":31},[36,147977,147978,147980,147983,147985],{"class":38,"line":39},[36,147979,147905],{"class":79},[36,147981,147982],{"class":50}," commit",[36,147984,103223],{"class":62},[36,147986,147987],{"class":50}," \"first commit\"\n",[3557,147989,147990],{},[653,147991,147992],{},"链接远程仓库",[26,147994,147996],{"className":119635,"code":147995,"language":119637,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,147997,147998],{"__ignoreMap":31},[36,147999,148000,148002,148005,148007,148010],{"class":38,"line":39},[36,148001,147905],{"class":79},[36,148003,148004],{"class":50}," remote",[36,148006,1872],{"class":50},[36,148008,148009],{"class":50}," origin",[36,148011,148012],{"class":50}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3557,148014,148015],{},[653,148016,148017],{},"把本地仓库的文件推送到远程仓库 push",[26,148019,148021],{"className":119635,"code":148020,"language":119637,"meta":31,"style":31},"git push -u origin master\n",[33,148022,148023],{"__ignoreMap":31},[36,148024,148025,148027,148029,148031,148033],{"class":38,"line":39},[36,148026,147905],{"class":79},[36,148028,31385],{"class":50},[36,148030,30660],{"class":62},[36,148032,148009],{"class":50},[36,148034,148035],{"class":50}," master\n",[3879,148037],{"style":128747,"src":148038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148040,148041],{},"上方方法暂未实现，后边学完git后在整",[19,148043,148044],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3879,148046],{"style":128747,"src":148047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148049,148051],{"id":148050},"_222-新型相对单位","22.2 新型相对单位",[3879,148053],{"style":128747,"src":148054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3879,148056],{"style":128747,"src":148057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148059,148060],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148062,148063],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3879,148065],{"style":128747,"src":148066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148068,148069],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2467,148071,26328],{},{"title":31,"searchDepth":54,"depth":54,"links":148073},[148074,148075],{"id":147863,"depth":54,"text":147864},{"id":148050,"depth":54,"text":148051},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147855,"description":2493},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148082,"title":148083,"body":148084,"description":148088,"extension":2494,"meta":148089,"navigation":69,"path":148090,"seo":148091,"stem":148092,"__hash__":148093},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148085,"toc":148086},[],{"title":31,"searchDepth":54,"depth":54,"links":148087},[],"自己正经开始学编程的第一门语言！",{"category":95180},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148083,"description":148088},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148095,"title":148096,"body":148097,"description":2493,"extension":2494,"meta":149241,"navigation":69,"path":149242,"seo":149243,"stem":149244,"__hash__":149245},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148098,"toc":149217},[148099,148102,148106,148109,148112,148137,148140,148146,148150,148153,148180,148183,148223,148226,148238,148241,148247,148251,148255,148282,148299,148306,148310,148313,148339,148342,148346,148349,148389,148392,148409,148415,148419,148424,148468,148471,148489,148492,148560,148564,148571,148574,148589,148592,148601,148604,148615,148618,148627,148630,148647,148650,148665,148669,148673,148676,148678,148698,148702,148705,148708,148719,148722,148728,148732,148738,148765,148768,148780,148783,148794,148797,148803,148807,148813,148863,148866,148905,148908,148941,148944,148978,148982,148985,149005,149008,149044,149047,149060,149064,149068,149074,149077,149090,149094,149097,149103,149106,149110,149113,149116,149165,149169,149185,149191,149198,149204,149214],[10,148100,148096],{"id":148101},"_1-python环境与第一个程序",[14,148103,148105],{"id":148104},"_11-什么是python","1.1 什么是Python",[19,148107,148108],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148110,148111],{},"理解 Python 时抓住三个关键词：",[650,148113,148114,148117,148120],{},[653,148115,148116],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[653,148118,148119],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[653,148121,148122,148123,2031,148126,2031,148129,2031,148132,2031,148134,676],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,148124,148125],{},"os",[33,148127,148128],{},"sys",[33,148130,148131],{},"json",[33,148133,60208],{},[33,148135,148136],{},"datetime",[19,148138,148139],{},"Python 程序的运行链路：",[26,148141,148144],{"className":148142,"code":148143,"language":7570,"meta":31},[7568],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,148145,148143],{"__ignoreMap":31},[14,148147,148149],{"id":148148},"_12-python解释器","1.2 Python解释器",[19,148151,148152],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,148154,148156],{"className":26192,"code":148155,"language":26194,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,148157,148158,148164,148170,148175],{"__ignoreMap":31},[36,148159,148160,148162],{"class":38,"line":39},[36,148161,30],{"class":79},[36,148163,28663],{"class":62},[36,148165,148166,148168],{"class":38,"line":54},[36,148167,103220],{"class":79},[36,148169,28663],{"class":62},[36,148171,148172],{"class":38,"line":66},[36,148173,148174],{"class":79},"python\n",[36,148176,148177],{"class":38,"line":73},[36,148178,148179],{"class":79},"python3\n",[19,148181,148182],{},"进入交互模式后，可以直接输入表达式：",[26,148184,148186],{"className":28,"code":148185,"language":30,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,148187,148188,148199,148204,148218],{"__ignoreMap":31},[36,148189,148190,148193,148195,148197],{"class":38,"line":39},[36,148191,148192],{"class":46},">>>",[36,148194,27489],{"class":62},[36,148196,47915],{"class":46},[36,148198,50072],{"class":62},[36,148200,148201],{"class":38,"line":54},[36,148202,148203],{"class":62},"3\n",[36,148205,148206,148208,148211,148213,148216],{"class":38,"line":66},[36,148207,148192],{"class":46},[36,148209,148210],{"class":62}," print",[36,148212,92],{"class":42},[36,148214,148215],{"class":50},"\"hello python\"",[36,148217,123],{"class":42},[36,148219,148220],{"class":38,"line":73},[36,148221,148222],{"class":42},"hello python\n",[19,148224,148225],{},"退出交互模式：",[26,148227,148229],{"className":28,"code":148228,"language":30,"meta":31,"style":31},"exit()\n",[33,148230,148231],{"__ignoreMap":31},[36,148232,148233,148236],{"class":38,"line":39},[36,148234,148235],{"class":62},"exit",[36,148237,4369],{"class":42},[19,148239,148240],{},"或使用快捷键：",[26,148242,148245],{"className":148243,"code":148244,"language":7570,"meta":31},[7568],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,148246,148244],{"__ignoreMap":31},[14,148248,148250],{"id":148249},"_13-安装python","1.3 安装Python",[1752,148252,148254],{"id":148253},"_131-windows安装","1.3.1 Windows安装",[650,148256,148257,148264,148267,148273,148279],{},[653,148258,148259,148260],{},"打开 Python 官网：",[2796,148261,148262],{"href":148262,"rel":148263},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26235],[653,148265,148266],{},"下载 Windows Installer。",[653,148268,148269,148270,676],{},"安装时勾选 ",[33,148271,148272],{},"Add Python to PATH",[653,148274,148275,148276,676],{},"点击 ",[33,148277,148278],{},"Install Now",[653,148280,148281],{},"安装完成后打开命令提示符验证：",[26,148283,148285],{"className":26192,"code":148284,"language":26194,"meta":31,"style":31},"python --version\npip --version\n",[33,148286,148287,148293],{"__ignoreMap":31},[36,148288,148289,148291],{"class":38,"line":39},[36,148290,30],{"class":79},[36,148292,28663],{"class":62},[36,148294,148295,148297],{"class":38,"line":54},[36,148296,26201],{"class":79},[36,148298,28663],{"class":62},[19,148300,148301,148302,148305],{},"如果提示 ",[33,148303,148304],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1752,148307,148309],{"id":148308},"_132-macos安装","1.3.2 macOS安装",[19,148311,148312],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,148314,148316],{"className":26192,"code":148315,"language":26194,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,148317,148318,148327,148333],{"__ignoreMap":31},[36,148319,148320,148323,148325],{"class":38,"line":39},[36,148321,148322],{"class":79},"brew",[36,148324,26204],{"class":50},[36,148326,126657],{"class":50},[36,148328,148329,148331],{"class":38,"line":54},[36,148330,103220],{"class":79},[36,148332,28663],{"class":62},[36,148334,148335,148337],{"class":38,"line":66},[36,148336,122039],{"class":79},[36,148338,28663],{"class":62},[19,148340,148341],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1752,148343,148345],{"id":148344},"_133-linux安装","1.3.3 Linux安装",[19,148347,148348],{},"Ubuntu\u002FDebian：",[26,148350,148352],{"className":26192,"code":148351,"language":26194,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,148353,148354,148362,148377,148383],{"__ignoreMap":31},[36,148355,148356,148358,148360],{"class":38,"line":39},[36,148357,26947],{"class":79},[36,148359,119656],{"class":50},[36,148361,28612],{"class":50},[36,148363,148364,148366,148368,148370,148372,148374],{"class":38,"line":54},[36,148365,26947],{"class":79},[36,148367,119656],{"class":50},[36,148369,26204],{"class":50},[36,148371,106742],{"class":50},[36,148373,103139],{"class":50},[36,148375,148376],{"class":50}," python3-venv\n",[36,148378,148379,148381],{"class":38,"line":66},[36,148380,103220],{"class":79},[36,148382,28663],{"class":62},[36,148384,148385,148387],{"class":38,"line":73},[36,148386,122039],{"class":79},[36,148388,28663],{"class":62},[19,148390,148391],{},"Fedora：",[26,148393,148395],{"className":26192,"code":148394,"language":26194,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,148396,148397],{"__ignoreMap":31},[36,148398,148399,148401,148403,148405,148407],{"class":38,"line":39},[36,148400,26947],{"class":79},[36,148402,28685],{"class":50},[36,148404,26204],{"class":50},[36,148406,106742],{"class":50},[36,148408,122104],{"class":50},[19,148410,148411,148412,148414],{},"Linux 上通常使用 ",[33,148413,103220],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148416,148418],{"id":148417},"_14-pip包管理器","1.4 pip包管理器",[19,148420,148421,148423],{},[33,148422,26201],{}," 用来安装第三方库。",[26,148425,148427],{"className":26192,"code":148426,"language":26194,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,148428,148429,148438,148447,148455,148461],{"__ignoreMap":31},[36,148430,148431,148433,148435],{"class":38,"line":39},[36,148432,26201],{"class":79},[36,148434,26204],{"class":50},[36,148436,148437],{"class":50}," requests\n",[36,148439,148440,148442,148445],{"class":38,"line":54},[36,148441,26201],{"class":79},[36,148443,148444],{"class":50}," uninstall",[36,148446,148437],{"class":50},[36,148448,148449,148451,148453],{"class":38,"line":66},[36,148450,26201],{"class":79},[36,148452,119913],{"class":50},[36,148454,148437],{"class":50},[36,148456,148457,148459],{"class":38,"line":73},[36,148458,26201],{"class":79},[36,148460,121294],{"class":50},[36,148462,148463,148465],{"class":38,"line":86},[36,148464,26201],{"class":79},[36,148466,148467],{"class":50}," freeze\n",[19,148469,148470],{},"国内网络较慢时可以临时使用镜像：",[26,148472,148474],{"className":26192,"code":148473,"language":26194,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,148475,148476],{"__ignoreMap":31},[36,148477,148478,148480,148482,148485,148487],{"class":38,"line":39},[36,148479,26201],{"class":79},[36,148481,26204],{"class":50},[36,148483,148484],{"class":50}," requests",[36,148486,28800],{"class":62},[36,148488,122067],{"class":50},[19,148490,148491],{},"常见第三方库：",[2698,148493,148494,148503],{},[2701,148495,148496],{},[2704,148497,148498,148501],{},[2707,148499,148500],{},"库",[2707,148502,105036],{},[2744,148504,148505,148513,148520,148528,148536,148544,148552],{},[2704,148506,148507,148510],{},[2749,148508,148509],{},"requests",[2749,148511,148512],{},"网络请求",[2704,148514,148515,148517],{},[2749,148516,102967],{},[2749,148518,148519],{},"数值计算",[2704,148521,148522,148525],{},[2749,148523,148524],{},"pandas",[2749,148526,148527],{},"表格数据处理",[2704,148529,148530,148533],{},[2749,148531,148532],{},"matplotlib",[2749,148534,148535],{},"绘图",[2704,148537,148538,148541],{},[2749,148539,148540],{},"pyecharts",[2749,148542,148543],{},"ECharts 图表",[2704,148545,148546,148549],{},[2749,148547,148548],{},"flask",[2749,148550,148551],{},"Web 后端",[2704,148553,148554,148557],{},[2749,148555,148556],{},"pytest",[2749,148558,148559],{},"自动化测试",[14,148561,148563],{"id":148562},"_15-虚拟环境","1.5 虚拟环境",[19,148565,148566,148567,148570],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,148568,148569],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148572,148573],{},"创建虚拟环境：",[26,148575,148577],{"className":26192,"code":148576,"language":26194,"meta":31,"style":31},"python -m venv .venv\n",[33,148578,148579],{"__ignoreMap":31},[36,148580,148581,148583,148585,148587],{"class":38,"line":39},[36,148582,30],{"class":79},[36,148584,103223],{"class":62},[36,148586,103226],{"class":50},[36,148588,103229],{"class":50},[19,148590,148591],{},"Windows 激活：",[26,148593,148595],{"className":26192,"code":148594,"language":26194,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,148596,148597],{"__ignoreMap":31},[36,148598,148599],{"class":38,"line":39},[36,148600,148594],{"class":79},[19,148602,148603],{},"macOS\u002FLinux 激活：",[26,148605,148607],{"className":26192,"code":148606,"language":26194,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,148608,148609],{"__ignoreMap":31},[36,148610,148611,148613],{"class":38,"line":39},[36,148612,103234],{"class":62},[36,148614,103237],{"class":50},[19,148616,148617],{},"退出虚拟环境：",[26,148619,148621],{"className":26192,"code":148620,"language":26194,"meta":31,"style":31},"deactivate\n",[33,148622,148623],{"__ignoreMap":31},[36,148624,148625],{"class":38,"line":39},[36,148626,148620],{"class":79},[19,148628,148629],{},"保存依赖：",[26,148631,148633],{"className":26192,"code":148632,"language":26194,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,148634,148635],{"__ignoreMap":31},[36,148636,148637,148639,148642,148644],{"class":38,"line":39},[36,148638,26201],{"class":79},[36,148640,148641],{"class":50}," freeze",[36,148643,28592],{"class":46},[36,148645,148646],{"class":50}," requirements.txt\n",[19,148648,148649],{},"安装依赖：",[26,148651,148653],{"className":26192,"code":148652,"language":26194,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,148654,148655],{"__ignoreMap":31},[36,148656,148657,148659,148661,148663],{"class":38,"line":39},[36,148658,26201],{"class":79},[36,148660,26204],{"class":50},[36,148662,121978],{"class":62},[36,148664,148646],{"class":50},[14,148666,148668],{"id":148667},"_16-开发工具","1.6 开发工具",[1752,148670,148672],{"id":148671},"_161-pycharm","1.6.1 PyCharm",[19,148674,148675],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148677,124401],{},[650,148679,148680,148683,148686,148692,148695],{},[653,148681,148682],{},"New Project：创建项目。",[653,148684,148685],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[653,148687,148688,148689,128322],{},"New Python File：创建 ",[33,148690,148691],{},".py",[653,148693,148694],{},"Run：运行当前文件。",[653,148696,148697],{},"Debug：断点调试。",[1752,148699,148701],{"id":148700},"_162-vs-code","1.6.2 VS Code",[19,148703,148704],{},"VS Code 轻量，适合后续多语言开发。",[19,148706,148707],{},"建议安装插件：",[650,148709,148710,148713,148716],{},[653,148711,148712],{},"Python。",[653,148714,148715],{},"Pylance。",[653,148717,148718],{},"Jupyter。",[19,148720,148721],{},"选择解释器：",[26,148723,148726],{"className":148724,"code":148725,"language":7570,"meta":31},[7568],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,148727,148725],{"__ignoreMap":31},[14,148729,148731],{"id":148730},"_17-第一个python程序","1.7 第一个Python程序",[19,148733,148734,148735,26989],{},"创建文件 ",[33,148736,148737],{},"hello.py",[26,148739,148741],{"className":28,"code":148740,"language":30,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,148742,148743,148754],{"__ignoreMap":31},[36,148744,148745,148747,148749,148752],{"class":38,"line":39},[36,148746,371],{"class":62},[36,148748,92],{"class":42},[36,148750,148751],{"class":50},"\"Hello World\"",[36,148753,123],{"class":42},[36,148755,148756,148758,148760,148763],{"class":38,"line":54},[36,148757,371],{"class":62},[36,148759,92],{"class":42},[36,148761,148762],{"class":50},"\"你好，Python\"",[36,148764,123],{"class":42},[19,148766,148767],{},"在终端运行：",[26,148769,148771],{"className":26192,"code":148770,"language":26194,"meta":31,"style":31},"python hello.py\n",[33,148772,148773],{"__ignoreMap":31},[36,148774,148775,148777],{"class":38,"line":39},[36,148776,30],{"class":79},[36,148778,148779],{"class":50}," hello.py\n",[19,148781,148782],{},"或：",[26,148784,148786],{"className":26192,"code":148785,"language":26194,"meta":31,"style":31},"python3 hello.py\n",[33,148787,148788],{"__ignoreMap":31},[36,148789,148790,148792],{"class":38,"line":39},[36,148791,103220],{"class":79},[36,148793,148779],{"class":50},[19,148795,148796],{},"输出：",[26,148798,148801],{"className":148799,"code":148800,"language":7570,"meta":31},[7568],"Hello World\n你好，Python\n",[33,148802,148800],{"__ignoreMap":31},[14,148804,148806],{"id":148805},"_18-print函数","1.8 print函数",[19,148808,148809,148812],{},[33,148810,148811],{},"print()"," 用来输出内容。",[26,148814,148816],{"className":28,"code":148815,"language":30,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,148817,148818,148828,148838,148848],{"__ignoreMap":31},[36,148819,148820,148822,148824,148826],{"class":38,"line":39},[36,148821,371],{"class":62},[36,148823,92],{"class":42},[36,148825,8226],{"class":50},[36,148827,123],{"class":42},[36,148829,148830,148832,148834,148836],{"class":38,"line":54},[36,148831,371],{"class":62},[36,148833,92],{"class":42},[36,148835,1070],{"class":62},[36,148837,123],{"class":42},[36,148839,148840,148842,148844,148846],{"class":38,"line":66},[36,148841,371],{"class":62},[36,148843,92],{"class":42},[36,148845,2613],{"class":62},[36,148847,123],{"class":42},[36,148849,148850,148852,148854,148857,148859,148861],{"class":38,"line":73},[36,148851,371],{"class":62},[36,148853,92],{"class":42},[36,148855,148856],{"class":50},"\"年龄:\"",[36,148858,630],{"class":42},[36,148860,633],{"class":62},[36,148862,123],{"class":42},[19,148864,148865],{},"多个内容用逗号隔开，默认中间加空格：",[26,148867,148869],{"className":28,"code":148868,"language":30,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,148870,148871,148880,148888],{"__ignoreMap":31},[36,148872,148873,148875,148877],{"class":38,"line":39},[36,148874,43],{"class":42},[36,148876,47],{"class":46},[36,148878,148879],{"class":50}," \"张三\"\n",[36,148881,148882,148884,148886],{"class":38,"line":54},[36,148883,57],{"class":42},[36,148885,47],{"class":46},[36,148887,63],{"class":62},[36,148889,148890,148892,148894,148897,148900,148902],{"class":38,"line":66},[36,148891,371],{"class":62},[36,148893,92],{"class":42},[36,148895,148896],{"class":50},"\"姓名:\"",[36,148898,148899],{"class":42},", name, ",[36,148901,148856],{"class":50},[36,148903,148904],{"class":42},", age)\n",[19,148906,148907],{},"修改分隔符：",[26,148909,148911],{"className":28,"code":148910,"language":30,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,148912,148913],{"__ignoreMap":31},[36,148914,148915,148917,148919,148922,148924,148926,148928,148930,148932,148935,148937,148939],{"class":38,"line":39},[36,148916,371],{"class":62},[36,148918,92],{"class":42},[36,148920,148921],{"class":50},"\"2024\"",[36,148923,630],{"class":42},[36,148925,56664],{"class":50},[36,148927,630],{"class":42},[36,148929,56664],{"class":50},[36,148931,630],{"class":42},[36,148933,148934],{"class":7598},"sep",[36,148936,47],{"class":46},[36,148938,34835],{"class":50},[36,148940,123],{"class":42},[19,148942,148943],{},"修改结尾符：",[26,148945,148947],{"className":28,"code":148946,"language":30,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,148948,148949,148967],{"__ignoreMap":31},[36,148950,148951,148953,148955,148957,148959,148961,148963,148965],{"class":38,"line":39},[36,148952,371],{"class":62},[36,148954,92],{"class":42},[36,148956,8226],{"class":50},[36,148958,630],{"class":42},[36,148960,48150],{"class":7598},[36,148962,47],{"class":46},[36,148964,6742],{"class":50},[36,148966,123],{"class":42},[36,148968,148969,148971,148973,148976],{"class":38,"line":54},[36,148970,371],{"class":62},[36,148972,92],{"class":42},[36,148974,148975],{"class":50},"\"python\"",[36,148977,123],{"class":42},[14,148979,148981],{"id":148980},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148983,148984],{},"交互运行适合临时验证：",[26,148986,148988],{"className":28,"code":148987,"language":30,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,148989,148990,149000],{"__ignoreMap":31},[36,148991,148992,148994,148996,148998],{"class":38,"line":39},[36,148993,148192],{"class":46},[36,148995,4431],{"class":62},[36,148997,8899],{"class":46},[36,148999,122375],{"class":62},[36,149001,149002],{"class":38,"line":54},[36,149003,149004],{"class":62},"30\n",[19,149006,149007],{},"脚本运行适合保存程序：",[26,149009,149011],{"className":28,"code":149010,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,149012,149013,149023,149032],{"__ignoreMap":31},[36,149014,149015,149018,149020],{"class":38,"line":39},[36,149016,149017],{"class":42},"price ",[36,149019,47],{"class":46},[36,149021,149022],{"class":62}," 8\n",[36,149024,149025,149028,149030],{"class":38,"line":54},[36,149026,149027],{"class":42},"count ",[36,149029,47],{"class":46},[36,149031,56775],{"class":62},[36,149033,149034,149036,149039,149041],{"class":38,"line":66},[36,149035,371],{"class":62},[36,149037,149038],{"class":42},"(price ",[36,149040,3011],{"class":46},[36,149042,149043],{"class":42}," count)\n",[19,149045,149046],{},"实际学习中推荐：",[650,149048,149049,149052,149057],{},[653,149050,149051],{},"临时试一个语法，用交互模式。",[653,149053,149054,149055,128322],{},"写完整练习，用 ",[33,149056,148691],{},[653,149058,149059],{},"写项目，用独立目录和虚拟环境。",[14,149061,149063],{"id":149062},"_110-常见错误","1.10 常见错误",[1752,149065,149067],{"id":149066},"_1101-命令找不到","1.10.1 命令找不到",[26,149069,149072],{"className":149070,"code":149071,"language":7570,"meta":31},[7568],"python: command not found\n",[33,149073,149071],{"__ignoreMap":31},[19,149075,149076],{},"原因：",[650,149078,149079,149082,149085],{},[653,149080,149081],{},"没安装 Python。",[653,149083,149084],{},"PATH 没配置。",[653,149086,149087,149088,676],{},"Linux\u002FmacOS 应该使用 ",[33,149089,103220],{},[1752,149091,149093],{"id":149092},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149095,149096],{},"不要把文件命名为：",[26,149098,149101],{"className":149099,"code":149100,"language":7570,"meta":31},[7568],"random.py\njson.py\ntime.py\nrequests.py\n",[33,149102,149100],{"__ignoreMap":31},[19,149104,149105],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1752,149107,149109],{"id":149108},"_1103-中文乱码","1.10.3 中文乱码",[19,149111,149112],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149114,149115],{},"如果读写文件出现乱码，要明确指定编码：",[26,149117,149119],{"className":28,"code":149118,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,149120,149121,149155],{"__ignoreMap":31},[36,149122,149123,149125,149128,149130,149133,149135,149138,149140,149143,149145,149148,149150,149152],{"class":38,"line":39},[36,149124,110172],{"class":46},[36,149126,149127],{"class":62}," open",[36,149129,92],{"class":42},[36,149131,149132],{"class":50},"\"data.txt\"",[36,149134,630],{"class":42},[36,149136,149137],{"class":50},"\"r\"",[36,149139,630],{"class":42},[36,149141,149142],{"class":7598},"encoding",[36,149144,47],{"class":46},[36,149146,149147],{"class":50},"\"utf-8\"",[36,149149,16091],{"class":42},[36,149151,33737],{"class":46},[36,149153,149154],{"class":42}," f:\n",[36,149156,149157,149160,149162],{"class":38,"line":54},[36,149158,149159],{"class":42},"    content ",[36,149161,47],{"class":46},[36,149163,149164],{"class":42}," f.read()\n",[14,149166,149168],{"id":149167},"_111-本章练习","1.11 本章练习",[650,149170,149171,149174,149180],{},[653,149172,149173],{},"安装 Python，并在终端输出版本号。",[653,149175,149176,149177,149179],{},"新建 ",[33,149178,148737],{},"，输出自己的姓名、年龄、学习目标。",[653,149181,2459,149182,149184],{},[33,149183,148811],{}," 输出下面格式：",[26,149186,149189],{"className":149187,"code":149188,"language":7570,"meta":31},[7568],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,149190,149188],{"__ignoreMap":31},[650,149192,149193],{"start":73},[653,149194,2459,149195,149197],{},[33,149196,148934],{}," 输出日期：",[26,149199,149202],{"className":149200,"code":149201,"language":7570,"meta":31},[7568],"2024-10-10\n",[33,149203,149201],{"__ignoreMap":31},[650,149205,149206],{"start":86},[653,149207,2459,149208,149210,149211,149213],{},[33,149209,48150],{}," 让两次 ",[33,149212,148811],{}," 输出在同一行。",[2467,149215,149216],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":149218},[149219,149220,149221,149226,149227,149228,149232,149233,149234,149235,149240],{"id":148104,"depth":54,"text":148105},{"id":148148,"depth":54,"text":148149},{"id":148249,"depth":54,"text":148250,"children":149222},[149223,149224,149225],{"id":148253,"depth":66,"text":148254},{"id":148308,"depth":66,"text":148309},{"id":148344,"depth":66,"text":148345},{"id":148417,"depth":54,"text":148418},{"id":148562,"depth":54,"text":148563},{"id":148667,"depth":54,"text":148668,"children":149229},[149230,149231],{"id":148671,"depth":66,"text":148672},{"id":148700,"depth":66,"text":148701},{"id":148730,"depth":54,"text":148731},{"id":148805,"depth":54,"text":148806},{"id":148980,"depth":54,"text":148981},{"id":149062,"depth":54,"text":149063,"children":149236},[149237,149238,149239],{"id":149066,"depth":66,"text":149067},{"id":149092,"depth":66,"text":149093},{"id":149108,"depth":66,"text":149109},{"id":149167,"depth":54,"text":149168},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148096,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149247,"title":149248,"body":149249,"description":2493,"extension":2494,"meta":151653,"navigation":69,"path":151654,"seo":151655,"stem":151656,"__hash__":151657},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149250,"toc":151638},[149251,149254,149258,149261,149264,149281,149284,149326,149329,149333,149336,149339,149376,149379,149413,149416,149508,149512,149526,149529,149556,149559,149563,149666,149673,149676,149693,149697,149704,149893,149896,149969,149973,149976,150060,150063,150095,150099,150303,150306,150310,150316,150418,150421,150677,150681,150684,150687,150701,150703,150889,150893,151255,151261,151265,151268,151392,151395,151574,151577,151581,151614,151618,151635],[10,149252,149248],{"id":149253},"_10-json与pyecharts折线图",[14,149255,149257],{"id":149256},"_101-数据可视化","10.1 数据可视化",[19,149259,149260],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149262,149263],{},"常见图表：",[650,149265,149266,149269,149272,149275,149278],{},[653,149267,149268],{},"折线图：看趋势。",[653,149270,149271],{},"柱状图：看分类对比。",[653,149273,149274],{},"饼图：看占比。",[653,149276,149277],{},"地图：看地域分布。",[653,149279,149280],{},"散点图：看两个变量之间的关系。",[19,149282,149283],{},"Python 可视化常用库：",[2698,149285,149286,149294],{},[2701,149287,149288],{},[2704,149289,149290,149292],{},[2707,149291,148500],{},[2707,149293,26110],{},[2744,149295,149296,149303,149311,149318],{},[2704,149297,149298,149300],{},[2749,149299,148532],{},[2749,149301,149302],{},"基础、经典、可定制",[2704,149304,149305,149308],{},[2749,149306,149307],{},"seaborn",[2749,149309,149310],{},"统计图表更美观",[2704,149312,149313,149315],{},[2749,149314,148540],{},[2749,149316,149317],{},"生成交互式网页图表",[2704,149319,149320,149323],{},[2749,149321,149322],{},"plotly",[2749,149324,149325],{},"交互图表能力强",[19,149327,149328],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149330,149332],{"id":149331},"_102-json回顾","10.2 JSON回顾",[19,149334,149335],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149337,149338],{},"Python 字典：",[26,149340,149342],{"className":28,"code":149341,"language":30,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,149343,149344,149352,149363,149372],{"__ignoreMap":31},[36,149345,149346,149348,149350],{"class":38,"line":39},[36,149347,103998],{"class":42},[36,149349,47],{"class":46},[36,149351,2150],{"class":42},[36,149353,149354,149357,149359,149361],{"class":38,"line":54},[36,149355,149356],{"class":50},"    \"name\"",[36,149358,2158],{"class":42},[36,149360,71615],{"class":50},[36,149362,33820],{"class":42},[36,149364,149365,149368,149370],{"class":38,"line":66},[36,149366,149367],{"class":50},"    \"value\"",[36,149369,2158],{"class":42},[36,149371,99799],{"class":62},[36,149373,149374],{"class":38,"line":73},[36,149375,3982],{"class":42},[19,149377,149378],{},"JSON 字符串：",[26,149380,149383],{"className":149381,"code":149382,"language":148131,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,149384,149385,149389,149400,149409],{"__ignoreMap":31},[36,149386,149387],{"class":38,"line":39},[36,149388,3963],{"class":42},[36,149390,149391,149394,149396,149398],{"class":38,"line":54},[36,149392,149393],{"class":62},"  \"name\"",[36,149395,2158],{"class":42},[36,149397,71615],{"class":50},[36,149399,33820],{"class":42},[36,149401,149402,149405,149407],{"class":38,"line":66},[36,149403,149404],{"class":62},"  \"value\"",[36,149406,2158],{"class":42},[36,149408,99799],{"class":62},[36,149410,149411],{"class":38,"line":73},[36,149412,3982],{"class":42},[19,149414,149415],{},"Python 与 JSON 的转换：",[26,149417,149419],{"className":28,"code":149418,"language":30,"meta":31,"style":31},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[33,149420,149421,149428,149432,149457,149461,149480,149487,149491,149501],{"__ignoreMap":31},[36,149422,149423,149425],{"class":38,"line":39},[36,149424,1943],{"class":46},[36,149426,149427],{"class":42}," json\n",[36,149429,149430],{"class":38,"line":54},[36,149431,70],{"emptyLinePlaceholder":69},[36,149433,149434,149436,149438,149440,149442,149444,149446,149448,149451,149453,149455],{"class":38,"line":66},[36,149435,103998],{"class":42},[36,149437,47],{"class":46},[36,149439,6831],{"class":42},[36,149441,2251],{"class":50},[36,149443,2158],{"class":42},[36,149445,71615],{"class":50},[36,149447,630],{"class":42},[36,149449,149450],{"class":50},"\"value\"",[36,149452,2158],{"class":42},[36,149454,1070],{"class":62},[36,149456,3982],{"class":42},[36,149458,149459],{"class":38,"line":73},[36,149460,70],{"emptyLinePlaceholder":69},[36,149462,149463,149466,149468,149471,149474,149476,149478],{"class":38,"line":86},[36,149464,149465],{"class":42},"json_text ",[36,149467,47],{"class":46},[36,149469,149470],{"class":42}," json.dumps(data, ",[36,149472,149473],{"class":7598},"ensure_ascii",[36,149475,47],{"class":46},[36,149477,36339],{"class":62},[36,149479,123],{"class":42},[36,149481,149482,149484],{"class":38,"line":126},[36,149483,371],{"class":62},[36,149485,149486],{"class":42},"(json_text)\n",[36,149488,149489],{"class":38,"line":131},[36,149490,70],{"emptyLinePlaceholder":69},[36,149492,149493,149496,149498],{"class":38,"line":225},[36,149494,149495],{"class":42},"new_data ",[36,149497,47],{"class":46},[36,149499,149500],{"class":42}," json.loads(json_text)\n",[36,149502,149503,149505],{"class":38,"line":235},[36,149504,371],{"class":62},[36,149506,149507],{"class":42},"(new_data)\n",[14,149509,149511],{"id":149510},"_103-安装pyecharts","10.3 安装pyecharts",[26,149513,149515],{"className":26192,"code":149514,"language":26194,"meta":31,"style":31},"pip install pyecharts\n",[33,149516,149517],{"__ignoreMap":31},[36,149518,149519,149521,149523],{"class":38,"line":39},[36,149520,26201],{"class":79},[36,149522,26204],{"class":50},[36,149524,149525],{"class":50}," pyecharts\n",[19,149527,149528],{},"验证：",[26,149530,149532],{"className":28,"code":149531,"language":30,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,149533,149534,149540,149544],{"__ignoreMap":31},[36,149535,149536,149538],{"class":38,"line":39},[36,149537,1943],{"class":46},[36,149539,149525],{"class":42},[36,149541,149542],{"class":38,"line":54},[36,149543,70],{"emptyLinePlaceholder":69},[36,149545,149546,149548,149551,149554],{"class":38,"line":66},[36,149547,371],{"class":62},[36,149549,149550],{"class":42},"(pyecharts.",[36,149552,149553],{"class":62},"__version__",[36,149555,123],{"class":42},[19,149557,149558],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149560,149562],{"id":149561},"_104-第一个折线图","10.4 第一个折线图",[26,149564,149566],{"className":28,"code":149565,"language":30,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,149567,149568,149580,149584,149594,149624,149656],{"__ignoreMap":31},[36,149569,149570,149572,149575,149577],{"class":38,"line":39},[36,149571,1937],{"class":46},[36,149573,149574],{"class":42}," pyecharts.charts ",[36,149576,1943],{"class":46},[36,149578,149579],{"class":42}," Line\n",[36,149581,149582],{"class":38,"line":54},[36,149583,70],{"emptyLinePlaceholder":69},[36,149585,149586,149589,149591],{"class":38,"line":66},[36,149587,149588],{"class":42},"line ",[36,149590,47],{"class":46},[36,149592,149593],{"class":42}," Line()\n",[36,149595,149596,149599,149602,149604,149607,149609,149612,149614,149617,149619,149622],{"class":38,"line":73},[36,149597,149598],{"class":42},"line.add_xaxis([",[36,149600,149601],{"class":50},"\"周一\"",[36,149603,630],{"class":42},[36,149605,149606],{"class":50},"\"周二\"",[36,149608,630],{"class":42},[36,149610,149611],{"class":50},"\"周三\"",[36,149613,630],{"class":42},[36,149615,149616],{"class":50},"\"周四\"",[36,149618,630],{"class":42},[36,149620,149621],{"class":50},"\"周五\"",[36,149623,7040],{"class":42},[36,149625,149626,149629,149632,149634,149636,149638,149640,149642,149644,149646,149649,149651,149654],{"class":38,"line":86},[36,149627,149628],{"class":42},"line.add_yaxis(",[36,149630,149631],{"class":50},"\"销售额\"",[36,149633,79863],{"class":42},[36,149635,1070],{"class":62},[36,149637,630],{"class":42},[36,149639,3371],{"class":62},[36,149641,630],{"class":42},[36,149643,3416],{"class":62},[36,149645,630],{"class":42},[36,149647,149648],{"class":62},"150",[36,149650,630],{"class":42},[36,149652,149653],{"class":62},"180",[36,149655,7040],{"class":42},[36,149657,149658,149661,149664],{"class":38,"line":126},[36,149659,149660],{"class":42},"line.render(",[36,149662,149663],{"class":50},"\"line.html\"",[36,149665,123],{"class":42},[19,149667,149668,149669,149672],{},"运行后会生成 ",[33,149670,149671],{},"line.html","，用浏览器打开即可看到图表。",[19,149674,149675],{},"核心步骤：",[650,149677,149678,149681,149684,149687,149690],{},[653,149679,149680],{},"导入图表类。",[653,149682,149683],{},"创建图表对象。",[653,149685,149686],{},"添加 x 轴数据。",[653,149688,149689],{},"添加 y 轴数据。",[653,149691,149692],{},"渲染为 HTML。",[14,149694,149696],{"id":149695},"_105-全局配置","10.5 全局配置",[19,149698,149699,149700,149703],{},"常用配置在 ",[33,149701,149702],{},"pyecharts.options"," 中。",[26,149705,149707],{"className":28,"code":149706,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[33,149708,149709,149726,149736,149740,149748,149772,149800,149805,149824,149843,149861,149881,149885],{"__ignoreMap":31},[36,149710,149711,149713,149716,149718,149721,149723],{"class":38,"line":39},[36,149712,1937],{"class":46},[36,149714,149715],{"class":42}," pyecharts ",[36,149717,1943],{"class":46},[36,149719,149720],{"class":42}," options ",[36,149722,33737],{"class":46},[36,149724,149725],{"class":42}," opts\n",[36,149727,149728,149730,149732,149734],{"class":38,"line":54},[36,149729,1937],{"class":46},[36,149731,149574],{"class":42},[36,149733,1943],{"class":46},[36,149735,149579],{"class":42},[36,149737,149738],{"class":38,"line":66},[36,149739,70],{"emptyLinePlaceholder":69},[36,149741,149742,149744,149746],{"class":38,"line":73},[36,149743,149588],{"class":42},[36,149745,47],{"class":46},[36,149747,149593],{"class":42},[36,149749,149750,149752,149754,149756,149758,149760,149762,149764,149766,149768,149770],{"class":38,"line":86},[36,149751,149598],{"class":42},[36,149753,149601],{"class":50},[36,149755,630],{"class":42},[36,149757,149606],{"class":50},[36,149759,630],{"class":42},[36,149761,149611],{"class":50},[36,149763,630],{"class":42},[36,149765,149616],{"class":50},[36,149767,630],{"class":42},[36,149769,149621],{"class":50},[36,149771,7040],{"class":42},[36,149773,149774,149776,149778,149780,149782,149784,149786,149788,149790,149792,149794,149796,149798],{"class":38,"line":126},[36,149775,149628],{"class":42},[36,149777,149631],{"class":50},[36,149779,79863],{"class":42},[36,149781,1070],{"class":62},[36,149783,630],{"class":42},[36,149785,3371],{"class":62},[36,149787,630],{"class":42},[36,149789,3416],{"class":62},[36,149791,630],{"class":42},[36,149793,149648],{"class":62},[36,149795,630],{"class":42},[36,149797,149653],{"class":62},[36,149799,7040],{"class":42},[36,149801,149802],{"class":38,"line":131},[36,149803,149804],{"class":42},"line.set_global_opts(\n",[36,149806,149807,149810,149812,149815,149817,149819,149822],{"class":38,"line":225},[36,149808,149809],{"class":7598},"    title_opts",[36,149811,47],{"class":46},[36,149813,149814],{"class":42},"opts.TitleOpts(",[36,149816,53756],{"class":7598},[36,149818,47],{"class":46},[36,149820,149821],{"class":50},"\"一周销售额\"",[36,149823,40398],{"class":42},[36,149825,149826,149829,149831,149834,149836,149838,149841],{"class":38,"line":235},[36,149827,149828],{"class":7598},"    xaxis_opts",[36,149830,47],{"class":46},[36,149832,149833],{"class":42},"opts.AxisOpts(",[36,149835,104],{"class":7598},[36,149837,47],{"class":46},[36,149839,149840],{"class":50},"\"日期\"",[36,149842,40398],{"class":42},[36,149844,149845,149848,149850,149852,149854,149856,149859],{"class":38,"line":377},[36,149846,149847],{"class":7598},"    yaxis_opts",[36,149849,47],{"class":46},[36,149851,149833],{"class":42},[36,149853,104],{"class":7598},[36,149855,47],{"class":46},[36,149857,149858],{"class":50},"\"金额\"",[36,149860,40398],{"class":42},[36,149862,149863,149866,149868,149871,149874,149876,149879],{"class":38,"line":617},[36,149864,149865],{"class":7598},"    tooltip_opts",[36,149867,47],{"class":46},[36,149869,149870],{"class":42},"opts.TooltipOpts(",[36,149872,149873],{"class":7598},"trigger",[36,149875,47],{"class":46},[36,149877,149878],{"class":50},"\"axis\"",[36,149880,40398],{"class":42},[36,149882,149883],{"class":38,"line":643},[36,149884,123],{"class":42},[36,149886,149887,149889,149891],{"class":38,"line":921},[36,149888,149660],{"class":42},[36,149890,149663],{"class":50},[36,149892,123],{"class":42},[19,149894,149895],{},"常见全局配置：",[2698,149897,149898,149907],{},[2701,149899,149900],{},[2704,149901,149902,149905],{},[2707,149903,149904],{},"配置",[2707,149906,105036],{},[2744,149908,149909,149919,149929,149939,149949,149959],{},[2704,149910,149911,149916],{},[2749,149912,149913],{},[33,149914,149915],{},"TitleOpts",[2749,149917,149918],{},"标题",[2704,149920,149921,149926],{},[2749,149922,149923],{},[33,149924,149925],{},"LegendOpts",[2749,149927,149928],{},"图例",[2704,149930,149931,149936],{},[2749,149932,149933],{},[33,149934,149935],{},"TooltipOpts",[2749,149937,149938],{},"提示框",[2704,149940,149941,149946],{},[2749,149942,149943],{},[33,149944,149945],{},"AxisOpts",[2749,149947,149948],{},"坐标轴",[2704,149950,149951,149956],{},[2749,149952,149953],{},[33,149954,149955],{},"VisualMapOpts",[2749,149957,149958],{},"视觉映射",[2704,149960,149961,149966],{},[2749,149962,149963],{},[33,149964,149965],{},"DataZoomOpts",[2749,149967,149968],{},"区域缩放",[14,149970,149972],{"id":149971},"_106-系列配置","10.6 系列配置",[19,149974,149975],{},"系列配置作用于某一组数据。",[26,149977,149979],{"className":28,"code":149978,"language":30,"meta":31,"style":31},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[33,149980,149981,149986,149997,150026,150037,150056],{"__ignoreMap":31},[36,149982,149983],{"class":38,"line":39},[36,149984,149985],{"class":42},"line.add_yaxis(\n",[36,149987,149988,149991,149993,149995],{"class":38,"line":54},[36,149989,149990],{"class":7598},"    series_name",[36,149992,47],{"class":46},[36,149994,149631],{"class":50},[36,149996,33820],{"class":42},[36,149998,149999,150002,150004,150006,150008,150010,150012,150014,150016,150018,150020,150022,150024],{"class":38,"line":66},[36,150000,150001],{"class":7598},"    y_axis",[36,150003,47],{"class":46},[36,150005,3444],{"class":42},[36,150007,1070],{"class":62},[36,150009,630],{"class":42},[36,150011,3371],{"class":62},[36,150013,630],{"class":42},[36,150015,3416],{"class":62},[36,150017,630],{"class":42},[36,150019,149648],{"class":62},[36,150021,630],{"class":42},[36,150023,149653],{"class":62},[36,150025,2244],{"class":42},[36,150027,150028,150031,150033,150035],{"class":38,"line":73},[36,150029,150030],{"class":7598},"    is_smooth",[36,150032,47],{"class":46},[36,150034,33830],{"class":62},[36,150036,33820],{"class":42},[36,150038,150039,150042,150044,150047,150050,150052,150054],{"class":38,"line":86},[36,150040,150041],{"class":7598},"    label_opts",[36,150043,47],{"class":46},[36,150045,150046],{"class":42},"opts.LabelOpts(",[36,150048,150049],{"class":7598},"is_show",[36,150051,47],{"class":46},[36,150053,33830],{"class":62},[36,150055,40398],{"class":42},[36,150057,150058],{"class":38,"line":126},[36,150059,123],{"class":42},[19,150061,150062],{},"常用参数：",[650,150064,150065,150071,150077,150083,150089],{},[653,150066,150067,150070],{},[33,150068,150069],{},"series_name","：系列名称。",[653,150072,150073,150076],{},[33,150074,150075],{},"y_axis","：y 轴数据。",[653,150078,150079,150082],{},[33,150080,150081],{},"is_smooth","：是否平滑曲线。",[653,150084,150085,150088],{},[33,150086,150087],{},"label_opts","：标签配置。",[653,150090,150091,150094],{},[33,150092,150093],{},"symbol_size","：标记点大小。",[14,150096,150098],{"id":150097},"_107-多条折线","10.7 多条折线",[26,150100,150102],{"className":28,"code":150101,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[33,150103,150104,150118,150128,150132,150161,150165,150173,150178,150216,150253,150257,150274,150290,150294],{"__ignoreMap":31},[36,150105,150106,150108,150110,150112,150114,150116],{"class":38,"line":39},[36,150107,1937],{"class":46},[36,150109,149715],{"class":42},[36,150111,1943],{"class":46},[36,150113,149720],{"class":42},[36,150115,33737],{"class":46},[36,150117,149725],{"class":42},[36,150119,150120,150122,150124,150126],{"class":38,"line":54},[36,150121,1937],{"class":46},[36,150123,149574],{"class":42},[36,150125,1943],{"class":46},[36,150127,149579],{"class":42},[36,150129,150130],{"class":38,"line":66},[36,150131,70],{"emptyLinePlaceholder":69},[36,150133,150134,150137,150139,150141,150143,150145,150147,150149,150151,150153,150155,150157,150159],{"class":38,"line":73},[36,150135,150136],{"class":42},"dates ",[36,150138,47],{"class":46},[36,150140,54574],{"class":42},[36,150142,149601],{"class":50},[36,150144,630],{"class":42},[36,150146,149606],{"class":50},[36,150148,630],{"class":42},[36,150150,149611],{"class":50},[36,150152,630],{"class":42},[36,150154,149616],{"class":50},[36,150156,630],{"class":42},[36,150158,149621],{"class":50},[36,150160,35598],{"class":42},[36,150162,150163],{"class":38,"line":86},[36,150164,70],{"emptyLinePlaceholder":69},[36,150166,150167,150169,150171],{"class":38,"line":126},[36,150168,149588],{"class":42},[36,150170,47],{"class":46},[36,150172,149593],{"class":42},[36,150174,150175],{"class":38,"line":131},[36,150176,150177],{"class":42},"line.add_xaxis(dates)\n",[36,150179,150180,150182,150185,150187,150189,150191,150194,150196,150198,150200,150202,150204,150206,150208,150210,150212,150214],{"class":38,"line":225},[36,150181,149628],{"class":42},[36,150183,150184],{"class":50},"\"线上销售\"",[36,150186,79863],{"class":42},[36,150188,1070],{"class":62},[36,150190,630],{"class":42},[36,150192,150193],{"class":62},"130",[36,150195,630],{"class":42},[36,150197,3371],{"class":62},[36,150199,630],{"class":42},[36,150201,23418],{"class":62},[36,150203,630],{"class":42},[36,150205,1059],{"class":62},[36,150207,114541],{"class":42},[36,150209,150081],{"class":7598},[36,150211,47],{"class":46},[36,150213,33830],{"class":62},[36,150215,123],{"class":42},[36,150217,150218,150220,150223,150225,150227,150229,150231,150233,150235,150237,150239,150241,150243,150245,150247,150249,150251],{"class":38,"line":235},[36,150219,149628],{"class":42},[36,150221,150222],{"class":50},"\"线下销售\"",[36,150224,79863],{"class":42},[36,150226,3167],{"class":62},[36,150228,630],{"class":42},[36,150230,3416],{"class":62},[36,150232,630],{"class":42},[36,150234,1070],{"class":62},[36,150236,630],{"class":42},[36,150238,3371],{"class":62},[36,150240,630],{"class":42},[36,150242,149648],{"class":62},[36,150244,114541],{"class":42},[36,150246,150081],{"class":7598},[36,150248,47],{"class":46},[36,150250,33830],{"class":62},[36,150252,123],{"class":42},[36,150254,150255],{"class":38,"line":377},[36,150256,149804],{"class":42},[36,150258,150259,150261,150263,150265,150267,150269,150272],{"class":38,"line":617},[36,150260,149809],{"class":7598},[36,150262,47],{"class":46},[36,150264,149814],{"class":42},[36,150266,53756],{"class":7598},[36,150268,47],{"class":46},[36,150270,150271],{"class":50},"\"线上线下销售趋势\"",[36,150273,40398],{"class":42},[36,150275,150276,150278,150280,150282,150284,150286,150288],{"class":38,"line":643},[36,150277,149865],{"class":7598},[36,150279,47],{"class":46},[36,150281,149870],{"class":42},[36,150283,149873],{"class":7598},[36,150285,47],{"class":46},[36,150287,149878],{"class":50},[36,150289,40398],{"class":42},[36,150291,150292],{"class":38,"line":921},[36,150293,123],{"class":42},[36,150295,150296,150298,150301],{"class":38,"line":934},[36,150297,149660],{"class":42},[36,150299,150300],{"class":50},"\"sales.html\"",[36,150302,123],{"class":42},[19,150304,150305],{},"多条折线适合比较不同指标或不同地区。",[14,150307,150309],{"id":150308},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150311,150312,150313,26989],{},"假设 ",[33,150314,150315],{},"sales.json",[26,150317,150319],{"className":149381,"code":150318,"language":148131,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,150320,150321,150326,150358,150386,150414],{"__ignoreMap":31},[36,150322,150323],{"class":38,"line":39},[36,150324,150325],{"class":42},"[\n",[36,150327,150328,150331,150334,150336,150338,150340,150343,150345,150347,150349,150352,150354,150356],{"class":38,"line":54},[36,150329,150330],{"class":42},"  {",[36,150332,150333],{"class":62},"\"date\"",[36,150335,2158],{"class":42},[36,150337,149601],{"class":50},[36,150339,630],{"class":42},[36,150341,150342],{"class":62},"\"online\"",[36,150344,2158],{"class":42},[36,150346,1070],{"class":62},[36,150348,630],{"class":42},[36,150350,150351],{"class":62},"\"offline\"",[36,150353,2158],{"class":42},[36,150355,3167],{"class":62},[36,150357,7313],{"class":42},[36,150359,150360,150362,150364,150366,150368,150370,150372,150374,150376,150378,150380,150382,150384],{"class":38,"line":66},[36,150361,150330],{"class":42},[36,150363,150333],{"class":62},[36,150365,2158],{"class":42},[36,150367,149606],{"class":50},[36,150369,630],{"class":42},[36,150371,150342],{"class":62},[36,150373,2158],{"class":42},[36,150375,150193],{"class":62},[36,150377,630],{"class":42},[36,150379,150351],{"class":62},[36,150381,2158],{"class":42},[36,150383,3416],{"class":62},[36,150385,7313],{"class":42},[36,150387,150388,150390,150392,150394,150396,150398,150400,150402,150404,150406,150408,150410,150412],{"class":38,"line":73},[36,150389,150330],{"class":42},[36,150391,150333],{"class":62},[36,150393,2158],{"class":42},[36,150395,149611],{"class":50},[36,150397,630],{"class":42},[36,150399,150342],{"class":62},[36,150401,2158],{"class":42},[36,150403,3371],{"class":62},[36,150405,630],{"class":42},[36,150407,150351],{"class":62},[36,150409,2158],{"class":42},[36,150411,1070],{"class":62},[36,150413,3982],{"class":42},[36,150415,150416],{"class":38,"line":86},[36,150417,35598],{"class":42},[19,150419,150420],{},"读取并绘图：",[26,150422,150424],{"className":28,"code":150423,"language":30,"meta":31,"style":31},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[33,150425,150426,150432,150446,150456,150460,150492,150505,150509,150517,150526,150535,150539,150551,150560,150569,150578,150582,150590,150594,150611,150628,150632,150649,150665,150669],{"__ignoreMap":31},[36,150427,150428,150430],{"class":38,"line":39},[36,150429,1943],{"class":46},[36,150431,149427],{"class":42},[36,150433,150434,150436,150438,150440,150442,150444],{"class":38,"line":54},[36,150435,1937],{"class":46},[36,150437,149715],{"class":42},[36,150439,1943],{"class":46},[36,150441,149720],{"class":42},[36,150443,33737],{"class":46},[36,150445,149725],{"class":42},[36,150447,150448,150450,150452,150454],{"class":38,"line":66},[36,150449,1937],{"class":46},[36,150451,149574],{"class":42},[36,150453,1943],{"class":46},[36,150455,149579],{"class":42},[36,150457,150458],{"class":38,"line":73},[36,150459,70],{"emptyLinePlaceholder":69},[36,150461,150462,150464,150466,150468,150471,150473,150475,150477,150479,150481,150483,150485,150487,150490],{"class":38,"line":86},[36,150463,110172],{"class":46},[36,150465,149127],{"class":62},[36,150467,92],{"class":42},[36,150469,150470],{"class":50},"\"sales.json\"",[36,150472,630],{"class":42},[36,150474,149137],{"class":50},[36,150476,630],{"class":42},[36,150478,149142],{"class":7598},[36,150480,47],{"class":46},[36,150482,149147],{"class":50},[36,150484,16091],{"class":42},[36,150486,33737],{"class":46},[36,150488,150489],{"class":7598}," file",[36,150491,153],{"class":42},[36,150493,150494,150496,150498,150501,150503],{"class":38,"line":126},[36,150495,103761],{"class":42},[36,150497,47],{"class":46},[36,150499,150500],{"class":42}," json.load(",[36,150502,47703],{"class":7598},[36,150504,123],{"class":42},[36,150506,150507],{"class":38,"line":131},[36,150508,70],{"emptyLinePlaceholder":69},[36,150510,150511,150513,150515],{"class":38,"line":225},[36,150512,150136],{"class":42},[36,150514,47],{"class":46},[36,150516,54186],{"class":42},[36,150518,150519,150522,150524],{"class":38,"line":235},[36,150520,150521],{"class":42},"online_sales ",[36,150523,47],{"class":46},[36,150525,54186],{"class":42},[36,150527,150528,150531,150533],{"class":38,"line":377},[36,150529,150530],{"class":42},"offline_sales ",[36,150532,47],{"class":46},[36,150534,54186],{"class":42},[36,150536,150537],{"class":38,"line":617},[36,150538,70],{"emptyLinePlaceholder":69},[36,150540,150541,150543,150546,150548],{"class":38,"line":643},[36,150542,5410],{"class":46},[36,150544,150545],{"class":42}," item ",[36,150547,28413],{"class":46},[36,150549,150550],{"class":42}," data:\n",[36,150552,150553,150556,150558],{"class":38,"line":921},[36,150554,150555],{"class":42},"    dates.append(item[",[36,150557,150333],{"class":50},[36,150559,7040],{"class":42},[36,150561,150562,150565,150567],{"class":38,"line":934},[36,150563,150564],{"class":42},"    online_sales.append(item[",[36,150566,150342],{"class":50},[36,150568,7040],{"class":42},[36,150570,150571,150574,150576],{"class":38,"line":939},[36,150572,150573],{"class":42},"    offline_sales.append(item[",[36,150575,150351],{"class":50},[36,150577,7040],{"class":42},[36,150579,150580],{"class":38,"line":949},[36,150581,70],{"emptyLinePlaceholder":69},[36,150583,150584,150586,150588],{"class":38,"line":962},[36,150585,149588],{"class":42},[36,150587,47],{"class":46},[36,150589,149593],{"class":42},[36,150591,150592],{"class":38,"line":974},[36,150593,150177],{"class":42},[36,150595,150596,150598,150600,150603,150605,150607,150609],{"class":38,"line":979},[36,150597,149628],{"class":42},[36,150599,150184],{"class":50},[36,150601,150602],{"class":42},", online_sales, ",[36,150604,150081],{"class":7598},[36,150606,47],{"class":46},[36,150608,33830],{"class":62},[36,150610,123],{"class":42},[36,150612,150613,150615,150617,150620,150622,150624,150626],{"class":38,"line":994},[36,150614,149628],{"class":42},[36,150616,150222],{"class":50},[36,150618,150619],{"class":42},", offline_sales, ",[36,150621,150081],{"class":7598},[36,150623,47],{"class":46},[36,150625,33830],{"class":62},[36,150627,123],{"class":42},[36,150629,150630],{"class":38,"line":1006},[36,150631,149804],{"class":42},[36,150633,150634,150636,150638,150640,150642,150644,150647],{"class":38,"line":1011},[36,150635,149809],{"class":7598},[36,150637,47],{"class":46},[36,150639,149814],{"class":42},[36,150641,53756],{"class":7598},[36,150643,47],{"class":46},[36,150645,150646],{"class":50},"\"销售趋势\"",[36,150648,40398],{"class":42},[36,150650,150651,150653,150655,150657,150659,150661,150663],{"class":38,"line":1023},[36,150652,149865],{"class":7598},[36,150654,47],{"class":46},[36,150656,149870],{"class":42},[36,150658,149873],{"class":7598},[36,150660,47],{"class":46},[36,150662,149878],{"class":50},[36,150664,40398],{"class":42},[36,150666,150667],{"class":38,"line":1028},[36,150668,123],{"class":42},[36,150670,150671,150673,150675],{"class":38,"line":1033},[36,150672,149660],{"class":42},[36,150674,150300],{"class":50},[36,150676,123],{"class":42},[14,150678,150680],{"id":150679},"_109-数据清洗","10.9 数据清洗",[19,150682,150683],{},"真实数据经常不整齐，需要清洗。",[19,150685,150686],{},"常见问题：",[650,150688,150689,150692,150695,150698],{},[653,150690,150691],{},"数字是字符串。",[653,150693,150694],{},"字段缺失。",[653,150696,150697],{},"空值。",[653,150699,150700],{},"日期格式不统一。",[19,150702,17510],{},[26,150704,150706],{"className":28,"code":150705,"language":30,"meta":31,"style":31},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[33,150707,150708,150717,150740,150760,150781,150785,150789,150797,150806,150810,150821,150835,150844,150849,150853,150861,150871,150875,150882],{"__ignoreMap":31},[36,150709,150710,150713,150715],{"class":38,"line":39},[36,150711,150712],{"class":42},"raw_data ",[36,150714,47],{"class":46},[36,150716,57795],{"class":42},[36,150718,150719,150722,150724,150726,150728,150730,150733,150735,150738],{"class":38,"line":54},[36,150720,150721],{"class":42},"    {",[36,150723,150333],{"class":50},[36,150725,2158],{"class":42},[36,150727,149601],{"class":50},[36,150729,630],{"class":42},[36,150731,150732],{"class":50},"\"sales\"",[36,150734,2158],{"class":42},[36,150736,150737],{"class":50},"\"100\"",[36,150739,7313],{"class":42},[36,150741,150742,150744,150746,150748,150750,150752,150754,150756,150758],{"class":38,"line":66},[36,150743,150721],{"class":42},[36,150745,150333],{"class":50},[36,150747,2158],{"class":42},[36,150749,149606],{"class":50},[36,150751,630],{"class":42},[36,150753,150732],{"class":50},[36,150755,2158],{"class":42},[36,150757,10033],{"class":50},[36,150759,7313],{"class":42},[36,150761,150762,150764,150766,150768,150770,150772,150774,150776,150779],{"class":38,"line":73},[36,150763,150721],{"class":42},[36,150765,150333],{"class":50},[36,150767,2158],{"class":42},[36,150769,149611],{"class":50},[36,150771,630],{"class":42},[36,150773,150732],{"class":50},[36,150775,2158],{"class":42},[36,150777,150778],{"class":50},"\"120\"",[36,150780,7313],{"class":42},[36,150782,150783],{"class":38,"line":86},[36,150784,35598],{"class":42},[36,150786,150787],{"class":38,"line":126},[36,150788,70],{"emptyLinePlaceholder":69},[36,150790,150791,150793,150795],{"class":38,"line":131},[36,150792,150136],{"class":42},[36,150794,47],{"class":46},[36,150796,54186],{"class":42},[36,150798,150799,150802,150804],{"class":38,"line":225},[36,150800,150801],{"class":42},"sales ",[36,150803,47],{"class":46},[36,150805,54186],{"class":42},[36,150807,150808],{"class":38,"line":235},[36,150809,70],{"emptyLinePlaceholder":69},[36,150811,150812,150814,150816,150818],{"class":38,"line":377},[36,150813,5410],{"class":46},[36,150815,150545],{"class":42},[36,150817,28413],{"class":46},[36,150819,150820],{"class":42}," raw_data:\n",[36,150822,150823,150826,150828,150831,150833],{"class":38,"line":617},[36,150824,150825],{"class":42},"    value ",[36,150827,47],{"class":46},[36,150829,150830],{"class":42}," item.get(",[36,150832,150732],{"class":50},[36,150834,123],{"class":42},[36,150836,150837,150839,150841],{"class":38,"line":643},[36,150838,5486],{"class":46},[36,150840,41279],{"class":46},[36,150842,150843],{"class":42}," value:\n",[36,150845,150846],{"class":38,"line":921},[36,150847,150848],{"class":46},"        continue\n",[36,150850,150851],{"class":38,"line":934},[36,150852,70],{"emptyLinePlaceholder":69},[36,150854,150855,150857,150859],{"class":38,"line":939},[36,150856,150555],{"class":42},[36,150858,150333],{"class":50},[36,150860,7040],{"class":42},[36,150862,150863,150866,150868],{"class":38,"line":949},[36,150864,150865],{"class":42},"    sales.append(",[36,150867,2570],{"class":62},[36,150869,150870],{"class":42},"(value))\n",[36,150872,150873],{"class":38,"line":962},[36,150874,70],{"emptyLinePlaceholder":69},[36,150876,150877,150879],{"class":38,"line":974},[36,150878,371],{"class":62},[36,150880,150881],{"class":42},"(dates)\n",[36,150883,150884,150886],{"class":38,"line":979},[36,150885,371],{"class":62},[36,150887,150888],{"class":42},"(sales)\n",[14,150890,150892],{"id":150891},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,150894,150896],{"className":28,"code":150895,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[33,150897,150898,150912,150922,150926,150934,150955,150977,150999,151021,151043,151047,151051,151073,151094,151098,151106,151110,151114,151124,151133,151143,151159,151163,151167,151184,151200,151216,151232,151242,151246],{"__ignoreMap":31},[36,150899,150900,150902,150904,150906,150908,150910],{"class":38,"line":39},[36,150901,1937],{"class":46},[36,150903,149715],{"class":42},[36,150905,1943],{"class":46},[36,150907,149720],{"class":42},[36,150909,33737],{"class":46},[36,150911,149725],{"class":42},[36,150913,150914,150916,150918,150920],{"class":38,"line":54},[36,150915,1937],{"class":46},[36,150917,149574],{"class":42},[36,150919,1943],{"class":46},[36,150921,149579],{"class":42},[36,150923,150924],{"class":38,"line":66},[36,150925,70],{"emptyLinePlaceholder":69},[36,150927,150928,150930,150932],{"class":38,"line":73},[36,150929,150801],{"class":42},[36,150931,47],{"class":46},[36,150933,57795],{"class":42},[36,150935,150936,150938,150940,150942,150945,150947,150949,150951,150953],{"class":38,"line":86},[36,150937,150721],{"class":42},[36,150939,150333],{"class":50},[36,150941,2158],{"class":42},[36,150943,150944],{"class":50},"\"2024-10-01\"",[36,150946,630],{"class":42},[36,150948,86426],{"class":50},[36,150950,2158],{"class":42},[36,150952,94364],{"class":62},[36,150954,7313],{"class":42},[36,150956,150957,150959,150961,150963,150966,150968,150970,150972,150975],{"class":38,"line":126},[36,150958,150721],{"class":42},[36,150960,150333],{"class":50},[36,150962,2158],{"class":42},[36,150964,150965],{"class":50},"\"2024-10-02\"",[36,150967,630],{"class":42},[36,150969,86426],{"class":50},[36,150971,2158],{"class":42},[36,150973,150974],{"class":62},"1800",[36,150976,7313],{"class":42},[36,150978,150979,150981,150983,150985,150988,150990,150992,150994,150997],{"class":38,"line":131},[36,150980,150721],{"class":42},[36,150982,150333],{"class":50},[36,150984,2158],{"class":42},[36,150986,150987],{"class":50},"\"2024-10-03\"",[36,150989,630],{"class":42},[36,150991,86426],{"class":50},[36,150993,2158],{"class":42},[36,150995,150996],{"class":62},"1500",[36,150998,7313],{"class":42},[36,151000,151001,151003,151005,151007,151010,151012,151014,151016,151019],{"class":38,"line":225},[36,151002,150721],{"class":42},[36,151004,150333],{"class":50},[36,151006,2158],{"class":42},[36,151008,151009],{"class":50},"\"2024-10-04\"",[36,151011,630],{"class":42},[36,151013,86426],{"class":50},[36,151015,2158],{"class":42},[36,151017,151018],{"class":62},"2100",[36,151020,7313],{"class":42},[36,151022,151023,151025,151027,151029,151032,151034,151036,151038,151041],{"class":38,"line":235},[36,151024,150721],{"class":42},[36,151026,150333],{"class":50},[36,151028,2158],{"class":42},[36,151030,151031],{"class":50},"\"2024-10-05\"",[36,151033,630],{"class":42},[36,151035,86426],{"class":50},[36,151037,2158],{"class":42},[36,151039,151040],{"class":62},"2600",[36,151042,7313],{"class":42},[36,151044,151045],{"class":38,"line":377},[36,151046,35598],{"class":42},[36,151048,151049],{"class":38,"line":617},[36,151050,70],{"emptyLinePlaceholder":69},[36,151052,151053,151055,151057,151060,151062,151064,151066,151068,151070],{"class":38,"line":643},[36,151054,150136],{"class":42},[36,151056,47],{"class":46},[36,151058,151059],{"class":42}," [item[",[36,151061,150333],{"class":50},[36,151063,6826],{"class":42},[36,151065,5410],{"class":46},[36,151067,150545],{"class":42},[36,151069,28413],{"class":46},[36,151071,151072],{"class":42}," sales]\n",[36,151074,151075,151078,151080,151082,151084,151086,151088,151090,151092],{"class":38,"line":921},[36,151076,151077],{"class":42},"amounts ",[36,151079,47],{"class":46},[36,151081,151059],{"class":42},[36,151083,86426],{"class":50},[36,151085,6826],{"class":42},[36,151087,5410],{"class":46},[36,151089,150545],{"class":42},[36,151091,28413],{"class":46},[36,151093,151072],{"class":42},[36,151095,151096],{"class":38,"line":934},[36,151097,70],{"emptyLinePlaceholder":69},[36,151099,151100,151102,151104],{"class":38,"line":939},[36,151101,149588],{"class":42},[36,151103,47],{"class":46},[36,151105,149593],{"class":42},[36,151107,151108],{"class":38,"line":949},[36,151109,150177],{"class":42},[36,151111,151112],{"class":38,"line":962},[36,151113,149985],{"class":42},[36,151115,151116,151118,151120,151122],{"class":38,"line":974},[36,151117,149990],{"class":7598},[36,151119,47],{"class":46},[36,151121,149631],{"class":50},[36,151123,33820],{"class":42},[36,151125,151126,151128,151130],{"class":38,"line":979},[36,151127,150001],{"class":7598},[36,151129,47],{"class":46},[36,151131,151132],{"class":42},"amounts,\n",[36,151134,151135,151137,151139,151141],{"class":38,"line":994},[36,151136,150030],{"class":7598},[36,151138,47],{"class":46},[36,151140,33830],{"class":62},[36,151142,33820],{"class":42},[36,151144,151145,151147,151149,151151,151153,151155,151157],{"class":38,"line":1006},[36,151146,150041],{"class":7598},[36,151148,47],{"class":46},[36,151150,150046],{"class":42},[36,151152,150049],{"class":7598},[36,151154,47],{"class":46},[36,151156,33830],{"class":62},[36,151158,40398],{"class":42},[36,151160,151161],{"class":38,"line":1011},[36,151162,123],{"class":42},[36,151164,151165],{"class":38,"line":1023},[36,151166,149804],{"class":42},[36,151168,151169,151171,151173,151175,151177,151179,151182],{"class":38,"line":1028},[36,151170,149809],{"class":7598},[36,151172,47],{"class":46},[36,151174,149814],{"class":42},[36,151176,53756],{"class":7598},[36,151178,47],{"class":46},[36,151180,151181],{"class":50},"\"每日销售额\"",[36,151183,40398],{"class":42},[36,151185,151186,151188,151190,151192,151194,151196,151198],{"class":38,"line":1033},[36,151187,149828],{"class":7598},[36,151189,47],{"class":46},[36,151191,149833],{"class":42},[36,151193,104],{"class":7598},[36,151195,47],{"class":46},[36,151197,149840],{"class":50},[36,151199,40398],{"class":42},[36,151201,151202,151204,151206,151208,151210,151212,151214],{"class":38,"line":1053},[36,151203,149847],{"class":7598},[36,151205,47],{"class":46},[36,151207,149833],{"class":42},[36,151209,104],{"class":7598},[36,151211,47],{"class":46},[36,151213,149858],{"class":50},[36,151215,40398],{"class":42},[36,151217,151218,151220,151222,151224,151226,151228,151230],{"class":38,"line":1064},[36,151219,149865],{"class":7598},[36,151221,47],{"class":46},[36,151223,149870],{"class":42},[36,151225,149873],{"class":7598},[36,151227,47],{"class":46},[36,151229,149878],{"class":50},[36,151231,40398],{"class":42},[36,151233,151234,151237,151239],{"class":38,"line":1075},[36,151235,151236],{"class":7598},"    datazoom_opts",[36,151238,47],{"class":46},[36,151240,151241],{"class":42},"[opts.DataZoomOpts()],\n",[36,151243,151244],{"class":38,"line":2291},[36,151245,123],{"class":42},[36,151247,151248,151250,151253],{"class":38,"line":2329},[36,151249,149660],{"class":42},[36,151251,151252],{"class":50},"\"daily_sales.html\"",[36,151254,123],{"class":42},[19,151256,151257,151260],{},[33,151258,151259],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151262,151264],{"id":151263},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151266,151267],{},"如果数据结构如下：",[26,151269,151271],{"className":28,"code":151270,"language":30,"meta":31,"style":31},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[33,151272,151273,151281,151289,151311,151332,151337,151344,151364,151384,151388],{"__ignoreMap":31},[36,151274,151275,151277,151279],{"class":38,"line":39},[36,151276,103998],{"class":42},[36,151278,47],{"class":46},[36,151280,2150],{"class":42},[36,151282,151283,151286],{"class":38,"line":54},[36,151284,151285],{"class":50},"    \"北京\"",[36,151287,151288],{"class":42},": [\n",[36,151290,151291,151293,151295,151297,151300,151302,151305,151307,151309],{"class":38,"line":66},[36,151292,7300],{"class":42},[36,151294,150333],{"class":50},[36,151296,2158],{"class":42},[36,151298,151299],{"class":50},"\"2024-01-01\"",[36,151301,630],{"class":42},[36,151303,151304],{"class":50},"\"confirm\"",[36,151306,2158],{"class":42},[36,151308,3002],{"class":62},[36,151310,7313],{"class":42},[36,151312,151313,151315,151317,151319,151322,151324,151326,151328,151330],{"class":38,"line":73},[36,151314,7300],{"class":42},[36,151316,150333],{"class":50},[36,151318,2158],{"class":42},[36,151320,151321],{"class":50},"\"2024-01-02\"",[36,151323,630],{"class":42},[36,151325,151304],{"class":50},[36,151327,2158],{"class":42},[36,151329,3053],{"class":62},[36,151331,7313],{"class":42},[36,151333,151334],{"class":38,"line":86},[36,151335,151336],{"class":42},"    ],\n",[36,151338,151339,151342],{"class":38,"line":126},[36,151340,151341],{"class":50},"    \"上海\"",[36,151343,151288],{"class":42},[36,151345,151346,151348,151350,151352,151354,151356,151358,151360,151362],{"class":38,"line":131},[36,151347,7300],{"class":42},[36,151349,150333],{"class":50},[36,151351,2158],{"class":42},[36,151353,151299],{"class":50},[36,151355,630],{"class":42},[36,151357,151304],{"class":50},[36,151359,2158],{"class":42},[36,151361,2951],{"class":62},[36,151363,7313],{"class":42},[36,151365,151366,151368,151370,151372,151374,151376,151378,151380,151382],{"class":38,"line":225},[36,151367,7300],{"class":42},[36,151369,150333],{"class":50},[36,151371,2158],{"class":42},[36,151373,151321],{"class":50},[36,151375,630],{"class":42},[36,151377,151304],{"class":50},[36,151379,2158],{"class":42},[36,151381,3078],{"class":62},[36,151383,7313],{"class":42},[36,151385,151386],{"class":38,"line":235},[36,151387,151336],{"class":42},[36,151389,151390],{"class":38,"line":377},[36,151391,3982],{"class":42},[19,151393,151394],{},"绘制多地区趋势：",[26,151396,151398],{"className":28,"code":151397,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[33,151399,151400,151414,151424,151428,151453,151457,151465,151469,151473,151485,151507,151520,151524,151528,151545,151561,151565],{"__ignoreMap":31},[36,151401,151402,151404,151406,151408,151410,151412],{"class":38,"line":39},[36,151403,1937],{"class":46},[36,151405,149715],{"class":42},[36,151407,1943],{"class":46},[36,151409,149720],{"class":42},[36,151411,33737],{"class":46},[36,151413,149725],{"class":42},[36,151415,151416,151418,151420,151422],{"class":38,"line":54},[36,151417,1937],{"class":46},[36,151419,149574],{"class":42},[36,151421,1943],{"class":46},[36,151423,149579],{"class":42},[36,151425,151426],{"class":38,"line":66},[36,151427,70],{"emptyLinePlaceholder":69},[36,151429,151430,151432,151434,151436,151438,151440,151442,151444,151446,151449,151451],{"class":38,"line":73},[36,151431,150136],{"class":42},[36,151433,47],{"class":46},[36,151435,151059],{"class":42},[36,151437,150333],{"class":50},[36,151439,6826],{"class":42},[36,151441,5410],{"class":46},[36,151443,150545],{"class":42},[36,151445,28413],{"class":46},[36,151447,151448],{"class":42}," data[",[36,151450,71615],{"class":50},[36,151452,79872],{"class":42},[36,151454,151455],{"class":38,"line":86},[36,151456,70],{"emptyLinePlaceholder":69},[36,151458,151459,151461,151463],{"class":38,"line":126},[36,151460,149588],{"class":42},[36,151462,47],{"class":46},[36,151464,149593],{"class":42},[36,151466,151467],{"class":38,"line":131},[36,151468,150177],{"class":42},[36,151470,151471],{"class":38,"line":225},[36,151472,70],{"emptyLinePlaceholder":69},[36,151474,151475,151477,151480,151482],{"class":38,"line":235},[36,151476,5410],{"class":46},[36,151478,151479],{"class":42}," city, records ",[36,151481,28413],{"class":46},[36,151483,151484],{"class":42}," data.items():\n",[36,151486,151487,151490,151492,151494,151496,151498,151500,151502,151504],{"class":38,"line":377},[36,151488,151489],{"class":42},"    values ",[36,151491,47],{"class":46},[36,151493,151059],{"class":42},[36,151495,151304],{"class":50},[36,151497,6826],{"class":42},[36,151499,5410],{"class":46},[36,151501,150545],{"class":42},[36,151503,28413],{"class":46},[36,151505,151506],{"class":42}," records]\n",[36,151508,151509,151512,151514,151516,151518],{"class":38,"line":617},[36,151510,151511],{"class":42},"    line.add_yaxis(city, values, ",[36,151513,150081],{"class":7598},[36,151515,47],{"class":46},[36,151517,33830],{"class":62},[36,151519,123],{"class":42},[36,151521,151522],{"class":38,"line":643},[36,151523,70],{"emptyLinePlaceholder":69},[36,151525,151526],{"class":38,"line":921},[36,151527,149804],{"class":42},[36,151529,151530,151532,151534,151536,151538,151540,151543],{"class":38,"line":934},[36,151531,149809],{"class":7598},[36,151533,47],{"class":46},[36,151535,149814],{"class":42},[36,151537,53756],{"class":7598},[36,151539,47],{"class":46},[36,151541,151542],{"class":50},"\"多地区趋势图\"",[36,151544,40398],{"class":42},[36,151546,151547,151549,151551,151553,151555,151557,151559],{"class":38,"line":939},[36,151548,149865],{"class":7598},[36,151550,47],{"class":46},[36,151552,149870],{"class":42},[36,151554,149873],{"class":7598},[36,151556,47],{"class":46},[36,151558,149878],{"class":50},[36,151560,40398],{"class":42},[36,151562,151563],{"class":38,"line":949},[36,151564,123],{"class":42},[36,151566,151567,151569,151572],{"class":38,"line":962},[36,151568,149660],{"class":42},[36,151570,151571],{"class":50},"\"trend.html\"",[36,151573,123],{"class":42},[19,151575,151576],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151578,151580],{"id":151579},"_1012-易错点","10.12 易错点",[650,151582,151583,151589,151595,151605,151611],{},[653,151584,151585,151588],{},[33,151586,151587],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[653,151590,151591,151594],{},[33,151592,151593],{},"render()"," 生成的是 HTML，不是图片。",[653,151596,151597,151598,151601,151602,676],{},"JSON 字符串用 ",[33,151599,151600],{},"json.loads()","，JSON 文件用 ",[33,151603,151604],{},"json.load()",[653,151606,151607,151608,676],{},"中文 JSON 保存时加 ",[33,151609,151610],{},"ensure_ascii=False",[653,151612,151613],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151615,151617],{"id":151616},"_1013-本章练习","10.13 本章练习",[650,151619,151620,151623,151626,151629,151632],{},[653,151621,151622],{},"安装 pyecharts 并生成第一个折线图。",[653,151624,151625],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[653,151627,151628],{},"绘制两条折线，对比线上和线下销售额。",[653,151630,151631],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[653,151633,151634],{},"对含有空值的销售数据进行清洗后再绘图。",[2467,151636,151637],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":151639},[151640,151641,151642,151643,151644,151645,151646,151647,151648,151649,151650,151651,151652],{"id":149256,"depth":54,"text":149257},{"id":149331,"depth":54,"text":149332},{"id":149510,"depth":54,"text":149511},{"id":149561,"depth":54,"text":149562},{"id":149695,"depth":54,"text":149696},{"id":149971,"depth":54,"text":149972},{"id":150097,"depth":54,"text":150098},{"id":150308,"depth":54,"text":150309},{"id":150679,"depth":54,"text":150680},{"id":150891,"depth":54,"text":150892},{"id":151263,"depth":54,"text":151264},{"id":151579,"depth":54,"text":151580},{"id":151616,"depth":54,"text":151617},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149248,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":4,"title":5,"body":151659,"description":2493,"extension":2494,"meta":153749,"navigation":69,"path":2496,"seo":153750,"stem":2498,"__hash__":2499},{"type":7,"value":151660,"toc":153727},[151661,151663,151665,151667,151669,151737,151739,151823,151825,151827,151829,151869,151877,151879,151881,151945,151947,151949,151951,152035,152041,152043,152047,152177,152179,152187,152191,152195,152301,152303,152305,152307,152535,152537,152539,152541,152633,152635,152637,152779,152781,152785,152893,152895,152897,152997,152999,153001,153003,153033,153035,153131,153133,153135,153137,153143,153203,153205,153209,153267,153269,153271,153275,153361,153367,153369,153667,153673,153675,153695,153697,153725],[10,151662,5],{"id":12},[14,151664,17],{"id":16},[19,151666,21],{},[19,151668,24],{},[26,151670,151671],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,151672,151673,151681,151689,151693,151701,151729,151733],{"__ignoreMap":31},[36,151674,151675,151677,151679],{"class":38,"line":39},[36,151676,43],{"class":42},[36,151678,47],{"class":46},[36,151680,51],{"class":50},[36,151682,151683,151685,151687],{"class":38,"line":54},[36,151684,57],{"class":42},[36,151686,47],{"class":46},[36,151688,63],{"class":62},[36,151690,151691],{"class":38,"line":66},[36,151692,70],{"emptyLinePlaceholder":69},[36,151694,151695,151697,151699],{"class":38,"line":73},[36,151696,76],{"class":46},[36,151698,80],{"class":79},[36,151700,83],{"class":42},[36,151702,151703,151705,151707,151709,151711,151713,151715,151717,151719,151721,151723,151725,151727],{"class":38,"line":86},[36,151704,89],{"class":62},[36,151706,92],{"class":42},[36,151708,95],{"class":46},[36,151710,98],{"class":50},[36,151712,101],{"class":62},[36,151714,104],{"class":42},[36,151716,107],{"class":62},[36,151718,110],{"class":50},[36,151720,101],{"class":62},[36,151722,115],{"class":42},[36,151724,107],{"class":62},[36,151726,120],{"class":50},[36,151728,123],{"class":42},[36,151730,151731],{"class":38,"line":126},[36,151732,70],{"emptyLinePlaceholder":69},[36,151734,151735],{"class":38,"line":131},[36,151736,134],{"class":42},[19,151738,137],{},[26,151740,151741],{"className":28,"code":140,"language":30,"meta":31,"style":31},[33,151742,151743,151751,151759,151787,151791,151795,151803,151811,151819],{"__ignoreMap":31},[36,151744,151745,151747,151749],{"class":38,"line":39},[36,151746,147],{"class":46},[36,151748,150],{"class":79},[36,151750,153],{"class":42},[36,151752,151753,151755,151757],{"class":38,"line":54},[36,151754,158],{"class":46},[36,151756,80],{"class":79},[36,151758,163],{"class":42},[36,151760,151761,151763,151765,151767,151769,151771,151773,151775,151777,151779,151781,151783,151785],{"class":38,"line":66},[36,151762,168],{"class":62},[36,151764,92],{"class":42},[36,151766,95],{"class":46},[36,151768,98],{"class":50},[36,151770,177],{"class":62},[36,151772,180],{"class":42},[36,151774,107],{"class":62},[36,151776,110],{"class":50},[36,151778,177],{"class":62},[36,151780,189],{"class":42},[36,151782,107],{"class":62},[36,151784,120],{"class":50},[36,151786,123],{"class":42},[36,151788,151789],{"class":38,"line":73},[36,151790,70],{"emptyLinePlaceholder":69},[36,151792,151793],{"class":38,"line":86},[36,151794,70],{"emptyLinePlaceholder":69},[36,151796,151797,151799,151801],{"class":38,"line":126},[36,151798,208],{"class":42},[36,151800,47],{"class":46},[36,151802,213],{"class":42},[36,151804,151805,151807,151809],{"class":38,"line":131},[36,151806,218],{"class":42},[36,151808,47],{"class":46},[36,151810,51],{"class":50},[36,151812,151813,151815,151817],{"class":38,"line":225},[36,151814,228],{"class":42},[36,151816,47],{"class":46},[36,151818,63],{"class":62},[36,151820,151821],{"class":38,"line":235},[36,151822,238],{"class":42},[19,151824,241],{},[14,151826,245],{"id":244},[19,151828,248],{},[26,151830,151831],{"className":28,"code":251,"language":30,"meta":31,"style":31},[33,151832,151833,151841,151845,151849,151853,151861],{"__ignoreMap":31},[36,151834,151835,151837,151839],{"class":38,"line":39},[36,151836,147],{"class":46},[36,151838,150],{"class":79},[36,151840,153],{"class":42},[36,151842,151843],{"class":38,"line":54},[36,151844,266],{"class":46},[36,151846,151847],{"class":38,"line":66},[36,151848,70],{"emptyLinePlaceholder":69},[36,151850,151851],{"class":38,"line":73},[36,151852,70],{"emptyLinePlaceholder":69},[36,151854,151855,151857,151859],{"class":38,"line":86},[36,151856,279],{"class":42},[36,151858,47],{"class":46},[36,151860,213],{"class":42},[36,151862,151863,151865,151867],{"class":38,"line":126},[36,151864,288],{"class":42},[36,151866,47],{"class":46},[36,151868,213],{"class":42},[19,151870,151871,298,151873,302,151875,306],{},[33,151872,297],{},[33,151874,301],{},[33,151876,305],{},[14,151878,310],{"id":309},[19,151880,313],{},[26,151882,151883],{"className":28,"code":316,"language":30,"meta":31,"style":31},[33,151884,151885,151893,151897,151901,151905,151913,151921,151929,151933,151939],{"__ignoreMap":31},[36,151886,151887,151889,151891],{"class":38,"line":39},[36,151888,147],{"class":46},[36,151890,150],{"class":79},[36,151892,153],{"class":42},[36,151894,151895],{"class":38,"line":54},[36,151896,266],{"class":46},[36,151898,151899],{"class":38,"line":66},[36,151900,70],{"emptyLinePlaceholder":69},[36,151902,151903],{"class":38,"line":73},[36,151904,70],{"emptyLinePlaceholder":69},[36,151906,151907,151909,151911],{"class":38,"line":86},[36,151908,208],{"class":42},[36,151910,47],{"class":46},[36,151912,213],{"class":42},[36,151914,151915,151917,151919],{"class":38,"line":126},[36,151916,218],{"class":42},[36,151918,47],{"class":46},[36,151920,51],{"class":50},[36,151922,151923,151925,151927],{"class":38,"line":131},[36,151924,228],{"class":42},[36,151926,47],{"class":46},[36,151928,63],{"class":62},[36,151930,151931],{"class":38,"line":225},[36,151932,70],{"emptyLinePlaceholder":69},[36,151934,151935,151937],{"class":38,"line":235},[36,151936,371],{"class":62},[36,151938,374],{"class":42},[36,151940,151941,151943],{"class":38,"line":377},[36,151942,371],{"class":62},[36,151944,382],{"class":42},[19,151946,385],{},[14,151948,389],{"id":388},[19,151950,392],{},[26,151952,151953],{"className":28,"code":140,"language":30,"meta":31,"style":31},[33,151954,151955,151963,151971,151999,152003,152007,152015,152023,152031],{"__ignoreMap":31},[36,151956,151957,151959,151961],{"class":38,"line":39},[36,151958,147],{"class":46},[36,151960,150],{"class":79},[36,151962,153],{"class":42},[36,151964,151965,151967,151969],{"class":38,"line":54},[36,151966,158],{"class":46},[36,151968,80],{"class":79},[36,151970,163],{"class":42},[36,151972,151973,151975,151977,151979,151981,151983,151985,151987,151989,151991,151993,151995,151997],{"class":38,"line":66},[36,151974,168],{"class":62},[36,151976,92],{"class":42},[36,151978,95],{"class":46},[36,151980,98],{"class":50},[36,151982,177],{"class":62},[36,151984,180],{"class":42},[36,151986,107],{"class":62},[36,151988,110],{"class":50},[36,151990,177],{"class":62},[36,151992,189],{"class":42},[36,151994,107],{"class":62},[36,151996,120],{"class":50},[36,151998,123],{"class":42},[36,152000,152001],{"class":38,"line":73},[36,152002,70],{"emptyLinePlaceholder":69},[36,152004,152005],{"class":38,"line":86},[36,152006,70],{"emptyLinePlaceholder":69},[36,152008,152009,152011,152013],{"class":38,"line":126},[36,152010,208],{"class":42},[36,152012,47],{"class":46},[36,152014,213],{"class":42},[36,152016,152017,152019,152021],{"class":38,"line":131},[36,152018,218],{"class":42},[36,152020,47],{"class":46},[36,152022,51],{"class":50},[36,152024,152025,152027,152029],{"class":38,"line":225},[36,152026,228],{"class":42},[36,152028,47],{"class":46},[36,152030,63],{"class":62},[36,152032,152033],{"class":38,"line":235},[36,152034,238],{"class":42},[19,152036,152037,482,152039,485],{},[33,152038,481],{},[33,152040,481],{},[14,152042,489],{"id":488},[19,152044,152045,495],{},[33,152046,494],{},[26,152048,152049],{"className":28,"code":498,"language":30,"meta":31,"style":31},[33,152050,152051,152059,152067,152077,152087,152097,152101,152109,152145,152149,152153,152173],{"__ignoreMap":31},[36,152052,152053,152055,152057],{"class":38,"line":39},[36,152054,147],{"class":46},[36,152056,150],{"class":79},[36,152058,153],{"class":42},[36,152060,152061,152063,152065],{"class":38,"line":54},[36,152062,158],{"class":46},[36,152064,515],{"class":62},[36,152066,518],{"class":42},[36,152068,152069,152071,152073,152075],{"class":38,"line":66},[36,152070,523],{"class":62},[36,152072,526],{"class":42},[36,152074,47],{"class":46},[36,152076,531],{"class":42},[36,152078,152079,152081,152083,152085],{"class":38,"line":73},[36,152080,523],{"class":62},[36,152082,538],{"class":42},[36,152084,47],{"class":46},[36,152086,543],{"class":42},[36,152088,152089,152091,152093,152095],{"class":38,"line":86},[36,152090,523],{"class":62},[36,152092,550],{"class":42},[36,152094,47],{"class":46},[36,152096,555],{"class":42},[36,152098,152099],{"class":38,"line":126},[36,152100,70],{"emptyLinePlaceholder":69},[36,152102,152103,152105,152107],{"class":38,"line":131},[36,152104,158],{"class":46},[36,152106,80],{"class":79},[36,152108,163],{"class":42},[36,152110,152111,152113,152115,152117,152119,152121,152123,152125,152127,152129,152131,152133,152135,152137,152139,152141,152143],{"class":38,"line":225},[36,152112,168],{"class":62},[36,152114,92],{"class":42},[36,152116,95],{"class":46},[36,152118,98],{"class":50},[36,152120,177],{"class":62},[36,152122,180],{"class":42},[36,152124,107],{"class":62},[36,152126,110],{"class":50},[36,152128,177],{"class":62},[36,152130,189],{"class":42},[36,152132,107],{"class":62},[36,152134,594],{"class":50},[36,152136,177],{"class":62},[36,152138,599],{"class":42},[36,152140,107],{"class":62},[36,152142,604],{"class":50},[36,152144,123],{"class":42},[36,152146,152147],{"class":38,"line":235},[36,152148,70],{"emptyLinePlaceholder":69},[36,152150,152151],{"class":38,"line":377},[36,152152,70],{"emptyLinePlaceholder":69},[36,152154,152155,152157,152159,152161,152163,152165,152167,152169,152171],{"class":38,"line":617},[36,152156,208],{"class":42},[36,152158,47],{"class":46},[36,152160,624],{"class":42},[36,152162,627],{"class":50},[36,152164,630],{"class":42},[36,152166,633],{"class":62},[36,152168,630],{"class":42},[36,152170,638],{"class":62},[36,152172,123],{"class":42},[36,152174,152175],{"class":38,"line":643},[36,152176,238],{"class":42},[19,152178,648],{},[650,152180,152181,152183,152185],{},[653,152182,655],{},[653,152184,658],{},[653,152186,661],{},[14,152188,665,152189],{"id":664},[667,152190,669],{},[19,152192,672,152193,676],{},[33,152194,675],{},[26,152196,152197],{"className":28,"code":679,"language":30,"meta":31,"style":31},[33,152198,152199,152207,152215,152225,152235,152239,152247,152271,152275,152279,152295],{"__ignoreMap":31},[36,152200,152201,152203,152205],{"class":38,"line":39},[36,152202,147],{"class":46},[36,152204,150],{"class":79},[36,152206,153],{"class":42},[36,152208,152209,152211,152213],{"class":38,"line":54},[36,152210,158],{"class":46},[36,152212,515],{"class":62},[36,152214,698],{"class":42},[36,152216,152217,152219,152221,152223],{"class":38,"line":66},[36,152218,523],{"class":62},[36,152220,526],{"class":42},[36,152222,47],{"class":46},[36,152224,531],{"class":42},[36,152226,152227,152229,152231,152233],{"class":38,"line":73},[36,152228,523],{"class":62},[36,152230,538],{"class":42},[36,152232,47],{"class":46},[36,152234,543],{"class":42},[36,152236,152237],{"class":38,"line":86},[36,152238,70],{"emptyLinePlaceholder":69},[36,152240,152241,152243,152245],{"class":38,"line":126},[36,152242,158],{"class":46},[36,152244,729],{"class":62},[36,152246,163],{"class":42},[36,152248,152249,152251,152253,152255,152257,152259,152261,152263,152265,152267,152269],{"class":38,"line":131},[36,152250,736],{"class":46},[36,152252,739],{"class":46},[36,152254,742],{"class":50},[36,152256,177],{"class":62},[36,152258,180],{"class":42},[36,152260,107],{"class":62},[36,152262,751],{"class":50},[36,152264,177],{"class":62},[36,152266,189],{"class":42},[36,152268,107],{"class":62},[36,152270,760],{"class":50},[36,152272,152273],{"class":38,"line":225},[36,152274,70],{"emptyLinePlaceholder":69},[36,152276,152277],{"class":38,"line":235},[36,152278,70],{"emptyLinePlaceholder":69},[36,152280,152281,152283,152285,152287,152289,152291,152293],{"class":38,"line":377},[36,152282,208],{"class":42},[36,152284,47],{"class":46},[36,152286,624],{"class":42},[36,152288,627],{"class":50},[36,152290,630],{"class":42},[36,152292,633],{"class":62},[36,152294,123],{"class":42},[36,152296,152297,152299],{"class":38,"line":617},[36,152298,371],{"class":62},[36,152300,791],{"class":42},[14,152302,795],{"id":794},[19,152304,798],{},[19,152306,801],{},[26,152308,152309],{"className":28,"code":804,"language":30,"meta":31,"style":31},[33,152310,152311,152319,152327,152337,152347,152351,152359,152367,152371,152379,152391,152401,152405,152415,152419,152427,152439,152449,152453,152465,152475,152479,152489,152493,152497,152513,152521,152529],{"__ignoreMap":31},[36,152312,152313,152315,152317],{"class":38,"line":39},[36,152314,147],{"class":46},[36,152316,813],{"class":79},[36,152318,153],{"class":42},[36,152320,152321,152323,152325],{"class":38,"line":54},[36,152322,158],{"class":46},[36,152324,515],{"class":62},[36,152326,824],{"class":42},[36,152328,152329,152331,152333,152335],{"class":38,"line":66},[36,152330,523],{"class":62},[36,152332,831],{"class":42},[36,152334,47],{"class":46},[36,152336,836],{"class":42},[36,152338,152339,152341,152343,152345],{"class":38,"line":73},[36,152340,523],{"class":62},[36,152342,843],{"class":42},[36,152344,47],{"class":46},[36,152346,848],{"class":42},[36,152348,152349],{"class":38,"line":86},[36,152350,70],{"emptyLinePlaceholder":69},[36,152352,152353,152355,152357],{"class":38,"line":126},[36,152354,158],{"class":46},[36,152356,859],{"class":79},[36,152358,163],{"class":42},[36,152360,152361,152363,152365],{"class":38,"line":131},[36,152362,736],{"class":46},[36,152364,868],{"class":62},[36,152366,871],{"class":42},[36,152368,152369],{"class":38,"line":225},[36,152370,70],{"emptyLinePlaceholder":69},[36,152372,152373,152375,152377],{"class":38,"line":235},[36,152374,158],{"class":46},[36,152376,882],{"class":79},[36,152378,885],{"class":42},[36,152380,152381,152383,152385,152387,152389],{"class":38,"line":377},[36,152382,890],{"class":46},[36,152384,893],{"class":42},[36,152386,896],{"class":46},[36,152388,899],{"class":62},[36,152390,153],{"class":42},[36,152392,152393,152395,152397,152399],{"class":38,"line":617},[36,152394,906],{"class":62},[36,152396,92],{"class":42},[36,152398,911],{"class":50},[36,152400,123],{"class":42},[36,152402,152403],{"class":38,"line":643},[36,152404,918],{"class":46},[36,152406,152407,152409,152411,152413],{"class":38,"line":921},[36,152408,523],{"class":62},[36,152410,843],{"class":42},[36,152412,928],{"class":46},[36,152414,931],{"class":42},[36,152416,152417],{"class":38,"line":934},[36,152418,70],{"emptyLinePlaceholder":69},[36,152420,152421,152423,152425],{"class":38,"line":939},[36,152422,158],{"class":46},[36,152424,944],{"class":79},[36,152426,885],{"class":42},[36,152428,152429,152431,152433,152435,152437],{"class":38,"line":949},[36,152430,890],{"class":46},[36,152432,893],{"class":42},[36,152434,896],{"class":46},[36,152436,899],{"class":62},[36,152438,153],{"class":42},[36,152440,152441,152443,152445,152447],{"class":38,"line":962},[36,152442,906],{"class":62},[36,152444,92],{"class":42},[36,152446,969],{"class":50},[36,152448,123],{"class":42},[36,152450,152451],{"class":38,"line":974},[36,152452,918],{"class":46},[36,152454,152455,152457,152459,152461,152463],{"class":38,"line":979},[36,152456,890],{"class":46},[36,152458,893],{"class":42},[36,152460,986],{"class":46},[36,152462,868],{"class":62},[36,152464,991],{"class":42},[36,152466,152467,152469,152471,152473],{"class":38,"line":994},[36,152468,906],{"class":62},[36,152470,92],{"class":42},[36,152472,1001],{"class":50},[36,152474,123],{"class":42},[36,152476,152477],{"class":38,"line":1006},[36,152478,918],{"class":46},[36,152480,152481,152483,152485,152487],{"class":38,"line":1011},[36,152482,523],{"class":62},[36,152484,843],{"class":42},[36,152486,1018],{"class":46},[36,152488,931],{"class":42},[36,152490,152491],{"class":38,"line":1023},[36,152492,70],{"emptyLinePlaceholder":69},[36,152494,152495],{"class":38,"line":1028},[36,152496,70],{"emptyLinePlaceholder":69},[36,152498,152499,152501,152503,152505,152507,152509,152511],{"class":38,"line":1033},[36,152500,1036],{"class":42},[36,152502,47],{"class":46},[36,152504,1041],{"class":42},[36,152506,627],{"class":50},[36,152508,630],{"class":42},[36,152510,1048],{"class":62},[36,152512,123],{"class":42},[36,152514,152515,152517,152519],{"class":38,"line":1053},[36,152516,1056],{"class":42},[36,152518,1059],{"class":62},[36,152520,123],{"class":42},[36,152522,152523,152525,152527],{"class":38,"line":1064},[36,152524,1067],{"class":42},[36,152526,1070],{"class":62},[36,152528,123],{"class":42},[36,152530,152531,152533],{"class":38,"line":1075},[36,152532,371],{"class":62},[36,152534,1080],{"class":42},[19,152536,1083],{},[14,152538,1087],{"id":1086},[19,152540,1090],{},[26,152542,152543],{"className":28,"code":1093,"language":30,"meta":31,"style":31},[33,152544,152545,152553,152561,152571,152575,152579,152591,152599,152609,152613,152617,152625,152629],{"__ignoreMap":31},[36,152546,152547,152549,152551],{"class":38,"line":39},[36,152548,147],{"class":46},[36,152550,1102],{"class":79},[36,152552,153],{"class":42},[36,152554,152555,152557,152559],{"class":38,"line":54},[36,152556,158],{"class":46},[36,152558,1111],{"class":79},[36,152560,163],{"class":42},[36,152562,152563,152565,152567,152569],{"class":38,"line":66},[36,152564,168],{"class":62},[36,152566,92],{"class":42},[36,152568,1122],{"class":50},[36,152570,123],{"class":42},[36,152572,152573],{"class":38,"line":73},[36,152574,70],{"emptyLinePlaceholder":69},[36,152576,152577],{"class":38,"line":86},[36,152578,70],{"emptyLinePlaceholder":69},[36,152580,152581,152583,152585,152587,152589],{"class":38,"line":126},[36,152582,147],{"class":46},[36,152584,1139],{"class":79},[36,152586,92],{"class":42},[36,152588,1144],{"class":79},[36,152590,1147],{"class":42},[36,152592,152593,152595,152597],{"class":38,"line":131},[36,152594,158],{"class":46},[36,152596,1154],{"class":79},[36,152598,163],{"class":42},[36,152600,152601,152603,152605,152607],{"class":38,"line":225},[36,152602,168],{"class":62},[36,152604,92],{"class":42},[36,152606,1165],{"class":50},[36,152608,123],{"class":42},[36,152610,152611],{"class":38,"line":235},[36,152612,70],{"emptyLinePlaceholder":69},[36,152614,152615],{"class":38,"line":377},[36,152616,70],{"emptyLinePlaceholder":69},[36,152618,152619,152621,152623],{"class":38,"line":617},[36,152620,1180],{"class":42},[36,152622,47],{"class":46},[36,152624,1185],{"class":42},[36,152626,152627],{"class":38,"line":643},[36,152628,1190],{"class":42},[36,152630,152631],{"class":38,"line":921},[36,152632,1195],{"class":42},[19,152634,1198],{},[14,152636,1202],{"id":1201},[26,152638,152639],{"className":28,"code":1205,"language":30,"meta":31,"style":31},[33,152640,152641,152649,152657,152667,152671,152675,152687,152695,152705,152709,152713,152725,152733,152743,152747,152751,152759,152767,152771,152775],{"__ignoreMap":31},[36,152642,152643,152645,152647],{"class":38,"line":39},[36,152644,147],{"class":46},[36,152646,1102],{"class":79},[36,152648,153],{"class":42},[36,152650,152651,152653,152655],{"class":38,"line":54},[36,152652,158],{"class":46},[36,152654,1222],{"class":79},[36,152656,163],{"class":42},[36,152658,152659,152661,152663,152665],{"class":38,"line":66},[36,152660,168],{"class":62},[36,152662,92],{"class":42},[36,152664,1233],{"class":50},[36,152666,123],{"class":42},[36,152668,152669],{"class":38,"line":73},[36,152670,70],{"emptyLinePlaceholder":69},[36,152672,152673],{"class":38,"line":86},[36,152674,70],{"emptyLinePlaceholder":69},[36,152676,152677,152679,152681,152683,152685],{"class":38,"line":126},[36,152678,147],{"class":46},[36,152680,1139],{"class":79},[36,152682,92],{"class":42},[36,152684,1144],{"class":79},[36,152686,1147],{"class":42},[36,152688,152689,152691,152693],{"class":38,"line":131},[36,152690,158],{"class":46},[36,152692,1222],{"class":79},[36,152694,163],{"class":42},[36,152696,152697,152699,152701,152703],{"class":38,"line":225},[36,152698,168],{"class":62},[36,152700,92],{"class":42},[36,152702,1165],{"class":50},[36,152704,123],{"class":42},[36,152706,152707],{"class":38,"line":235},[36,152708,70],{"emptyLinePlaceholder":69},[36,152710,152711],{"class":38,"line":377},[36,152712,70],{"emptyLinePlaceholder":69},[36,152714,152715,152717,152719,152721,152723],{"class":38,"line":617},[36,152716,147],{"class":46},[36,152718,1288],{"class":79},[36,152720,92],{"class":42},[36,152722,1144],{"class":79},[36,152724,1147],{"class":42},[36,152726,152727,152729,152731],{"class":38,"line":643},[36,152728,158],{"class":46},[36,152730,1222],{"class":79},[36,152732,163],{"class":42},[36,152734,152735,152737,152739,152741],{"class":38,"line":921},[36,152736,168],{"class":62},[36,152738,92],{"class":42},[36,152740,1311],{"class":50},[36,152742,123],{"class":42},[36,152744,152745],{"class":38,"line":934},[36,152746,70],{"emptyLinePlaceholder":69},[36,152748,152749],{"class":38,"line":939},[36,152750,70],{"emptyLinePlaceholder":69},[36,152752,152753,152755,152757],{"class":38,"line":949},[36,152754,1180],{"class":42},[36,152756,47],{"class":46},[36,152758,1185],{"class":42},[36,152760,152761,152763,152765],{"class":38,"line":962},[36,152762,1334],{"class":42},[36,152764,47],{"class":46},[36,152766,1339],{"class":42},[36,152768,152769],{"class":38,"line":974},[36,152770,70],{"emptyLinePlaceholder":69},[36,152772,152773],{"class":38,"line":979},[36,152774,1348],{"class":42},[36,152776,152777],{"class":38,"line":994},[36,152778,1353],{"class":42},[14,152780,1357],{"id":1356},[19,152782,1360,152783,1364],{},[33,152784,1363],{},[26,152786,152787],{"className":28,"code":1367,"language":30,"meta":31,"style":31},[33,152788,152789,152797,152805,152815,152819,152823,152835,152843,152853,152863,152867,152871,152887],{"__ignoreMap":31},[36,152790,152791,152793,152795],{"class":38,"line":39},[36,152792,147],{"class":46},[36,152794,1376],{"class":79},[36,152796,153],{"class":42},[36,152798,152799,152801,152803],{"class":38,"line":54},[36,152800,158],{"class":46},[36,152802,515],{"class":62},[36,152804,1387],{"class":42},[36,152806,152807,152809,152811,152813],{"class":38,"line":66},[36,152808,523],{"class":62},[36,152810,526],{"class":42},[36,152812,47],{"class":46},[36,152814,531],{"class":42},[36,152816,152817],{"class":38,"line":73},[36,152818,70],{"emptyLinePlaceholder":69},[36,152820,152821],{"class":38,"line":86},[36,152822,70],{"emptyLinePlaceholder":69},[36,152824,152825,152827,152829,152831,152833],{"class":38,"line":126},[36,152826,147],{"class":46},[36,152828,150],{"class":79},[36,152830,92],{"class":42},[36,152832,1416],{"class":79},[36,152834,1147],{"class":42},[36,152836,152837,152839,152841],{"class":38,"line":131},[36,152838,158],{"class":46},[36,152840,515],{"class":62},[36,152842,1427],{"class":42},[36,152844,152845,152847,152849,152851],{"class":38,"line":225},[36,152846,1432],{"class":62},[36,152848,1435],{"class":42},[36,152850,494],{"class":62},[36,152852,1440],{"class":42},[36,152854,152855,152857,152859,152861],{"class":38,"line":235},[36,152856,523],{"class":62},[36,152858,550],{"class":42},[36,152860,47],{"class":46},[36,152862,555],{"class":42},[36,152864,152865],{"class":38,"line":377},[36,152866,70],{"emptyLinePlaceholder":69},[36,152868,152869],{"class":38,"line":617},[36,152870,70],{"emptyLinePlaceholder":69},[36,152872,152873,152875,152877,152879,152881,152883,152885],{"class":38,"line":643},[36,152874,208],{"class":42},[36,152876,47],{"class":46},[36,152878,624],{"class":42},[36,152880,627],{"class":50},[36,152882,630],{"class":42},[36,152884,638],{"class":62},[36,152886,123],{"class":42},[36,152888,152889,152891],{"class":38,"line":921},[36,152890,371],{"class":62},[36,152892,1481],{"class":42},[14,152894,1485],{"id":1484},[19,152896,1488],{},[26,152898,152899],{"className":28,"code":1491,"language":30,"meta":31,"style":31},[33,152900,152901,152909,152917,152927,152931,152935,152943,152951,152961,152965,152969,152977,152981,152985,152989,152993],{"__ignoreMap":31},[36,152902,152903,152905,152907],{"class":38,"line":39},[36,152904,147],{"class":46},[36,152906,1139],{"class":79},[36,152908,153],{"class":42},[36,152910,152911,152913,152915],{"class":38,"line":54},[36,152912,158],{"class":46},[36,152914,1222],{"class":79},[36,152916,163],{"class":42},[36,152918,152919,152921,152923,152925],{"class":38,"line":66},[36,152920,168],{"class":62},[36,152922,92],{"class":42},[36,152924,1165],{"class":50},[36,152926,123],{"class":42},[36,152928,152929],{"class":38,"line":73},[36,152930,70],{"emptyLinePlaceholder":69},[36,152932,152933],{"class":38,"line":86},[36,152934,70],{"emptyLinePlaceholder":69},[36,152936,152937,152939,152941],{"class":38,"line":126},[36,152938,147],{"class":46},[36,152940,1288],{"class":79},[36,152942,153],{"class":42},[36,152944,152945,152947,152949],{"class":38,"line":131},[36,152946,158],{"class":46},[36,152948,1222],{"class":79},[36,152950,163],{"class":42},[36,152952,152953,152955,152957,152959],{"class":38,"line":225},[36,152954,168],{"class":62},[36,152956,92],{"class":42},[36,152958,1311],{"class":50},[36,152960,123],{"class":42},[36,152962,152963],{"class":38,"line":235},[36,152964,70],{"emptyLinePlaceholder":69},[36,152966,152967],{"class":38,"line":377},[36,152968,70],{"emptyLinePlaceholder":69},[36,152970,152971,152973,152975],{"class":38,"line":617},[36,152972,76],{"class":46},[36,152974,1568],{"class":79},[36,152976,1571],{"class":42},[36,152978,152979],{"class":38,"line":643},[36,152980,1576],{"class":42},[36,152982,152983],{"class":38,"line":921},[36,152984,70],{"emptyLinePlaceholder":69},[36,152986,152987],{"class":38,"line":934},[36,152988,70],{"emptyLinePlaceholder":69},[36,152990,152991],{"class":38,"line":939},[36,152992,1589],{"class":42},[36,152994,152995],{"class":38,"line":949},[36,152996,1594],{"class":42},[19,152998,1597],{},[14,153000,1601],{"id":1600},[19,153002,1604],{},[26,153004,153005],{"className":28,"code":1607,"language":30,"meta":31,"style":31},[33,153006,153007,153015,153023],{"__ignoreMap":31},[36,153008,153009,153011,153013],{"class":38,"line":39},[36,153010,147],{"class":46},[36,153012,150],{"class":79},[36,153014,153],{"class":42},[36,153016,153017,153019,153021],{"class":38,"line":54},[36,153018,158],{"class":46},[36,153020,515],{"class":62},[36,153022,1387],{"class":42},[36,153024,153025,153027,153029,153031],{"class":38,"line":66},[36,153026,523],{"class":62},[36,153028,526],{"class":42},[36,153030,47],{"class":46},[36,153032,531],{"class":42},[19,153034,1638],{},[26,153036,153037],{"className":28,"code":1641,"language":30,"meta":31,"style":31},[33,153038,153039,153047,153055,153059,153067,153077,153081,153085,153097,153109,153113,153119,153125],{"__ignoreMap":31},[36,153040,153041,153043,153045],{"class":38,"line":39},[36,153042,147],{"class":46},[36,153044,150],{"class":79},[36,153046,153],{"class":42},[36,153048,153049,153051,153053],{"class":38,"line":54},[36,153050,1656],{"class":42},[36,153052,47],{"class":46},[36,153054,1661],{"class":50},[36,153056,153057],{"class":38,"line":66},[36,153058,70],{"emptyLinePlaceholder":69},[36,153060,153061,153063,153065],{"class":38,"line":73},[36,153062,158],{"class":46},[36,153064,515],{"class":62},[36,153066,1387],{"class":42},[36,153068,153069,153071,153073,153075],{"class":38,"line":86},[36,153070,523],{"class":62},[36,153072,526],{"class":42},[36,153074,47],{"class":46},[36,153076,531],{"class":42},[36,153078,153079],{"class":38,"line":126},[36,153080,70],{"emptyLinePlaceholder":69},[36,153082,153083],{"class":38,"line":131},[36,153084,70],{"emptyLinePlaceholder":69},[36,153086,153087,153089,153091,153093,153095],{"class":38,"line":225},[36,153088,1696],{"class":42},[36,153090,47],{"class":46},[36,153092,624],{"class":42},[36,153094,627],{"class":50},[36,153096,123],{"class":42},[36,153098,153099,153101,153103,153105,153107],{"class":38,"line":235},[36,153100,1709],{"class":42},[36,153102,47],{"class":46},[36,153104,624],{"class":42},[36,153106,1716],{"class":50},[36,153108,123],{"class":42},[36,153110,153111],{"class":38,"line":377},[36,153112,70],{"emptyLinePlaceholder":69},[36,153114,153115,153117],{"class":38,"line":617},[36,153116,371],{"class":62},[36,153118,1729],{"class":42},[36,153120,153121,153123],{"class":38,"line":643},[36,153122,371],{"class":62},[36,153124,1736],{"class":42},[36,153126,153127,153129],{"class":38,"line":921},[36,153128,371],{"class":62},[36,153130,1743],{"class":42},[19,153132,1746],{},[14,153134,1750],{"id":1749},[1752,153136,1755],{"id":1754},[19,153138,1758,153139,1762,153141,676],{},[33,153140,1761],{},[33,153142,1765],{},[26,153144,153145],{"className":28,"code":1768,"language":30,"meta":31,"style":31},[33,153146,153147,153155,153163,153167,153173,153181,153189,153193,153197],{"__ignoreMap":31},[36,153148,153149,153151,153153],{"class":38,"line":39},[36,153150,147],{"class":46},[36,153152,150],{"class":79},[36,153154,153],{"class":42},[36,153156,153157,153159,153161],{"class":38,"line":54},[36,153158,1656],{"class":42},[36,153160,47],{"class":46},[36,153162,1661],{"class":50},[36,153164,153165],{"class":38,"line":66},[36,153166,70],{"emptyLinePlaceholder":69},[36,153168,153169,153171],{"class":38,"line":73},[36,153170,1795],{"class":79},[36,153172,1798],{"class":62},[36,153174,153175,153177,153179],{"class":38,"line":86},[36,153176,158],{"class":46},[36,153178,1805],{"class":79},[36,153180,1808],{"class":42},[36,153182,153183,153185,153187],{"class":38,"line":126},[36,153184,736],{"class":46},[36,153186,1815],{"class":62},[36,153188,1818],{"class":42},[36,153190,153191],{"class":38,"line":131},[36,153192,70],{"emptyLinePlaceholder":69},[36,153194,153195],{"class":38,"line":225},[36,153196,70],{"emptyLinePlaceholder":69},[36,153198,153199,153201],{"class":38,"line":235},[36,153200,371],{"class":62},[36,153202,1833],{"class":42},[1752,153204,1837],{"id":1836},[19,153206,1840,153207,1844],{},[33,153208,1843],{},[26,153210,153211],{"className":28,"code":1847,"language":30,"meta":31,"style":31},[33,153212,153213,153221,153227,153235,153245,153249,153253],{"__ignoreMap":31},[36,153214,153215,153217,153219],{"class":38,"line":39},[36,153216,147],{"class":46},[36,153218,1856],{"class":79},[36,153220,153],{"class":42},[36,153222,153223,153225],{"class":38,"line":54},[36,153224,1795],{"class":79},[36,153226,1865],{"class":62},[36,153228,153229,153231,153233],{"class":38,"line":66},[36,153230,158],{"class":46},[36,153232,1872],{"class":79},[36,153234,1875],{"class":42},[36,153236,153237,153239,153241,153243],{"class":38,"line":73},[36,153238,736],{"class":46},[36,153240,1882],{"class":42},[36,153242,1885],{"class":46},[36,153244,1888],{"class":42},[36,153246,153247],{"class":38,"line":86},[36,153248,70],{"emptyLinePlaceholder":69},[36,153250,153251],{"class":38,"line":126},[36,153252,70],{"emptyLinePlaceholder":69},[36,153254,153255,153257,153259,153261,153263,153265],{"class":38,"line":131},[36,153256,371],{"class":62},[36,153258,1903],{"class":42},[36,153260,1906],{"class":62},[36,153262,630],{"class":42},[36,153264,1911],{"class":62},[36,153266,1914],{"class":42},[19,153268,1917],{},[14,153270,1921],{"id":1920},[19,153272,153273,1927],{},[33,153274,1926],{},[26,153276,153277],{"className":28,"code":1930,"language":30,"meta":31,"style":31},[33,153278,153279,153289,153293,153297,153301,153309,153315,153321,153327,153331,153335,153355],{"__ignoreMap":31},[36,153280,153281,153283,153285,153287],{"class":38,"line":39},[36,153282,1937],{"class":46},[36,153284,1940],{"class":42},[36,153286,1943],{"class":46},[36,153288,1946],{"class":42},[36,153290,153291],{"class":38,"line":54},[36,153292,70],{"emptyLinePlaceholder":69},[36,153294,153295],{"class":38,"line":66},[36,153296,70],{"emptyLinePlaceholder":69},[36,153298,153299],{"class":38,"line":73},[36,153300,1959],{"class":79},[36,153302,153303,153305,153307],{"class":38,"line":86},[36,153304,147],{"class":46},[36,153306,150],{"class":79},[36,153308,153],{"class":42},[36,153310,153311,153313],{"class":38,"line":126},[36,153312,1972],{"class":42},[36,153314,1975],{"class":62},[36,153316,153317,153319],{"class":38,"line":131},[36,153318,1980],{"class":42},[36,153320,1983],{"class":62},[36,153322,153323,153325],{"class":38,"line":225},[36,153324,1988],{"class":42},[36,153326,1991],{"class":62},[36,153328,153329],{"class":38,"line":235},[36,153330,70],{"emptyLinePlaceholder":69},[36,153332,153333],{"class":38,"line":377},[36,153334,70],{"emptyLinePlaceholder":69},[36,153336,153337,153339,153341,153343,153345,153347,153349,153351,153353],{"class":38,"line":617},[36,153338,208],{"class":42},[36,153340,47],{"class":46},[36,153342,624],{"class":42},[36,153344,627],{"class":50},[36,153346,630],{"class":42},[36,153348,633],{"class":62},[36,153350,630],{"class":42},[36,153352,638],{"class":62},[36,153354,123],{"class":42},[36,153356,153357,153359],{"class":38,"line":643},[36,153358,371],{"class":62},[36,153360,791],{"class":42},[19,153362,2028,153363,2031,153365,2035],{},[33,153364,494],{},[33,153366,2034],{},[14,153368,2039],{"id":2038},[26,153370,153371],{"className":28,"code":2042,"language":30,"meta":31,"style":31},[33,153372,153373,153381,153389,153399,153409,153419,153429,153433,153441,153453,153457,153465,153471,153481,153491,153501,153511,153515,153519,153525,153533,153541,153549,153557,153565,153573,153577,153581,153589,153623,153627,153631,153655,153661],{"__ignoreMap":31},[36,153374,153375,153377,153379],{"class":38,"line":39},[36,153376,147],{"class":46},[36,153378,150],{"class":79},[36,153380,153],{"class":42},[36,153382,153383,153385,153387],{"class":38,"line":54},[36,153384,158],{"class":46},[36,153386,515],{"class":62},[36,153388,2061],{"class":42},[36,153390,153391,153393,153395,153397],{"class":38,"line":66},[36,153392,523],{"class":62},[36,153394,2068],{"class":42},[36,153396,47],{"class":46},[36,153398,2073],{"class":42},[36,153400,153401,153403,153405,153407],{"class":38,"line":73},[36,153402,523],{"class":62},[36,153404,526],{"class":42},[36,153406,47],{"class":46},[36,153408,531],{"class":42},[36,153410,153411,153413,153415,153417],{"class":38,"line":86},[36,153412,523],{"class":62},[36,153414,538],{"class":42},[36,153416,47],{"class":46},[36,153418,543],{"class":42},[36,153420,153421,153423,153425,153427],{"class":38,"line":126},[36,153422,523],{"class":62},[36,153424,550],{"class":42},[36,153426,47],{"class":46},[36,153428,555],{"class":42},[36,153430,153431],{"class":38,"line":131},[36,153432,70],{"emptyLinePlaceholder":69},[36,153434,153435,153437,153439],{"class":38,"line":225},[36,153436,158],{"class":46},[36,153438,2114],{"class":79},[36,153440,163],{"class":42},[36,153442,153443,153445,153447,153449,153451],{"class":38,"line":235},[36,153444,736],{"class":46},[36,153446,868],{"class":62},[36,153448,550],{"class":42},[36,153450,2127],{"class":46},[36,153452,2130],{"class":62},[36,153454,153455],{"class":38,"line":377},[36,153456,70],{"emptyLinePlaceholder":69},[36,153458,153459,153461,153463],{"class":38,"line":617},[36,153460,158],{"class":46},[36,153462,2141],{"class":79},[36,153464,163],{"class":42},[36,153466,153467,153469],{"class":38,"line":643},[36,153468,736],{"class":46},[36,153470,2150],{"class":42},[36,153472,153473,153475,153477,153479],{"class":38,"line":921},[36,153474,2155],{"class":50},[36,153476,2158],{"class":42},[36,153478,481],{"class":62},[36,153480,2163],{"class":42},[36,153482,153483,153485,153487,153489],{"class":38,"line":934},[36,153484,2168],{"class":50},[36,153486,2158],{"class":42},[36,153488,481],{"class":62},[36,153490,2175],{"class":42},[36,153492,153493,153495,153497,153499],{"class":38,"line":939},[36,153494,2180],{"class":50},[36,153496,2158],{"class":42},[36,153498,481],{"class":62},[36,153500,2187],{"class":42},[36,153502,153503,153505,153507,153509],{"class":38,"line":949},[36,153504,2192],{"class":50},[36,153506,2158],{"class":42},[36,153508,481],{"class":62},[36,153510,2199],{"class":42},[36,153512,153513],{"class":38,"line":962},[36,153514,2204],{"class":42},[36,153516,153517],{"class":38,"line":974},[36,153518,70],{"emptyLinePlaceholder":69},[36,153520,153521,153523],{"class":38,"line":979},[36,153522,1795],{"class":79},[36,153524,1798],{"class":62},[36,153526,153527,153529,153531],{"class":38,"line":994},[36,153528,158],{"class":46},[36,153530,2221],{"class":79},[36,153532,2224],{"class":42},[36,153534,153535,153537,153539],{"class":38,"line":1006},[36,153536,736],{"class":46},[36,153538,1815],{"class":62},[36,153540,2233],{"class":42},[36,153542,153543,153545,153547],{"class":38,"line":1011},[36,153544,2238],{"class":42},[36,153546,2241],{"class":50},[36,153548,2244],{"class":42},[36,153550,153551,153553,153555],{"class":38,"line":1023},[36,153552,2238],{"class":42},[36,153554,2251],{"class":50},[36,153556,2244],{"class":42},[36,153558,153559,153561,153563],{"class":38,"line":1028},[36,153560,2238],{"class":42},[36,153562,2260],{"class":50},[36,153564,2244],{"class":42},[36,153566,153567,153569,153571],{"class":38,"line":1033},[36,153568,2238],{"class":42},[36,153570,2269],{"class":50},[36,153572,2244],{"class":42},[36,153574,153575],{"class":38,"line":1053},[36,153576,2276],{"class":42},[36,153578,153579],{"class":38,"line":1064},[36,153580,70],{"emptyLinePlaceholder":69},[36,153582,153583,153585,153587],{"class":38,"line":1075},[36,153584,158],{"class":46},[36,153586,729],{"class":62},[36,153588,163],{"class":42},[36,153590,153591,153593,153595,153597,153599,153601,153603,153605,153607,153609,153611,153613,153615,153617,153619,153621],{"class":38,"line":2291},[36,153592,736],{"class":46},[36,153594,739],{"class":46},[36,153596,604],{"class":50},[36,153598,177],{"class":62},[36,153600,2302],{"class":42},[36,153602,107],{"class":62},[36,153604,2307],{"class":62},[36,153606,180],{"class":42},[36,153608,107],{"class":62},[36,153610,2307],{"class":62},[36,153612,189],{"class":42},[36,153614,107],{"class":62},[36,153616,2307],{"class":62},[36,153618,599],{"class":42},[36,153620,107],{"class":62},[36,153622,2326],{"class":50},[36,153624,153625],{"class":38,"line":2329},[36,153626,70],{"emptyLinePlaceholder":69},[36,153628,153629],{"class":38,"line":2334},[36,153630,70],{"emptyLinePlaceholder":69},[36,153632,153633,153635,153637,153639,153641,153643,153645,153647,153649,153651,153653],{"class":38,"line":2339},[36,153634,208],{"class":42},[36,153636,47],{"class":46},[36,153638,624],{"class":42},[36,153640,2348],{"class":50},[36,153642,630],{"class":42},[36,153644,627],{"class":50},[36,153646,630],{"class":42},[36,153648,633],{"class":62},[36,153650,630],{"class":42},[36,153652,638],{"class":62},[36,153654,123],{"class":42},[36,153656,153657,153659],{"class":38,"line":2365},[36,153658,371],{"class":62},[36,153660,2370],{"class":42},[36,153662,153663,153665],{"class":38,"line":2373},[36,153664,371],{"class":62},[36,153666,2378],{"class":42},[19,153668,153669,302,153671,2387],{},[33,153670,2383],{},[33,153672,2386],{},[14,153674,2391],{"id":2390},[650,153676,153677,153681,153685,153689,153691,153693],{},[653,153678,2396,153679,676],{},[33,153680,2399],{},[653,153682,2402,153683,2405],{},[33,153684,481],{},[653,153686,153687,2410],{},[33,153688,494],{},[653,153690,2413],{},[653,153692,2416],{},[653,153694,2419],{},[14,153696,2423],{"id":2422},[650,153698,153699,153703,153707,153711,153719],{},[653,153700,2428,153701,2431],{},[33,153702,297],{},[653,153704,2428,153705,2437],{},[33,153706,2436],{},[653,153708,2428,153709,2443],{},[33,153710,2442],{},[653,153712,2428,153713,2031,153715,2452,153717,2456],{},[33,153714,2448],{},[33,153716,2451],{},[33,153718,2455],{},[653,153720,2459,153721,2462,153723,676],{},[33,153722,1926],{},[33,153724,2465],{},[2467,153726,2469],{},{"title":31,"searchDepth":54,"depth":54,"links":153728},[153729,153730,153731,153732,153733,153734,153735,153736,153737,153738,153739,153740,153741,153745,153746,153747,153748],{"id":16,"depth":54,"text":17},{"id":244,"depth":54,"text":245},{"id":309,"depth":54,"text":310},{"id":388,"depth":54,"text":389},{"id":488,"depth":54,"text":489},{"id":664,"depth":54,"text":2478},{"id":794,"depth":54,"text":795},{"id":1086,"depth":54,"text":1087},{"id":1201,"depth":54,"text":1202},{"id":1356,"depth":54,"text":1357},{"id":1484,"depth":54,"text":1485},{"id":1600,"depth":54,"text":1601},{"id":1749,"depth":54,"text":1750,"children":153742},[153743,153744],{"id":1754,"depth":66,"text":1755},{"id":1836,"depth":66,"text":1837},{"id":1920,"depth":54,"text":1921},{"id":2038,"depth":54,"text":2039},{"id":2390,"depth":54,"text":2391},{"id":2422,"depth":54,"text":2423},{},{"title":5,"description":2493},{"id":153752,"title":153753,"body":153754,"description":2493,"extension":2494,"meta":157067,"navigation":69,"path":157068,"seo":157069,"stem":157070,"__hash__":157071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153755,"toc":157043},[153756,153759,153763,153766,153769,153798,153801,153809,153813,153817,153820,153843,153846,153852,153856,155302,155305,155326,155330,155333,155345,155348,155532,155535,155661,155664,155668,155672,155808,155812,155898,155902,155984,155988,156025,156029,156218,156222,156225,156455,156459,156462,156643,156646,156650,156653,156659,156662,156688,156692,156695,156709,156712,156737,156740,156754,156757,156774,156777,156794,156797,156814,156818,156844,156848,156871,156875,156878,156880,156886,156888,156909,156912,156918,156924,156928,156931,157007,157010,157014,157040],[10,153757,153753],{"id":153758},"_12-综合案例与复习路线",[14,153760,153762],{"id":153761},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153764,153765],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153767,153768],{},"一个合格的入门综合项目最好覆盖：",[650,153770,153771,153774,153777,153780,153783,153786,153789,153792,153795],{},[653,153772,153773],{},"输入输出。",[653,153775,153776],{},"判断和循环。",[653,153778,153779],{},"函数拆分。",[653,153781,153782],{},"列表、字典等容器。",[653,153784,153785],{},"文件持久化。",[653,153787,153788],{},"异常处理。",[653,153790,153791],{},"模块拆分。",[653,153793,153794],{},"可选：面向对象。",[653,153796,153797],{},"可选：数据可视化。",[19,153799,153800],{},"本章整理两个方向：",[650,153802,153803,153806],{},[653,153804,153805],{},"学生管理系统。",[653,153807,153808],{},"销售数据统计和可视化。",[14,153810,153812],{"id":153811},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1752,153814,153816],{"id":153815},"_1221-需求","12.2.1 需求",[19,153818,153819],{},"实现一个命令行学生管理系统：",[650,153821,153822,153825,153828,153831,153834,153837,153840],{},[653,153823,153824],{},"添加学生。",[653,153826,153827],{},"删除学生。",[653,153829,153830],{},"修改学生。",[653,153832,153833],{},"查询学生。",[653,153835,153836],{},"显示所有学生。",[653,153838,153839],{},"保存到 JSON 文件。",[653,153841,153842],{},"程序启动时自动读取 JSON 文件。",[19,153844,153845],{},"学生字段：",[26,153847,153850],{"className":153848,"code":153849,"language":7570,"meta":31},[7568],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,153851,153849],{"__ignoreMap":31},[14,153853,153855],{"id":153854},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,153857,153859],{"className":28,"code":153858,"language":30,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,153860,153861,153867,153877,153881,153895,153899,153903,153912,153924,153930,153934,153940,153971,153981,153988,153999,154005,154009,154013,154023,154054,154080,154084,154088,154097,154108,154119,154130,154141,154152,154163,154174,154178,154182,154192,154204,154220,154227,154234,154238,154242,154252,154260,154267,154280,154290,154301,154305,154309,154318,154326,154332,154344,154352,154363,154367,154371,154380,154396,154400,154407,154418,154423,154427,154443,154458,154473,154477,154482,154490,154498,154506,154514,154518,154523,154534,154538,154542,154551,154566,154576,154580,154592,154603,154607,154611,154616,154620,154631,154635,154639,154648,154663,154671,154675,154687,154697,154701,154705,154720,154733,154746,154750,154763,154775,154787,154791,154795,154806,154810,154814,154823,154838,154846,154850,154862,154872,154876,154880,154885,154889,154893,154903,154909,154931,154950,154969,154988,154993,154997,155001,155010,155018,155029,155033,155037,155063,155073,155078,155082,155086,155094,155104,155108,155116,155121,155137,155141,155155,155160,155174,155179,155192,155197,155210,155215,155228,155233,155246,155257,155261,155267,155278,155282,155286,155298],{"__ignoreMap":31},[36,153862,153863,153865],{"class":38,"line":39},[36,153864,1943],{"class":46},[36,153866,149427],{"class":42},[36,153868,153869,153871,153873,153875],{"class":38,"line":54},[36,153870,1937],{"class":46},[36,153872,110650],{"class":42},[36,153874,1943],{"class":46},[36,153876,110655],{"class":42},[36,153878,153879],{"class":38,"line":66},[36,153880,70],{"emptyLinePlaceholder":69},[36,153882,153883,153886,153888,153890,153893],{"class":38,"line":73},[36,153884,153885],{"class":62},"DATA_FILE",[36,153887,15941],{"class":46},[36,153889,110884],{"class":42},[36,153891,153892],{"class":50},"\"students.json\"",[36,153894,123],{"class":42},[36,153896,153897],{"class":38,"line":86},[36,153898,70],{"emptyLinePlaceholder":69},[36,153900,153901],{"class":38,"line":126},[36,153902,70],{"emptyLinePlaceholder":69},[36,153904,153905,153907,153910],{"class":38,"line":131},[36,153906,76],{"class":46},[36,153908,153909],{"class":79}," load_students",[36,153911,34306],{"class":42},[36,153913,153914,153916,153918,153921],{"class":38,"line":225},[36,153915,5486],{"class":46},[36,153917,41279],{"class":46},[36,153919,153920],{"class":62}," DATA_FILE",[36,153922,153923],{"class":42},".exists():\n",[36,153925,153926,153928],{"class":38,"line":235},[36,153927,736],{"class":46},[36,153929,54186],{"class":42},[36,153931,153932],{"class":38,"line":377},[36,153933,70],{"emptyLinePlaceholder":69},[36,153935,153936,153938],{"class":38,"line":617},[36,153937,128123],{"class":46},[36,153939,153],{"class":42},[36,153941,153942,153945,153947,153949,153951,153953,153955,153957,153959,153961,153963,153965,153967,153969],{"class":38,"line":643},[36,153943,153944],{"class":46},"        with",[36,153946,149127],{"class":62},[36,153948,92],{"class":42},[36,153950,153885],{"class":62},[36,153952,630],{"class":42},[36,153954,149137],{"class":50},[36,153956,630],{"class":42},[36,153958,149142],{"class":7598},[36,153960,47],{"class":46},[36,153962,149147],{"class":50},[36,153964,16091],{"class":42},[36,153966,33737],{"class":46},[36,153968,150489],{"class":7598},[36,153970,153],{"class":42},[36,153972,153973,153975,153977,153979],{"class":38,"line":921},[36,153974,18105],{"class":46},[36,153976,150500],{"class":42},[36,153978,47703],{"class":7598},[36,153980,123],{"class":42},[36,153982,153983,153985],{"class":38,"line":934},[36,153984,128151],{"class":46},[36,153986,153987],{"class":42}," json.JSONDecodeError:\n",[36,153989,153990,153992,153994,153997],{"class":38,"line":939},[36,153991,168],{"class":62},[36,153993,92],{"class":42},[36,153995,153996],{"class":50},"\"数据文件格式错误，已使用空数据启动\"",[36,153998,123],{"class":42},[36,154000,154001,154003],{"class":38,"line":949},[36,154002,736],{"class":46},[36,154004,54186],{"class":42},[36,154006,154007],{"class":38,"line":962},[36,154008,70],{"emptyLinePlaceholder":69},[36,154010,154011],{"class":38,"line":974},[36,154012,70],{"emptyLinePlaceholder":69},[36,154014,154015,154017,154020],{"class":38,"line":979},[36,154016,76],{"class":46},[36,154018,154019],{"class":79}," save_students",[36,154021,154022],{"class":42},"(students):\n",[36,154024,154025,154027,154029,154031,154033,154035,154038,154040,154042,154044,154046,154048,154050,154052],{"class":38,"line":994},[36,154026,36530],{"class":46},[36,154028,149127],{"class":62},[36,154030,92],{"class":42},[36,154032,153885],{"class":62},[36,154034,630],{"class":42},[36,154036,154037],{"class":50},"\"w\"",[36,154039,630],{"class":42},[36,154041,149142],{"class":7598},[36,154043,47],{"class":46},[36,154045,149147],{"class":50},[36,154047,16091],{"class":42},[36,154049,33737],{"class":46},[36,154051,150489],{"class":7598},[36,154053,153],{"class":42},[36,154055,154056,154059,154061,154063,154065,154067,154069,154071,154074,154076,154078],{"class":38,"line":1006},[36,154057,154058],{"class":42},"        json.dump(students, ",[36,154060,47703],{"class":7598},[36,154062,630],{"class":42},[36,154064,149473],{"class":7598},[36,154066,47],{"class":46},[36,154068,36339],{"class":62},[36,154070,630],{"class":42},[36,154072,154073],{"class":7598},"indent",[36,154075,47],{"class":46},[36,154077,1911],{"class":62},[36,154079,123],{"class":42},[36,154081,154082],{"class":38,"line":1011},[36,154083,70],{"emptyLinePlaceholder":69},[36,154085,154086],{"class":38,"line":1023},[36,154087,70],{"emptyLinePlaceholder":69},[36,154089,154090,154092,154095],{"class":38,"line":1028},[36,154091,76],{"class":46},[36,154093,154094],{"class":79}," show_menu",[36,154096,34306],{"class":42},[36,154098,154099,154101,154103,154106],{"class":38,"line":1033},[36,154100,89],{"class":62},[36,154102,92],{"class":42},[36,154104,154105],{"class":50},"\"====== 学生管理系统 ======\"",[36,154107,123],{"class":42},[36,154109,154110,154112,154114,154117],{"class":38,"line":1053},[36,154111,89],{"class":62},[36,154113,92],{"class":42},[36,154115,154116],{"class":50},"\"1. 添加学生\"",[36,154118,123],{"class":42},[36,154120,154121,154123,154125,154128],{"class":38,"line":1064},[36,154122,89],{"class":62},[36,154124,92],{"class":42},[36,154126,154127],{"class":50},"\"2. 删除学生\"",[36,154129,123],{"class":42},[36,154131,154132,154134,154136,154139],{"class":38,"line":1075},[36,154133,89],{"class":62},[36,154135,92],{"class":42},[36,154137,154138],{"class":50},"\"3. 修改学生\"",[36,154140,123],{"class":42},[36,154142,154143,154145,154147,154150],{"class":38,"line":2291},[36,154144,89],{"class":62},[36,154146,92],{"class":42},[36,154148,154149],{"class":50},"\"4. 查询学生\"",[36,154151,123],{"class":42},[36,154153,154154,154156,154158,154161],{"class":38,"line":2329},[36,154155,89],{"class":62},[36,154157,92],{"class":42},[36,154159,154160],{"class":50},"\"5. 显示所有学生\"",[36,154162,123],{"class":42},[36,154164,154165,154167,154169,154172],{"class":38,"line":2334},[36,154166,89],{"class":62},[36,154168,92],{"class":42},[36,154170,154171],{"class":50},"\"0. 退出系统\"",[36,154173,123],{"class":42},[36,154175,154176],{"class":38,"line":2339},[36,154177,70],{"emptyLinePlaceholder":69},[36,154179,154180],{"class":38,"line":2365},[36,154181,70],{"emptyLinePlaceholder":69},[36,154183,154184,154186,154189],{"class":38,"line":2373},[36,154185,76],{"class":46},[36,154187,154188],{"class":79}," find_student",[36,154190,154191],{"class":42},"(students, student_id):\n",[36,154193,154194,154196,154199,154201],{"class":38,"line":5001},[36,154195,5586],{"class":46},[36,154197,154198],{"class":42}," student ",[36,154200,28413],{"class":46},[36,154202,154203],{"class":42}," students:\n",[36,154205,154206,154208,154211,154213,154215,154217],{"class":38,"line":5006},[36,154207,890],{"class":46},[36,154209,154210],{"class":42}," student[",[36,154212,2241],{"class":50},[36,154214,6826],{"class":42},[36,154216,5334],{"class":46},[36,154218,154219],{"class":42}," student_id:\n",[36,154221,154222,154224],{"class":38,"line":10328},[36,154223,18105],{"class":46},[36,154225,154226],{"class":42}," student\n",[36,154228,154229,154231],{"class":38,"line":10352},[36,154230,6474],{"class":46},[36,154232,154233],{"class":62}," None\n",[36,154235,154236],{"class":38,"line":10357},[36,154237,70],{"emptyLinePlaceholder":69},[36,154239,154240],{"class":38,"line":10363},[36,154241,70],{"emptyLinePlaceholder":69},[36,154243,154244,154246,154249],{"class":38,"line":10390},[36,154245,76],{"class":46},[36,154247,154248],{"class":79}," input_int",[36,154250,154251],{"class":42},"(prompt):\n",[36,154253,154254,154256,154258],{"class":38,"line":10395},[36,154255,4644],{"class":46},[36,154257,97633],{"class":62},[36,154259,153],{"class":42},[36,154261,154262,154265],{"class":38,"line":10401},[36,154263,154264],{"class":46},"        try",[36,154266,153],{"class":42},[36,154268,154269,154271,154273,154275,154277],{"class":38,"line":10413},[36,154270,18105],{"class":46},[36,154272,4775],{"class":62},[36,154274,92],{"class":42},[36,154276,56169],{"class":62},[36,154278,154279],{"class":42},"(prompt))\n",[36,154281,154282,154285,154288],{"class":38,"line":10425},[36,154283,154284],{"class":46},"        except",[36,154286,154287],{"class":62}," ValueError",[36,154289,153],{"class":42},[36,154291,154292,154294,154296,154299],{"class":38,"line":10437},[36,154293,906],{"class":62},[36,154295,92],{"class":42},[36,154297,154298],{"class":50},"\"请输入整数\"",[36,154300,123],{"class":42},[36,154302,154303],{"class":38,"line":12095},[36,154304,70],{"emptyLinePlaceholder":69},[36,154306,154307],{"class":38,"line":12120},[36,154308,70],{"emptyLinePlaceholder":69},[36,154310,154311,154313,154316],{"class":38,"line":12143},[36,154312,76],{"class":46},[36,154314,154315],{"class":79}," input_float",[36,154317,154251],{"class":42},[36,154319,154320,154322,154324],{"class":38,"line":12167},[36,154321,4644],{"class":46},[36,154323,97633],{"class":62},[36,154325,153],{"class":42},[36,154327,154328,154330],{"class":38,"line":12172},[36,154329,154264],{"class":46},[36,154331,153],{"class":42},[36,154333,154334,154336,154338,154340,154342],{"class":38,"line":12177},[36,154335,18105],{"class":46},[36,154337,112136],{"class":62},[36,154339,92],{"class":42},[36,154341,56169],{"class":62},[36,154343,154279],{"class":42},[36,154345,154346,154348,154350],{"class":38,"line":12182},[36,154347,154284],{"class":46},[36,154349,154287],{"class":62},[36,154351,153],{"class":42},[36,154353,154354,154356,154358,154361],{"class":38,"line":12191},[36,154355,906],{"class":62},[36,154357,92],{"class":42},[36,154359,154360],{"class":50},"\"请输入数字\"",[36,154362,123],{"class":42},[36,154364,154365],{"class":38,"line":12196},[36,154366,70],{"emptyLinePlaceholder":69},[36,154368,154369],{"class":38,"line":12202},[36,154370,70],{"emptyLinePlaceholder":69},[36,154372,154373,154375,154378],{"class":38,"line":12223},[36,154374,76],{"class":46},[36,154376,154377],{"class":79}," add_student",[36,154379,154022],{"class":42},[36,154381,154382,154385,154387,154389,154391,154394],{"class":38,"line":12229},[36,154383,154384],{"class":42},"    student_id ",[36,154386,47],{"class":46},[36,154388,62953],{"class":62},[36,154390,92],{"class":42},[36,154392,154393],{"class":50},"\"请输入学号:\"",[36,154395,123],{"class":42},[36,154397,154398],{"class":38,"line":12243},[36,154399,70],{"emptyLinePlaceholder":69},[36,154401,154402,154404],{"class":38,"line":12249},[36,154403,5486],{"class":46},[36,154405,154406],{"class":42}," find_student(students, student_id):\n",[36,154408,154409,154411,154413,154416],{"class":38,"line":12276},[36,154410,168],{"class":62},[36,154412,92],{"class":42},[36,154414,154415],{"class":50},"\"学号已存在\"",[36,154417,123],{"class":42},[36,154419,154420],{"class":38,"line":12285},[36,154421,154422],{"class":46},"        return\n",[36,154424,154425],{"class":38,"line":12291},[36,154426,70],{"emptyLinePlaceholder":69},[36,154428,154429,154432,154434,154436,154438,154441],{"class":38,"line":12299},[36,154430,154431],{"class":42},"    name ",[36,154433,47],{"class":46},[36,154435,62953],{"class":62},[36,154437,92],{"class":42},[36,154439,154440],{"class":50},"\"请输入姓名:\"",[36,154442,123],{"class":42},[36,154444,154445,154448,154450,154453,154456],{"class":38,"line":12304},[36,154446,154447],{"class":42},"    age ",[36,154449,47],{"class":46},[36,154451,154452],{"class":42}," input_int(",[36,154454,154455],{"class":50},"\"请输入年龄:\"",[36,154457,123],{"class":42},[36,154459,154460,154463,154465,154468,154471],{"class":38,"line":18977},[36,154461,154462],{"class":42},"    score ",[36,154464,47],{"class":46},[36,154466,154467],{"class":42}," input_float(",[36,154469,154470],{"class":50},"\"请输入成绩:\"",[36,154472,123],{"class":42},[36,154474,154475],{"class":38,"line":18983},[36,154476,70],{"emptyLinePlaceholder":69},[36,154478,154479],{"class":38,"line":19006},[36,154480,154481],{"class":42},"    students.append({\n",[36,154483,154484,154487],{"class":38,"line":19012},[36,154485,154486],{"class":50},"        \"student_id\"",[36,154488,154489],{"class":42},": student_id,\n",[36,154491,154492,154495],{"class":38,"line":19035},[36,154493,154494],{"class":50},"        \"name\"",[36,154496,154497],{"class":42},": name,\n",[36,154499,154500,154503],{"class":38,"line":19049},[36,154501,154502],{"class":50},"        \"age\"",[36,154504,154505],{"class":42},": age,\n",[36,154507,154508,154511],{"class":38,"line":19069},[36,154509,154510],{"class":50},"        \"score\"",[36,154512,154513],{"class":42},": score,\n",[36,154515,154516],{"class":38,"line":19075},[36,154517,35813],{"class":42},[36,154519,154520],{"class":38,"line":19086},[36,154521,154522],{"class":42},"    save_students(students)\n",[36,154524,154525,154527,154529,154532],{"class":38,"line":19109},[36,154526,89],{"class":62},[36,154528,92],{"class":42},[36,154530,154531],{"class":50},"\"添加成功\"",[36,154533,123],{"class":42},[36,154535,154536],{"class":38,"line":19131},[36,154537,70],{"emptyLinePlaceholder":69},[36,154539,154540],{"class":38,"line":19136},[36,154541,70],{"emptyLinePlaceholder":69},[36,154543,154544,154546,154549],{"class":38,"line":19142},[36,154545,76],{"class":46},[36,154547,154548],{"class":79}," delete_student",[36,154550,154022],{"class":42},[36,154552,154553,154555,154557,154559,154561,154564],{"class":38,"line":19156},[36,154554,154384],{"class":42},[36,154556,47],{"class":46},[36,154558,62953],{"class":62},[36,154560,92],{"class":42},[36,154562,154563],{"class":50},"\"请输入要删除的学号:\"",[36,154565,123],{"class":42},[36,154567,154568,154571,154573],{"class":38,"line":19169},[36,154569,154570],{"class":42},"    student ",[36,154572,47],{"class":46},[36,154574,154575],{"class":42}," find_student(students, student_id)\n",[36,154577,154578],{"class":38,"line":19174},[36,154579,70],{"emptyLinePlaceholder":69},[36,154581,154582,154584,154586,154588,154590],{"class":38,"line":19188},[36,154583,5486],{"class":46},[36,154585,154198],{"class":42},[36,154587,41276],{"class":46},[36,154589,41282],{"class":62},[36,154591,153],{"class":42},[36,154593,154594,154596,154598,154601],{"class":38,"line":19193},[36,154595,168],{"class":62},[36,154597,92],{"class":42},[36,154599,154600],{"class":50},"\"学生不存在\"",[36,154602,123],{"class":42},[36,154604,154605],{"class":38,"line":19199},[36,154606,154422],{"class":46},[36,154608,154609],{"class":38,"line":19204},[36,154610,70],{"emptyLinePlaceholder":69},[36,154612,154613],{"class":38,"line":19218},[36,154614,154615],{"class":42},"    students.remove(student)\n",[36,154617,154618],{"class":38,"line":19223},[36,154619,154522],{"class":42},[36,154621,154622,154624,154626,154629],{"class":38,"line":19228},[36,154623,89],{"class":62},[36,154625,92],{"class":42},[36,154627,154628],{"class":50},"\"删除成功\"",[36,154630,123],{"class":42},[36,154632,154633],{"class":38,"line":19242},[36,154634,70],{"emptyLinePlaceholder":69},[36,154636,154637],{"class":38,"line":19254},[36,154638,70],{"emptyLinePlaceholder":69},[36,154640,154641,154643,154646],{"class":38,"line":19259},[36,154642,76],{"class":46},[36,154644,154645],{"class":79}," update_student",[36,154647,154022],{"class":42},[36,154649,154650,154652,154654,154656,154658,154661],{"class":38,"line":19272},[36,154651,154384],{"class":42},[36,154653,47],{"class":46},[36,154655,62953],{"class":62},[36,154657,92],{"class":42},[36,154659,154660],{"class":50},"\"请输入要修改的学号:\"",[36,154662,123],{"class":42},[36,154664,154665,154667,154669],{"class":38,"line":19277},[36,154666,154570],{"class":42},[36,154668,47],{"class":46},[36,154670,154575],{"class":42},[36,154672,154673],{"class":38,"line":19282},[36,154674,70],{"emptyLinePlaceholder":69},[36,154676,154677,154679,154681,154683,154685],{"class":38,"line":19287},[36,154678,5486],{"class":46},[36,154680,154198],{"class":42},[36,154682,41276],{"class":46},[36,154684,41282],{"class":62},[36,154686,153],{"class":42},[36,154688,154689,154691,154693,154695],{"class":38,"line":19300},[36,154690,168],{"class":62},[36,154692,92],{"class":42},[36,154694,154600],{"class":50},[36,154696,123],{"class":42},[36,154698,154699],{"class":38,"line":19305},[36,154700,154422],{"class":46},[36,154702,154703],{"class":38,"line":34985},[36,154704,70],{"emptyLinePlaceholder":69},[36,154706,154707,154709,154711,154713,154715,154718],{"class":38,"line":34991},[36,154708,154431],{"class":42},[36,154710,47],{"class":46},[36,154712,62953],{"class":62},[36,154714,92],{"class":42},[36,154716,154717],{"class":50},"\"请输入新姓名:\"",[36,154719,123],{"class":42},[36,154721,154722,154724,154726,154728,154731],{"class":38,"line":34997},[36,154723,154447],{"class":42},[36,154725,47],{"class":46},[36,154727,154452],{"class":42},[36,154729,154730],{"class":50},"\"请输入新年龄:\"",[36,154732,123],{"class":42},[36,154734,154735,154737,154739,154741,154744],{"class":38,"line":35003},[36,154736,154462],{"class":42},[36,154738,47],{"class":46},[36,154740,154467],{"class":42},[36,154742,154743],{"class":50},"\"请输入新成绩:\"",[36,154745,123],{"class":42},[36,154747,154748],{"class":38,"line":35009},[36,154749,70],{"emptyLinePlaceholder":69},[36,154751,154752,154755,154757,154759,154761],{"class":38,"line":35020},[36,154753,154754],{"class":42},"    student[",[36,154756,2251],{"class":50},[36,154758,6826],{"class":42},[36,154760,47],{"class":46},[36,154762,531],{"class":42},[36,154764,154765,154767,154769,154771,154773],{"class":38,"line":35026},[36,154766,154754],{"class":42},[36,154768,2260],{"class":50},[36,154770,6826],{"class":42},[36,154772,47],{"class":46},[36,154774,543],{"class":42},[36,154776,154777,154779,154781,154783,154785],{"class":38,"line":35046},[36,154778,154754],{"class":42},[36,154780,2269],{"class":50},[36,154782,6826],{"class":42},[36,154784,47],{"class":46},[36,154786,555],{"class":42},[36,154788,154789],{"class":38,"line":35052},[36,154790,70],{"emptyLinePlaceholder":69},[36,154792,154793],{"class":38,"line":35063},[36,154794,154522],{"class":42},[36,154796,154797,154799,154801,154804],{"class":38,"line":35069},[36,154798,89],{"class":62},[36,154800,92],{"class":42},[36,154802,154803],{"class":50},"\"修改成功\"",[36,154805,123],{"class":42},[36,154807,154808],{"class":38,"line":35075},[36,154809,70],{"emptyLinePlaceholder":69},[36,154811,154812],{"class":38,"line":35081},[36,154813,70],{"emptyLinePlaceholder":69},[36,154815,154816,154818,154821],{"class":38,"line":35087},[36,154817,76],{"class":46},[36,154819,154820],{"class":79}," query_student",[36,154822,154022],{"class":42},[36,154824,154825,154827,154829,154831,154833,154836],{"class":38,"line":35093},[36,154826,154384],{"class":42},[36,154828,47],{"class":46},[36,154830,62953],{"class":62},[36,154832,92],{"class":42},[36,154834,154835],{"class":50},"\"请输入要查询的学号:\"",[36,154837,123],{"class":42},[36,154839,154840,154842,154844],{"class":38,"line":35099},[36,154841,154570],{"class":42},[36,154843,47],{"class":46},[36,154845,154575],{"class":42},[36,154847,154848],{"class":38,"line":35105},[36,154849,70],{"emptyLinePlaceholder":69},[36,154851,154852,154854,154856,154858,154860],{"class":38,"line":35125},[36,154853,5486],{"class":46},[36,154855,154198],{"class":42},[36,154857,41276],{"class":46},[36,154859,41282],{"class":62},[36,154861,153],{"class":42},[36,154863,154864,154866,154868,154870],{"class":38,"line":35131},[36,154865,168],{"class":62},[36,154867,92],{"class":42},[36,154869,154600],{"class":50},[36,154871,123],{"class":42},[36,154873,154874],{"class":38,"line":35147},[36,154875,154422],{"class":46},[36,154877,154878],{"class":38,"line":35153},[36,154879,70],{"emptyLinePlaceholder":69},[36,154881,154882],{"class":38,"line":35167},[36,154883,154884],{"class":42},"    print_student(student)\n",[36,154886,154887],{"class":38,"line":35173},[36,154888,70],{"emptyLinePlaceholder":69},[36,154890,154891],{"class":38,"line":35188},[36,154892,70],{"emptyLinePlaceholder":69},[36,154894,154895,154897,154900],{"class":38,"line":35194},[36,154896,76],{"class":46},[36,154898,154899],{"class":79}," print_student",[36,154901,154902],{"class":42},"(student):\n",[36,154904,154905,154907],{"class":38,"line":35203},[36,154906,89],{"class":62},[36,154908,2233],{"class":42},[36,154910,154911,154914,154916,154918,154921,154924,154926,154929],{"class":38,"line":35209},[36,154912,154913],{"class":46},"        f",[36,154915,604],{"class":50},[36,154917,101],{"class":62},[36,154919,154920],{"class":42},"student[",[36,154922,154923],{"class":50},"'student_id'",[36,154925,3493],{"class":42},[36,154927,154928],{"class":62},"}\\t",[36,154930,2326],{"class":50},[36,154932,154933,154935,154937,154939,154941,154944,154946,154948],{"class":38,"line":35218},[36,154934,154913],{"class":46},[36,154936,604],{"class":50},[36,154938,101],{"class":62},[36,154940,154920],{"class":42},[36,154942,154943],{"class":50},"'name'",[36,154945,3493],{"class":42},[36,154947,154928],{"class":62},[36,154949,2326],{"class":50},[36,154951,154952,154954,154956,154958,154960,154963,154965,154967],{"class":38,"line":35224},[36,154953,154913],{"class":46},[36,154955,604],{"class":50},[36,154957,101],{"class":62},[36,154959,154920],{"class":42},[36,154961,154962],{"class":50},"'age'",[36,154964,3493],{"class":42},[36,154966,154928],{"class":62},[36,154968,2326],{"class":50},[36,154970,154971,154973,154975,154977,154979,154982,154984,154986],{"class":38,"line":35230},[36,154972,154913],{"class":46},[36,154974,604],{"class":50},[36,154976,101],{"class":62},[36,154978,154920],{"class":42},[36,154980,154981],{"class":50},"'score'",[36,154983,3493],{"class":42},[36,154985,107],{"class":62},[36,154987,2326],{"class":50},[36,154989,154990],{"class":38,"line":35239},[36,154991,154992],{"class":42},"    )\n",[36,154994,154995],{"class":38,"line":35245},[36,154996,70],{"emptyLinePlaceholder":69},[36,154998,154999],{"class":38,"line":35256},[36,155000,70],{"emptyLinePlaceholder":69},[36,155002,155003,155005,155008],{"class":38,"line":35262},[36,155004,76],{"class":46},[36,155006,155007],{"class":79}," show_all_students",[36,155009,154022],{"class":42},[36,155011,155012,155014,155016],{"class":38,"line":35281},[36,155013,5486],{"class":46},[36,155015,41279],{"class":46},[36,155017,154203],{"class":42},[36,155019,155020,155022,155024,155027],{"class":38,"line":35287},[36,155021,168],{"class":62},[36,155023,92],{"class":42},[36,155025,155026],{"class":50},"\"暂无学生\"",[36,155028,123],{"class":42},[36,155030,155031],{"class":38,"line":35298},[36,155032,154422],{"class":46},[36,155034,155035],{"class":38,"line":35304},[36,155036,70],{"emptyLinePlaceholder":69},[36,155038,155039,155041,155043,155046,155048,155051,155053,155056,155058,155061],{"class":38,"line":35324},[36,155040,89],{"class":62},[36,155042,92],{"class":42},[36,155044,155045],{"class":50},"\"学号",[36,155047,3651],{"class":62},[36,155049,155050],{"class":50},"姓名",[36,155052,3651],{"class":62},[36,155054,155055],{"class":50},"年龄",[36,155057,3651],{"class":62},[36,155059,155060],{"class":50},"成绩\"",[36,155062,123],{"class":42},[36,155064,155065,155067,155069,155071],{"class":38,"line":35340},[36,155066,5586],{"class":46},[36,155068,154198],{"class":42},[36,155070,28413],{"class":46},[36,155072,154203],{"class":42},[36,155074,155075],{"class":38,"line":35346},[36,155076,155077],{"class":42},"        print_student(student)\n",[36,155079,155080],{"class":38,"line":35360},[36,155081,70],{"emptyLinePlaceholder":69},[36,155083,155084],{"class":38,"line":35366},[36,155085,70],{"emptyLinePlaceholder":69},[36,155087,155088,155090,155092],{"class":38,"line":35372},[36,155089,76],{"class":46},[36,155091,4366],{"class":79},[36,155093,34306],{"class":42},[36,155095,155096,155099,155101],{"class":38,"line":35383},[36,155097,155098],{"class":42},"    students ",[36,155100,47],{"class":46},[36,155102,155103],{"class":42}," load_students()\n",[36,155105,155106],{"class":38,"line":35389},[36,155107,70],{"emptyLinePlaceholder":69},[36,155109,155110,155112,155114],{"class":38,"line":35395},[36,155111,4644],{"class":46},[36,155113,97633],{"class":62},[36,155115,153],{"class":42},[36,155117,155118],{"class":38,"line":35405},[36,155119,155120],{"class":42},"        show_menu()\n",[36,155122,155123,155126,155128,155130,155132,155135],{"class":38,"line":35411},[36,155124,155125],{"class":42},"        choice ",[36,155127,47],{"class":46},[36,155129,62953],{"class":62},[36,155131,92],{"class":42},[36,155133,155134],{"class":50},"\"请输入操作:\"",[36,155136,123],{"class":42},[36,155138,155139],{"class":38,"line":35422},[36,155140,70],{"emptyLinePlaceholder":69},[36,155142,155143,155145,155148,155150,155153],{"class":38,"line":35428},[36,155144,890],{"class":46},[36,155146,155147],{"class":42}," choice ",[36,155149,5334],{"class":46},[36,155151,155152],{"class":50}," \"1\"",[36,155154,153],{"class":42},[36,155156,155157],{"class":38,"line":35438},[36,155158,155159],{"class":42},"            add_student(students)\n",[36,155161,155162,155165,155167,155169,155172],{"class":38,"line":35443},[36,155163,155164],{"class":46},"        elif",[36,155166,155147],{"class":42},[36,155168,5334],{"class":46},[36,155170,155171],{"class":50}," \"2\"",[36,155173,153],{"class":42},[36,155175,155176],{"class":38,"line":35449},[36,155177,155178],{"class":42},"            delete_student(students)\n",[36,155180,155181,155183,155185,155187,155190],{"class":38,"line":35498},[36,155182,155164],{"class":46},[36,155184,155147],{"class":42},[36,155186,5334],{"class":46},[36,155188,155189],{"class":50}," \"3\"",[36,155191,153],{"class":42},[36,155193,155194],{"class":38,"line":35545},[36,155195,155196],{"class":42},"            update_student(students)\n",[36,155198,155199,155201,155203,155205,155208],{"class":38,"line":35550},[36,155200,155164],{"class":46},[36,155202,155147],{"class":42},[36,155204,5334],{"class":46},[36,155206,155207],{"class":50}," \"4\"",[36,155209,153],{"class":42},[36,155211,155212],{"class":38,"line":35556},[36,155213,155214],{"class":42},"            query_student(students)\n",[36,155216,155217,155219,155221,155223,155226],{"class":38,"line":35575},[36,155218,155164],{"class":46},[36,155220,155147],{"class":42},[36,155222,5334],{"class":46},[36,155224,155225],{"class":50}," \"5\"",[36,155227,153],{"class":42},[36,155229,155230],{"class":38,"line":35581},[36,155231,155232],{"class":42},"            show_all_students(students)\n",[36,155234,155235,155237,155239,155241,155244],{"class":38,"line":35601},[36,155236,155164],{"class":46},[36,155238,155147],{"class":42},[36,155240,5334],{"class":46},[36,155242,155243],{"class":50}," \"0\"",[36,155245,153],{"class":42},[36,155247,155248,155250,155252,155255],{"class":38,"line":35607},[36,155249,906],{"class":62},[36,155251,92],{"class":42},[36,155253,155254],{"class":50},"\"退出系统\"",[36,155256,123],{"class":42},[36,155258,155259],{"class":38,"line":35613},[36,155260,117437],{"class":46},[36,155262,155263,155265],{"class":38,"line":35623},[36,155264,4924],{"class":46},[36,155266,153],{"class":42},[36,155268,155269,155271,155273,155276],{"class":38,"line":35628},[36,155270,906],{"class":62},[36,155272,92],{"class":42},[36,155274,155275],{"class":50},"\"输入错误\"",[36,155277,123],{"class":42},[36,155279,155280],{"class":38,"line":35634},[36,155281,70],{"emptyLinePlaceholder":69},[36,155283,155284],{"class":38,"line":35650},[36,155285,70],{"emptyLinePlaceholder":69},[36,155287,155288,155290,155292,155294,155296],{"class":38,"line":35695},[36,155289,3948],{"class":46},[36,155291,33575],{"class":62},[36,155293,103899],{"class":46},[36,155295,103902],{"class":50},[36,155297,153],{"class":42},[36,155299,155300],{"class":38,"line":35701},[36,155301,103909],{"class":42},[19,155303,155304],{},"这个项目串联了：",[650,155306,155307,155310,155313,155316,155319,155321],{},[653,155308,155309],{},"菜单循环。",[653,155311,155312],{},"函数封装。",[653,155314,155315],{},"列表字典。",[653,155317,155318],{},"JSON 读写。",[653,155320,153788],{},[653,155322,155323,676],{},[33,155324,155325],{},"if __name__ == \"__main__\"",[14,155327,155329],{"id":155328},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155331,155332],{},"可以进一步拆成两个类：",[650,155334,155335,155340],{},[653,155336,155337,155339],{},[33,155338,297],{},"：表示单个学生。",[653,155341,155342,155344],{},[33,155343,2399],{},"：负责学生增删改查和文件保存。",[19,155346,155347],{},"示意代码：",[26,155349,155351],{"className":28,"code":155350,"language":30,"meta":31,"style":31},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[33,155352,155353,155363,155367,155371,155375,155383,155390,155396,155402,155408,155412,155420,155426,155436,155446,155456,155466,155470,155474,155480,155488,155496,155504,155512,155520,155528],{"__ignoreMap":31},[36,155354,155355,155357,155359,155361],{"class":38,"line":39},[36,155356,1937],{"class":46},[36,155358,1940],{"class":42},[36,155360,1943],{"class":46},[36,155362,1946],{"class":42},[36,155364,155365],{"class":38,"line":54},[36,155366,70],{"emptyLinePlaceholder":69},[36,155368,155369],{"class":38,"line":66},[36,155370,70],{"emptyLinePlaceholder":69},[36,155372,155373],{"class":38,"line":73},[36,155374,1959],{"class":79},[36,155376,155377,155379,155381],{"class":38,"line":86},[36,155378,147],{"class":46},[36,155380,150],{"class":79},[36,155382,153],{"class":42},[36,155384,155385,155388],{"class":38,"line":126},[36,155386,155387],{"class":42},"    student_id: ",[36,155389,1975],{"class":62},[36,155391,155392,155394],{"class":38,"line":131},[36,155393,1972],{"class":42},[36,155395,1975],{"class":62},[36,155397,155398,155400],{"class":38,"line":225},[36,155399,1980],{"class":42},[36,155401,1983],{"class":62},[36,155403,155404,155406],{"class":38,"line":235},[36,155405,1988],{"class":42},[36,155407,1991],{"class":62},[36,155409,155410],{"class":38,"line":377},[36,155411,70],{"emptyLinePlaceholder":69},[36,155413,155414,155416,155418],{"class":38,"line":617},[36,155415,158],{"class":46},[36,155417,2141],{"class":79},[36,155419,163],{"class":42},[36,155421,155422,155424],{"class":38,"line":643},[36,155423,736],{"class":46},[36,155425,2150],{"class":42},[36,155427,155428,155430,155432,155434],{"class":38,"line":921},[36,155429,2155],{"class":50},[36,155431,2158],{"class":42},[36,155433,481],{"class":62},[36,155435,2163],{"class":42},[36,155437,155438,155440,155442,155444],{"class":38,"line":934},[36,155439,2168],{"class":50},[36,155441,2158],{"class":42},[36,155443,481],{"class":62},[36,155445,2175],{"class":42},[36,155447,155448,155450,155452,155454],{"class":38,"line":939},[36,155449,2180],{"class":50},[36,155451,2158],{"class":42},[36,155453,481],{"class":62},[36,155455,2187],{"class":42},[36,155457,155458,155460,155462,155464],{"class":38,"line":949},[36,155459,2192],{"class":50},[36,155461,2158],{"class":42},[36,155463,481],{"class":62},[36,155465,2199],{"class":42},[36,155467,155468],{"class":38,"line":962},[36,155469,2204],{"class":42},[36,155471,155472],{"class":38,"line":974},[36,155473,70],{"emptyLinePlaceholder":69},[36,155475,155476,155478],{"class":38,"line":979},[36,155477,1795],{"class":79},[36,155479,1798],{"class":62},[36,155481,155482,155484,155486],{"class":38,"line":994},[36,155483,158],{"class":46},[36,155485,2221],{"class":79},[36,155487,2224],{"class":42},[36,155489,155490,155492,155494],{"class":38,"line":1006},[36,155491,736],{"class":46},[36,155493,1815],{"class":62},[36,155495,2233],{"class":42},[36,155497,155498,155500,155502],{"class":38,"line":1011},[36,155499,2238],{"class":42},[36,155501,2241],{"class":50},[36,155503,2244],{"class":42},[36,155505,155506,155508,155510],{"class":38,"line":1023},[36,155507,2238],{"class":42},[36,155509,2251],{"class":50},[36,155511,2244],{"class":42},[36,155513,155514,155516,155518],{"class":38,"line":1028},[36,155515,2238],{"class":42},[36,155517,2260],{"class":50},[36,155519,2244],{"class":42},[36,155521,155522,155524,155526],{"class":38,"line":1033},[36,155523,2238],{"class":42},[36,155525,2269],{"class":50},[36,155527,2244],{"class":42},[36,155529,155530],{"class":38,"line":1053},[36,155531,2276],{"class":42},[19,155533,155534],{},"管理器示意：",[26,155536,155538],{"className":28,"code":155537,"language":30,"meta":31,"style":31},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[33,155539,155540,155549,155557,155568,155572,155582,155595,155606,155613,155619,155623,155632,155641,155647,155654],{"__ignoreMap":31},[36,155541,155542,155544,155547],{"class":38,"line":39},[36,155543,147],{"class":46},[36,155545,155546],{"class":79}," StudentManager",[36,155548,153],{"class":42},[36,155550,155551,155553,155555],{"class":38,"line":54},[36,155552,158],{"class":46},[36,155554,515],{"class":62},[36,155556,163],{"class":42},[36,155558,155559,155561,155564,155566],{"class":38,"line":66},[36,155560,523],{"class":62},[36,155562,155563],{"class":42},".students ",[36,155565,47],{"class":46},[36,155567,54186],{"class":42},[36,155569,155570],{"class":38,"line":73},[36,155571,70],{"emptyLinePlaceholder":69},[36,155573,155574,155576,155579],{"class":38,"line":86},[36,155575,158],{"class":46},[36,155577,155578],{"class":79}," find_by_id",[36,155580,155581],{"class":42},"(self, student_id):\n",[36,155583,155584,155586,155588,155590,155592],{"class":38,"line":126},[36,155585,5788],{"class":46},[36,155587,154198],{"class":42},[36,155589,28413],{"class":46},[36,155591,868],{"class":62},[36,155593,155594],{"class":42},".students:\n",[36,155596,155597,155599,155602,155604],{"class":38,"line":131},[36,155598,7025],{"class":46},[36,155600,155601],{"class":42}," student.student_id ",[36,155603,5334],{"class":46},[36,155605,154219],{"class":42},[36,155607,155608,155611],{"class":38,"line":225},[36,155609,155610],{"class":46},"                return",[36,155612,154226],{"class":42},[36,155614,155615,155617],{"class":38,"line":235},[36,155616,736],{"class":46},[36,155618,154233],{"class":62},[36,155620,155621],{"class":38,"line":377},[36,155622,70],{"emptyLinePlaceholder":69},[36,155624,155625,155627,155629],{"class":38,"line":617},[36,155626,158],{"class":46},[36,155628,1872],{"class":79},[36,155630,155631],{"class":42},"(self, student):\n",[36,155633,155634,155636,155638],{"class":38,"line":643},[36,155635,890],{"class":46},[36,155637,868],{"class":62},[36,155639,155640],{"class":42},".find_by_id(student.student_id):\n",[36,155642,155643,155645],{"class":38,"line":921},[36,155644,18105],{"class":46},[36,155646,128146],{"class":62},[36,155648,155649,155651],{"class":38,"line":934},[36,155650,523],{"class":62},[36,155652,155653],{"class":42},".students.append(student)\n",[36,155655,155656,155658],{"class":38,"line":939},[36,155657,736],{"class":46},[36,155659,155660],{"class":62}," True\n",[19,155662,155663],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155665,155667],{"id":155666},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1752,155669,155671],{"id":155670},"_1251-数据结构","12.5.1 数据结构",[26,155673,155675],{"className":28,"code":155674,"language":30,"meta":31,"style":31},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[33,155676,155677,155685,155716,155746,155775,155804],{"__ignoreMap":31},[36,155678,155679,155681,155683],{"class":38,"line":39},[36,155680,150801],{"class":42},[36,155682,47],{"class":46},[36,155684,57795],{"class":42},[36,155686,155687,155689,155691,155693,155695,155697,155700,155702,155705,155707,155709,155711,155714],{"class":38,"line":54},[36,155688,150721],{"class":42},[36,155690,150333],{"class":50},[36,155692,2158],{"class":42},[36,155694,150944],{"class":50},[36,155696,630],{"class":42},[36,155698,155699],{"class":50},"\"category\"",[36,155701,2158],{"class":42},[36,155703,155704],{"class":50},"\"手机\"",[36,155706,630],{"class":42},[36,155708,86426],{"class":50},[36,155710,2158],{"class":42},[36,155712,155713],{"class":62},"12000",[36,155715,7313],{"class":42},[36,155717,155718,155720,155722,155724,155726,155728,155730,155732,155735,155737,155739,155741,155744],{"class":38,"line":66},[36,155719,150721],{"class":42},[36,155721,150333],{"class":50},[36,155723,2158],{"class":42},[36,155725,150944],{"class":50},[36,155727,630],{"class":42},[36,155729,155699],{"class":50},[36,155731,2158],{"class":42},[36,155733,155734],{"class":50},"\"电脑\"",[36,155736,630],{"class":42},[36,155738,86426],{"class":50},[36,155740,2158],{"class":42},[36,155742,155743],{"class":62},"18000",[36,155745,7313],{"class":42},[36,155747,155748,155750,155752,155754,155756,155758,155760,155762,155764,155766,155768,155770,155773],{"class":38,"line":73},[36,155749,150721],{"class":42},[36,155751,150333],{"class":50},[36,155753,2158],{"class":42},[36,155755,150965],{"class":50},[36,155757,630],{"class":42},[36,155759,155699],{"class":50},[36,155761,2158],{"class":42},[36,155763,155704],{"class":50},[36,155765,630],{"class":42},[36,155767,86426],{"class":50},[36,155769,2158],{"class":42},[36,155771,155772],{"class":62},"15000",[36,155774,7313],{"class":42},[36,155776,155777,155779,155781,155783,155785,155787,155789,155791,155793,155795,155797,155799,155802],{"class":38,"line":86},[36,155778,150721],{"class":42},[36,155780,150333],{"class":50},[36,155782,2158],{"class":42},[36,155784,150965],{"class":50},[36,155786,630],{"class":42},[36,155788,155699],{"class":50},[36,155790,2158],{"class":42},[36,155792,155734],{"class":50},[36,155794,630],{"class":42},[36,155796,86426],{"class":50},[36,155798,2158],{"class":42},[36,155800,155801],{"class":62},"16000",[36,155803,7313],{"class":42},[36,155805,155806],{"class":38,"line":126},[36,155807,35598],{"class":42},[1752,155809,155811],{"id":155810},"_1252-按日期统计","12.5.2 按日期统计",[26,155813,155815],{"className":28,"code":155814,"language":30,"meta":31,"style":31},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[33,155816,155817,155826,155830,155841,155855,155868,155887,155891],{"__ignoreMap":31},[36,155818,155819,155822,155824],{"class":38,"line":39},[36,155820,155821],{"class":42},"daily_total ",[36,155823,47],{"class":46},[36,155825,90209],{"class":42},[36,155827,155828],{"class":38,"line":54},[36,155829,70],{"emptyLinePlaceholder":69},[36,155831,155832,155834,155836,155838],{"class":38,"line":66},[36,155833,5410],{"class":46},[36,155835,150545],{"class":42},[36,155837,28413],{"class":46},[36,155839,155840],{"class":42}," sales:\n",[36,155842,155843,155846,155848,155851,155853],{"class":38,"line":73},[36,155844,155845],{"class":42},"    date ",[36,155847,47],{"class":46},[36,155849,155850],{"class":42}," item[",[36,155852,150333],{"class":50},[36,155854,35598],{"class":42},[36,155856,155857,155860,155862,155864,155866],{"class":38,"line":86},[36,155858,155859],{"class":42},"    amount ",[36,155861,47],{"class":46},[36,155863,155850],{"class":42},[36,155865,86426],{"class":50},[36,155867,35598],{"class":42},[36,155869,155870,155873,155875,155878,155880,155882,155884],{"class":38,"line":126},[36,155871,155872],{"class":42},"    daily_total[date] ",[36,155874,47],{"class":46},[36,155876,155877],{"class":42}," daily_total.get(date, ",[36,155879,2751],{"class":62},[36,155881,16091],{"class":42},[36,155883,1885],{"class":46},[36,155885,155886],{"class":42}," amount\n",[36,155888,155889],{"class":38,"line":131},[36,155890,70],{"emptyLinePlaceholder":69},[36,155892,155893,155895],{"class":38,"line":225},[36,155894,371],{"class":62},[36,155896,155897],{"class":42},"(daily_total)\n",[1752,155899,155901],{"id":155900},"_1253-按类别统计","12.5.3 按类别统计",[26,155903,155905],{"className":28,"code":155904,"language":30,"meta":31,"style":31},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[33,155906,155907,155916,155920,155930,155943,155955,155973,155977],{"__ignoreMap":31},[36,155908,155909,155912,155914],{"class":38,"line":39},[36,155910,155911],{"class":42},"category_total ",[36,155913,47],{"class":46},[36,155915,90209],{"class":42},[36,155917,155918],{"class":38,"line":54},[36,155919,70],{"emptyLinePlaceholder":69},[36,155921,155922,155924,155926,155928],{"class":38,"line":66},[36,155923,5410],{"class":46},[36,155925,150545],{"class":42},[36,155927,28413],{"class":46},[36,155929,155840],{"class":42},[36,155931,155932,155935,155937,155939,155941],{"class":38,"line":73},[36,155933,155934],{"class":42},"    category ",[36,155936,47],{"class":46},[36,155938,155850],{"class":42},[36,155940,155699],{"class":50},[36,155942,35598],{"class":42},[36,155944,155945,155947,155949,155951,155953],{"class":38,"line":86},[36,155946,155859],{"class":42},[36,155948,47],{"class":46},[36,155950,155850],{"class":42},[36,155952,86426],{"class":50},[36,155954,35598],{"class":42},[36,155956,155957,155960,155962,155965,155967,155969,155971],{"class":38,"line":126},[36,155958,155959],{"class":42},"    category_total[category] ",[36,155961,47],{"class":46},[36,155963,155964],{"class":42}," category_total.get(category, ",[36,155966,2751],{"class":62},[36,155968,16091],{"class":42},[36,155970,1885],{"class":46},[36,155972,155886],{"class":42},[36,155974,155975],{"class":38,"line":131},[36,155976,70],{"emptyLinePlaceholder":69},[36,155978,155979,155981],{"class":38,"line":225},[36,155980,371],{"class":62},[36,155982,155983],{"class":42},"(category_total)\n",[1752,155985,155987],{"id":155986},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,155989,155991],{"className":28,"code":155990,"language":30,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,155992,155993,156018],{"__ignoreMap":31},[36,155994,155995,155998,156000,156002,156005,156008,156011,156014,156016],{"class":38,"line":39},[36,155996,155997],{"class":42},"top_date, top_amount ",[36,155999,47],{"class":46},[36,156001,8333],{"class":62},[36,156003,156004],{"class":42},"(daily_total.items(), ",[36,156006,156007],{"class":7598},"key",[36,156009,156010],{"class":46},"=lambda",[36,156012,156013],{"class":42}," item: item[",[36,156015,1906],{"class":62},[36,156017,7040],{"class":42},[36,156019,156020,156022],{"class":38,"line":54},[36,156021,371],{"class":62},[36,156023,156024],{"class":42},"(top_date, top_amount)\n",[14,156026,156028],{"id":156027},"_126-绘制柱状图","12.6 绘制柱状图",[26,156030,156032],{"className":28,"code":156031,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[33,156033,156034,156048,156059,156063,156071,156083,156095,156106,156110,156114,156124,156135,156149,156154,156171,156188,156204,156208],{"__ignoreMap":31},[36,156035,156036,156038,156040,156042,156044,156046],{"class":38,"line":39},[36,156037,1937],{"class":46},[36,156039,149715],{"class":42},[36,156041,1943],{"class":46},[36,156043,149720],{"class":42},[36,156045,33737],{"class":46},[36,156047,149725],{"class":42},[36,156049,156050,156052,156054,156056],{"class":38,"line":54},[36,156051,1937],{"class":46},[36,156053,149574],{"class":42},[36,156055,1943],{"class":46},[36,156057,156058],{"class":42}," Bar\n",[36,156060,156061],{"class":38,"line":66},[36,156062,70],{"emptyLinePlaceholder":69},[36,156064,156065,156067,156069],{"class":38,"line":73},[36,156066,155911],{"class":42},[36,156068,47],{"class":46},[36,156070,2150],{"class":42},[36,156072,156073,156076,156078,156081],{"class":38,"line":86},[36,156074,156075],{"class":50},"    \"手机\"",[36,156077,2158],{"class":42},[36,156079,156080],{"class":62},"27000",[36,156082,33820],{"class":42},[36,156084,156085,156088,156090,156093],{"class":38,"line":126},[36,156086,156087],{"class":50},"    \"电脑\"",[36,156089,2158],{"class":42},[36,156091,156092],{"class":62},"34000",[36,156094,33820],{"class":42},[36,156096,156097,156100,156102,156104],{"class":38,"line":131},[36,156098,156099],{"class":50},"    \"耳机\"",[36,156101,2158],{"class":42},[36,156103,126738],{"class":62},[36,156105,33820],{"class":42},[36,156107,156108],{"class":38,"line":225},[36,156109,3982],{"class":42},[36,156111,156112],{"class":38,"line":235},[36,156113,70],{"emptyLinePlaceholder":69},[36,156115,156116,156119,156121],{"class":38,"line":377},[36,156117,156118],{"class":42},"bar ",[36,156120,47],{"class":46},[36,156122,156123],{"class":42}," Bar()\n",[36,156125,156126,156129,156132],{"class":38,"line":617},[36,156127,156128],{"class":42},"bar.add_xaxis(",[36,156130,156131],{"class":62},"list",[36,156133,156134],{"class":42},"(category_total.keys()))\n",[36,156136,156137,156140,156142,156144,156146],{"class":38,"line":643},[36,156138,156139],{"class":42},"bar.add_yaxis(",[36,156141,149631],{"class":50},[36,156143,630],{"class":42},[36,156145,156131],{"class":62},[36,156147,156148],{"class":42},"(category_total.values()))\n",[36,156150,156151],{"class":38,"line":921},[36,156152,156153],{"class":42},"bar.set_global_opts(\n",[36,156155,156156,156158,156160,156162,156164,156166,156169],{"class":38,"line":934},[36,156157,149809],{"class":7598},[36,156159,47],{"class":46},[36,156161,149814],{"class":42},[36,156163,53756],{"class":7598},[36,156165,47],{"class":46},[36,156167,156168],{"class":50},"\"品类销售额\"",[36,156170,40398],{"class":42},[36,156172,156173,156175,156177,156179,156181,156183,156186],{"class":38,"line":939},[36,156174,149828],{"class":7598},[36,156176,47],{"class":46},[36,156178,149833],{"class":42},[36,156180,104],{"class":7598},[36,156182,47],{"class":46},[36,156184,156185],{"class":50},"\"品类\"",[36,156187,40398],{"class":42},[36,156189,156190,156192,156194,156196,156198,156200,156202],{"class":38,"line":949},[36,156191,149847],{"class":7598},[36,156193,47],{"class":46},[36,156195,149833],{"class":42},[36,156197,104],{"class":7598},[36,156199,47],{"class":46},[36,156201,149631],{"class":50},[36,156203,40398],{"class":42},[36,156205,156206],{"class":38,"line":962},[36,156207,123],{"class":42},[36,156209,156210,156213,156216],{"class":38,"line":974},[36,156211,156212],{"class":42},"bar.render(",[36,156214,156215],{"class":50},"\"category_sales.html\"",[36,156217,123],{"class":42},[14,156219,156221],{"id":156220},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156223,156224],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,156226,156228],{"className":28,"code":156227,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[33,156229,156230,156244,156255,156259,156267,156291,156314,156339,156343,156347,156357,156361,156372,156381,156391,156405,156436,156441,156445],{"__ignoreMap":31},[36,156231,156232,156234,156236,156238,156240,156242],{"class":38,"line":39},[36,156233,1937],{"class":46},[36,156235,149715],{"class":42},[36,156237,1943],{"class":46},[36,156239,149720],{"class":42},[36,156241,33737],{"class":46},[36,156243,149725],{"class":42},[36,156245,156246,156248,156250,156252],{"class":38,"line":54},[36,156247,1937],{"class":46},[36,156249,149574],{"class":42},[36,156251,1943],{"class":46},[36,156253,156254],{"class":42}," Bar, Timeline\n",[36,156256,156257],{"class":38,"line":66},[36,156258,70],{"emptyLinePlaceholder":69},[36,156260,156261,156263,156265],{"class":38,"line":73},[36,156262,103998],{"class":42},[36,156264,47],{"class":46},[36,156266,2150],{"class":42},[36,156268,156269,156272,156275,156277,156279,156281,156283,156285,156287,156289],{"class":38,"line":86},[36,156270,156271],{"class":50},"    \"2024-10-01\"",[36,156273,156274],{"class":42},": {",[36,156276,155704],{"class":50},[36,156278,2158],{"class":42},[36,156280,155713],{"class":62},[36,156282,630],{"class":42},[36,156284,155734],{"class":50},[36,156286,2158],{"class":42},[36,156288,155743],{"class":62},[36,156290,7313],{"class":42},[36,156292,156293,156296,156298,156300,156302,156304,156306,156308,156310,156312],{"class":38,"line":126},[36,156294,156295],{"class":50},"    \"2024-10-02\"",[36,156297,156274],{"class":42},[36,156299,155704],{"class":50},[36,156301,2158],{"class":42},[36,156303,155772],{"class":62},[36,156305,630],{"class":42},[36,156307,155734],{"class":50},[36,156309,2158],{"class":42},[36,156311,155801],{"class":62},[36,156313,7313],{"class":42},[36,156315,156316,156319,156321,156323,156325,156328,156330,156332,156334,156337],{"class":38,"line":131},[36,156317,156318],{"class":50},"    \"2024-10-03\"",[36,156320,156274],{"class":42},[36,156322,155704],{"class":50},[36,156324,2158],{"class":42},[36,156326,156327],{"class":62},"17000",[36,156329,630],{"class":42},[36,156331,155734],{"class":50},[36,156333,2158],{"class":42},[36,156335,156336],{"class":62},"19000",[36,156338,7313],{"class":42},[36,156340,156341],{"class":38,"line":225},[36,156342,3982],{"class":42},[36,156344,156345],{"class":38,"line":235},[36,156346,70],{"emptyLinePlaceholder":69},[36,156348,156349,156352,156354],{"class":38,"line":377},[36,156350,156351],{"class":42},"timeline ",[36,156353,47],{"class":46},[36,156355,156356],{"class":42}," Timeline()\n",[36,156358,156359],{"class":38,"line":617},[36,156360,70],{"emptyLinePlaceholder":69},[36,156362,156363,156365,156368,156370],{"class":38,"line":643},[36,156364,5410],{"class":46},[36,156366,156367],{"class":42}," date, category_data ",[36,156369,28413],{"class":46},[36,156371,151484],{"class":42},[36,156373,156374,156377,156379],{"class":38,"line":921},[36,156375,156376],{"class":42},"    bar ",[36,156378,47],{"class":46},[36,156380,156123],{"class":42},[36,156382,156383,156386,156388],{"class":38,"line":934},[36,156384,156385],{"class":42},"    bar.add_xaxis(",[36,156387,156131],{"class":62},[36,156389,156390],{"class":42},"(category_data.keys()))\n",[36,156392,156393,156396,156398,156400,156402],{"class":38,"line":939},[36,156394,156395],{"class":42},"    bar.add_yaxis(",[36,156397,149631],{"class":50},[36,156399,630],{"class":42},[36,156401,156131],{"class":62},[36,156403,156404],{"class":42},"(category_data.values()))\n",[36,156406,156407,156410,156413,156415,156417,156419,156421,156423,156425,156427,156429,156431,156434],{"class":38,"line":949},[36,156408,156409],{"class":42},"    bar.set_global_opts(",[36,156411,156412],{"class":7598},"title_opts",[36,156414,47],{"class":46},[36,156416,149814],{"class":42},[36,156418,53756],{"class":7598},[36,156420,47],{"class":46},[36,156422,95],{"class":46},[36,156424,604],{"class":50},[36,156426,101],{"class":62},[36,156428,76271],{"class":42},[36,156430,107],{"class":62},[36,156432,156433],{"class":50},"销售额\"",[36,156435,1914],{"class":42},[36,156437,156438],{"class":38,"line":962},[36,156439,156440],{"class":42},"    timeline.add(bar, date)\n",[36,156442,156443],{"class":38,"line":974},[36,156444,70],{"emptyLinePlaceholder":69},[36,156446,156447,156450,156453],{"class":38,"line":979},[36,156448,156449],{"class":42},"timeline.render(",[36,156451,156452],{"class":50},"\"timeline_sales.html\"",[36,156454,123],{"class":42},[14,156456,156458],{"id":156457},"_128-绘制地图","12.8 绘制地图",[19,156460,156461],{},"地图适合展示地区数据。",[26,156463,156465],{"className":28,"code":156464,"language":30,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[33,156466,156467,156481,156492,156496,156504,156517,156529,156542,156555,156559,156563,156573,156588,156593,156610,156629,156633],{"__ignoreMap":31},[36,156468,156469,156471,156473,156475,156477,156479],{"class":38,"line":39},[36,156470,1937],{"class":46},[36,156472,149715],{"class":42},[36,156474,1943],{"class":46},[36,156476,149720],{"class":42},[36,156478,33737],{"class":46},[36,156480,149725],{"class":42},[36,156482,156483,156485,156487,156489],{"class":38,"line":54},[36,156484,1937],{"class":46},[36,156486,149574],{"class":42},[36,156488,1943],{"class":46},[36,156490,156491],{"class":42}," Map\n",[36,156493,156494],{"class":38,"line":66},[36,156495,70],{"emptyLinePlaceholder":69},[36,156497,156498,156500,156502],{"class":38,"line":73},[36,156499,103998],{"class":42},[36,156501,47],{"class":46},[36,156503,57795],{"class":42},[36,156505,156506,156509,156511,156513,156515],{"class":38,"line":86},[36,156507,156508],{"class":42},"    (",[36,156510,71615],{"class":50},[36,156512,630],{"class":42},[36,156514,3371],{"class":62},[36,156516,40398],{"class":42},[36,156518,156519,156521,156523,156525,156527],{"class":38,"line":126},[36,156520,156508],{"class":42},[36,156522,71635],{"class":50},[36,156524,630],{"class":42},[36,156526,149648],{"class":62},[36,156528,40398],{"class":42},[36,156530,156531,156533,156536,156538,156540],{"class":38,"line":131},[36,156532,156508],{"class":42},[36,156534,156535],{"class":50},"\"广东\"",[36,156537,630],{"class":42},[36,156539,1059],{"class":62},[36,156541,40398],{"class":42},[36,156543,156544,156546,156549,156551,156553],{"class":38,"line":225},[36,156545,156508],{"class":42},[36,156547,156548],{"class":50},"\"浙江\"",[36,156550,630],{"class":42},[36,156552,149653],{"class":62},[36,156554,40398],{"class":42},[36,156556,156557],{"class":38,"line":235},[36,156558,35598],{"class":42},[36,156560,156561],{"class":38,"line":377},[36,156562,70],{"emptyLinePlaceholder":69},[36,156564,156565,156568,156570],{"class":38,"line":617},[36,156566,156567],{"class":42},"map_chart ",[36,156569,47],{"class":46},[36,156571,156572],{"class":42}," Map()\n",[36,156574,156575,156578,156580,156583,156586],{"class":38,"line":643},[36,156576,156577],{"class":42},"map_chart.add(",[36,156579,149631],{"class":50},[36,156581,156582],{"class":42},", data, ",[36,156584,156585],{"class":50},"\"china\"",[36,156587,123],{"class":42},[36,156589,156590],{"class":38,"line":921},[36,156591,156592],{"class":42},"map_chart.set_global_opts(\n",[36,156594,156595,156597,156599,156601,156603,156605,156608],{"class":38,"line":934},[36,156596,149809],{"class":7598},[36,156598,47],{"class":46},[36,156600,149814],{"class":42},[36,156602,53756],{"class":7598},[36,156604,47],{"class":46},[36,156606,156607],{"class":50},"\"地区销售额\"",[36,156609,40398],{"class":42},[36,156611,156612,156615,156617,156620,156623,156625,156627],{"class":38,"line":939},[36,156613,156614],{"class":7598},"    visualmap_opts",[36,156616,47],{"class":46},[36,156618,156619],{"class":42},"opts.VisualMapOpts(",[36,156621,156622],{"class":7598},"max_",[36,156624,47],{"class":46},[36,156626,1059],{"class":62},[36,156628,40398],{"class":42},[36,156630,156631],{"class":38,"line":949},[36,156632,123],{"class":42},[36,156634,156635,156638,156641],{"class":38,"line":962},[36,156636,156637],{"class":42},"map_chart.render(",[36,156639,156640],{"class":50},"\"map_sales.html\"",[36,156642,123],{"class":42},[19,156644,156645],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156647,156649],{"id":156648},"_129-项目拆分建议","12.9 项目拆分建议",[19,156651,156652],{},"当代码超过一个文件时，可以这样组织：",[26,156654,156657],{"className":156655,"code":156656,"language":7570,"meta":31},[7568],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[33,156658,156656],{"__ignoreMap":31},[19,156660,156661],{},"职责：",[650,156663,156664,156670,156676,156682],{},[653,156665,156666,156669],{},[33,156667,156668],{},"main.py","：程序入口。",[653,156671,156672,156675],{},[33,156673,156674],{},"file_utils.py","：读写 JSON。",[653,156677,156678,156681],{},[33,156679,156680],{},"sales_service.py","：统计销售数据。",[653,156683,156684,156687],{},[33,156685,156686],{},"chart_builder.py","：生成图表。",[14,156689,156691],{"id":156690},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156693,156694],{},"语法基础：",[650,156696,156697,156700,156703,156706],{},[653,156698,156699],{},"会写变量、注释、输入输出。",[653,156701,156702],{},"会使用 int、float、str、bool。",[653,156704,156705],{},"会做类型转换。",[653,156707,156708],{},"会使用 f-string 格式化输出。",[19,156710,156711],{},"流程控制：",[650,156713,156714,156720,156726,156734],{},[653,156715,156716,156717,676],{},"会写 ",[33,156718,156719],{},"if elif else",[653,156721,156716,156722,302,156724,676],{},[33,156723,111002],{},[33,156725,5410],{},[653,156727,156728,156729,302,156731,676],{},"理解 ",[33,156730,4446],{},[33,156732,156733],{},"continue",[653,156735,156736],{},"能写嵌套循环。",[19,156738,156739],{},"函数：",[650,156741,156742,156745,156748,156751],{},[653,156743,156744],{},"会定义和调用函数。",[653,156746,156747],{},"理解参数和返回值。",[653,156749,156750],{},"知道局部变量和全局变量。",[653,156752,156753],{},"会使用默认参数、关键字参数、不定长参数。",[19,156755,156756],{},"容器：",[650,156758,156759,156762,156765,156768,156771],{},[653,156760,156761],{},"会使用列表增删改查。",[653,156763,156764],{},"会遍历列表、字典。",[653,156766,156767],{},"会使用切片。",[653,156769,156770],{},"会用集合去重。",[653,156772,156773],{},"会处理列表嵌套字典。",[19,156775,156776],{},"文件和模块：",[650,156778,156779,156782,156785,156788,156791],{},[653,156780,156781],{},"会读写文本文件。",[653,156783,156784],{},"会读写 JSON。",[653,156786,156787],{},"会捕获常见异常。",[653,156789,156790],{},"会导入模块和第三方包。",[653,156792,156793],{},"会创建简单包结构。",[19,156795,156796],{},"项目能力：",[650,156798,156799,156802,156805,156808,156811],{},[653,156800,156801],{},"能把代码拆成函数。",[653,156803,156804],{},"能把数据保存到文件。",[653,156806,156807],{},"能处理用户输入错误。",[653,156809,156810],{},"能写一个完整菜单程序。",[653,156812,156813],{},"能用 pyecharts 生成图表。",[14,156815,156817],{"id":156816},"_1211-推荐练习顺序","12.11 推荐练习顺序",[650,156819,156820,156823,156826,156829,156832,156835,156838,156841],{},[653,156821,156822],{},"猜数字游戏。",[653,156824,156825],{},"ATM 菜单程序。",[653,156827,156828],{},"学生成绩统计。",[653,156830,156831],{},"学生管理系统函数版。",[653,156833,156834],{},"学生管理系统文件持久化版。",[653,156836,156837],{},"学生管理系统面向对象版。",[653,156839,156840],{},"销售数据统计。",[653,156842,156843],{},"销售数据可视化。",[14,156845,156847],{"id":156846},"_1212-常见学习误区","12.12 常见学习误区",[650,156849,156850,156853,156856,156859,156862,156865,156868],{},[653,156851,156852],{},"只看视频不敲代码。",[653,156854,156855],{},"一报错就复制错误去搜，不先读报错位置。",[653,156857,156858],{},"变量名随便写，后续自己看不懂。",[653,156860,156861],{},"所有代码都写在一个文件一个函数里。",[653,156863,156864],{},"不保存练习代码，复习时没有材料。",[653,156866,156867],{},"还没掌握列表字典就急着学框架。",[653,156869,156870],{},"不会读官方文档，只依赖教程。",[14,156872,156874],{"id":156873},"_1213-如何读报错","12.13 如何读报错",[19,156876,156877],{},"报错通常从下往上看最后几行。",[19,156879,17510],{},[26,156881,156884],{"className":156882,"code":156883,"language":7570,"meta":31},[7568],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,156885,156883],{"__ignoreMap":31},[19,156887,26970],{},[650,156889,156890,156896,156906],{},[653,156891,156892,156893,676],{},"异常类型是 ",[33,156894,156895],{},"ValueError",[653,156897,109684,156898,156901,156902,156905],{},[33,156899,156900],{},"int()"," 无法把 ",[33,156903,156904],{},"'abc'"," 转成整数。",[653,156907,156908],{},"应该检查输入内容或增加异常处理。",[19,156910,156911],{},"再看文件名和行号：",[26,156913,156916],{"className":156914,"code":156915,"language":7570,"meta":31},[7568],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,156917,156915],{"__ignoreMap":31},[19,156919,156920,156921,156923],{},"表示错误发生在 ",[33,156922,156668],{}," 第 10 行。",[14,156925,156927],{"id":156926},"_1214-后续学习方向","12.14 后续学习方向",[19,156929,156930],{},"Python 基础完成后，可以按兴趣选择方向：",[650,156932,156933,156945,156954,156966,156977,156986,156996],{},[653,156934,156935,156936,2031,156939,2031,156942,676],{},"自动化办公：",[33,156937,156938],{},"openpyxl",[33,156940,156941],{},"python-docx",[33,156943,156944],{},"pdfplumber",[653,156946,156947,156948,2031,156950,2031,156952,676],{},"数据分析：",[33,156949,102967],{},[33,156951,148524],{},[33,156953,148532],{},[653,156955,156956,156957,2031,156960,2031,156963,676],{},"Web 后端：",[33,156958,156959],{},"Flask",[33,156961,156962],{},"FastAPI",[33,156964,156965],{},"Django",[653,156967,156968,156969,2031,156971,2031,156974,676],{},"爬虫：",[33,156970,148509],{},[33,156972,156973],{},"BeautifulSoup",[33,156975,156976],{},"Scrapy",[653,156978,156979,156980,2031,156982,156985],{},"测试开发：",[33,156981,148556],{},[33,156983,156984],{},"selenium","、接口测试。",[653,156987,156988,156989,2031,156991,2031,156993,676],{},"人工智能：",[33,156990,102967],{},[33,156992,148524],{},[33,156994,156995],{},"pytorch",[653,156997,156998,156999,2031,157001,2031,157004,676],{},"运维脚本：",[33,157000,148125],{},[33,157002,157003],{},"subprocess",[33,157005,157006],{},"paramiko",[19,157008,157009],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157011,157013],{"id":157012},"_1215-结课练习","12.15 结课练习",[650,157015,157016,157019,157022,157025,157028,157031,157034,157037],{},[653,157017,157018],{},"完成函数版学生管理系统。",[653,157020,157021],{},"给学生管理系统增加 JSON 持久化。",[653,157023,157024],{},"给学生管理系统增加异常处理。",[653,157026,157027],{},"把学生管理系统改成面向对象版。",[653,157029,157030],{},"使用 pyecharts 绘制学生成绩柱状图。",[653,157032,157033],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[653,157035,157036],{},"按品类统计销售额并绘制柱状图。",[653,157038,157039],{},"写一份自己的 Python 学习路线图。",[2467,157041,157042],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":157044},[157045,157046,157049,157050,157051,157057,157058,157059,157060,157061,157062,157063,157064,157065,157066],{"id":153761,"depth":54,"text":153762},{"id":153811,"depth":54,"text":153812,"children":157047},[157048],{"id":153815,"depth":66,"text":153816},{"id":153854,"depth":54,"text":153855},{"id":155328,"depth":54,"text":155329},{"id":155666,"depth":54,"text":155667,"children":157052},[157053,157054,157055,157056],{"id":155670,"depth":66,"text":155671},{"id":155810,"depth":66,"text":155811},{"id":155900,"depth":66,"text":155901},{"id":155986,"depth":66,"text":155987},{"id":156027,"depth":54,"text":156028},{"id":156220,"depth":54,"text":156221},{"id":156457,"depth":54,"text":156458},{"id":156648,"depth":54,"text":156649},{"id":156690,"depth":54,"text":156691},{"id":156816,"depth":54,"text":156817},{"id":156846,"depth":54,"text":156847},{"id":156873,"depth":54,"text":156874},{"id":156926,"depth":54,"text":156927},{"id":157012,"depth":54,"text":157013},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153753,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157073,"title":157074,"body":157075,"description":2493,"extension":2494,"meta":159544,"navigation":69,"path":159545,"seo":159546,"stem":159547,"__hash__":159548},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157076,"toc":159519},[157077,157080,157084,157087,157090,157110,157113,157136,157139,157142,157164,157167,157189,157193,157196,157236,157239,157360,157364,157367,157407,157410,157434,157437,157441,157444,157458,157491,157494,157529,157532,157555,157558,157591,157594,157596,157602,157677,157680,157686,157703,157743,157747,157750,157796,157798,157836,157839,157874,157877,157912,157915,157947,157950,157969,157973,157977,158090,158092,158167,158171,158217,158220,158246,158255,158259,158262,158325,158333,158361,158365,158405,158470,158474,158477,158516,158519,158564,158567,158628,158632,158659,158662,158690,158693,158697,158701,158766,158769,158807,158810,158842,158846,158945,158949,158952,159025,159028,159076,159080,159086,159126,159129,159176,159179,159228,159232,159234,159248,159250,159431,159435,159462,159482,159489,159493,159510,159516],[10,157078,157074],{"id":157079},"_2-基础语法变量与字符串",[14,157081,157083],{"id":157082},"_21-注释","2.1 注释",[19,157085,157086],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157088,157089],{},"单行注释：",[26,157091,157093],{"className":28,"code":157092,"language":30,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,157094,157095,157100],{"__ignoreMap":31},[36,157096,157097],{"class":38,"line":39},[36,157098,157099],{"class":2621},"# 这是单行注释\n",[36,157101,157102,157104,157106,157108],{"class":38,"line":54},[36,157103,371],{"class":62},[36,157105,92],{"class":42},[36,157107,8226],{"class":50},[36,157109,123],{"class":42},[19,157111,157112],{},"多行说明常用三引号：",[26,157114,157116],{"className":28,"code":157115,"language":30,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,157117,157118,157122,157127,157132],{"__ignoreMap":31},[36,157119,157120],{"class":38,"line":39},[36,157121,98039],{"class":50},[36,157123,157124],{"class":38,"line":54},[36,157125,157126],{"class":50},"这是多行说明。\n",[36,157128,157129],{"class":38,"line":66},[36,157130,157131],{"class":50},"常用于文件顶部说明、函数说明等。\n",[36,157133,157134],{"class":38,"line":73},[36,157135,98039],{"class":50},[19,157137,157138],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157140,157141],{},"不好：",[26,157143,157145],{"className":28,"code":157144,"language":30,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,157146,157147,157152],{"__ignoreMap":31},[36,157148,157149],{"class":38,"line":39},[36,157150,157151],{"class":2621},"# age 加 1\n",[36,157153,157154,157156,157158,157160,157162],{"class":38,"line":54},[36,157155,57],{"class":42},[36,157157,47],{"class":46},[36,157159,18080],{"class":42},[36,157161,1885],{"class":46},[36,157163,58047],{"class":62},[19,157165,157166],{},"较好：",[26,157168,157170],{"className":28,"code":157169,"language":30,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,157171,157172,157177],{"__ignoreMap":31},[36,157173,157174],{"class":38,"line":39},[36,157175,157176],{"class":2621},"# 用户过完生日后，年龄增加一岁\n",[36,157178,157179,157181,157183,157185,157187],{"class":38,"line":54},[36,157180,57],{"class":42},[36,157182,47],{"class":46},[36,157184,18080],{"class":42},[36,157186,1885],{"class":46},[36,157188,58047],{"class":62},[14,157190,157192],{"id":157191},"_22-字面量","2.2 字面量",[19,157194,157195],{},"字面量就是代码中直接写出来的数据。",[26,157197,157199],{"className":28,"code":157198,"language":30,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,157200,157201,157208,157215,157222,157229],{"__ignoreMap":31},[36,157202,157203,157205],{"class":38,"line":39},[36,157204,1070],{"class":62},[36,157206,157207],{"class":2621},"          # 整数\n",[36,157209,157210,157212],{"class":38,"line":54},[36,157211,2613],{"class":62},[36,157213,157214],{"class":2621},"         # 小数\n",[36,157216,157217,157219],{"class":38,"line":66},[36,157218,8226],{"class":50},[36,157220,157221],{"class":2621},"      # 字符串\n",[36,157223,157224,157226],{"class":38,"line":73},[36,157225,33830],{"class":62},[36,157227,157228],{"class":2621},"         # 布尔值\n",[36,157230,157231,157233],{"class":38,"line":86},[36,157232,98027],{"class":62},[36,157234,157235],{"class":2621},"         # 空值\n",[19,157237,157238],{},"常见字面量类型：",[2698,157240,157241,157251],{},[2701,157242,157243],{},[2704,157244,157245,157247,157249],{},[2707,157246,26107],{},[2707,157248,29862],{},[2707,157250,28239],{},[2744,157252,157253,157264,157275,157286,157298,157310,157322,157335,157347],{},[2704,157254,157255,157257,157261],{},[2749,157256,2570],{},[2749,157258,157259],{},[33,157260,1070],{},[2749,157262,157263],{},"整数",[2704,157265,157266,157268,157272],{},[2749,157267,2605],{},[2749,157269,157270],{},[33,157271,2613],{},[2749,157273,157274],{},"浮点数",[2704,157276,157277,157279,157283],{},[2749,157278,669],{},[2749,157280,157281],{},[33,157282,8226],{},[2749,157284,157285],{},"字符串",[2704,157287,157288,157290,157296],{},[2749,157289,3771],{},[2749,157291,157292,2031,157294],{},[33,157293,33830],{},[33,157295,36339],{},[2749,157297,68362],{},[2704,157299,157300,157303,157307],{},[2749,157301,157302],{},"NoneType",[2749,157304,157305],{},[33,157306,98027],{},[2749,157308,157309],{},"空值",[2704,157311,157312,157314,157319],{},[2749,157313,156131],{},[2749,157315,157316],{},[33,157317,157318],{},"[1, 2, 3]",[2749,157320,157321],{},"列表",[2704,157323,157324,157327,157332],{},[2749,157325,157326],{},"tuple",[2749,157328,157329],{},[33,157330,157331],{},"(1, 2, 3)",[2749,157333,157334],{},"元组",[2704,157336,157337,157339,157344],{},[2749,157338,116885],{},[2749,157340,157341],{},[33,157342,157343],{},"{\"name\": \"张三\"}",[2749,157345,157346],{},"字典",[2704,157348,157349,157352,157357],{},[2749,157350,157351],{},"set",[2749,157353,157354],{},[33,157355,157356],{},"{1, 2, 3}",[2749,157358,157359],{},"集合",[14,157361,157363],{"id":157362},"_23-变量","2.3 变量",[19,157365,157366],{},"变量是保存数据的名字。",[26,157368,157370],{"className":28,"code":157369,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,157371,157372,157380,157388,157398],{"__ignoreMap":31},[36,157373,157374,157376,157378],{"class":38,"line":39},[36,157375,43],{"class":42},[36,157377,47],{"class":46},[36,157379,51],{"class":50},[36,157381,157382,157384,157386],{"class":38,"line":54},[36,157383,57],{"class":42},[36,157385,47],{"class":46},[36,157387,63],{"class":62},[36,157389,157390,157393,157395],{"class":38,"line":66},[36,157391,157392],{"class":42},"height ",[36,157394,47],{"class":46},[36,157396,157397],{"class":62}," 1.75\n",[36,157399,157400,157403,157405],{"class":38,"line":73},[36,157401,157402],{"class":42},"is_student ",[36,157404,47],{"class":46},[36,157406,155660],{"class":62},[19,157408,157409],{},"Python 的变量不需要提前声明类型：",[26,157411,157413],{"className":28,"code":157412,"language":30,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,157414,157415,157425],{"__ignoreMap":31},[36,157416,157417,157420,157422],{"class":38,"line":39},[36,157418,157419],{"class":42},"score ",[36,157421,47],{"class":46},[36,157423,157424],{"class":62}," 100\n",[36,157426,157427,157429,157431],{"class":38,"line":54},[36,157428,157419],{"class":42},[36,157430,47],{"class":46},[36,157432,157433],{"class":50}," \"满分\"\n",[19,157435,157436],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157438,157440],{"id":157439},"_24-变量命名规则","2.4 变量命名规则",[19,157442,157443],{},"硬性规则：",[650,157445,157446,157449,157452,157455],{},[653,157447,157448],{},"只能由字母、数字、下划线组成。",[653,157450,157451],{},"不能以数字开头。",[653,157453,157454],{},"不能使用 Python 关键字。",[653,157456,157457],{},"区分大小写。",[26,157459,157461],{"className":28,"code":157460,"language":30,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,157462,157463,157472,157481],{"__ignoreMap":31},[36,157464,157465,157468,157470],{"class":38,"line":39},[36,157466,157467],{"class":42},"user_name ",[36,157469,47],{"class":46},[36,157471,148879],{"class":50},[36,157473,157474,157477,157479],{"class":38,"line":54},[36,157475,157476],{"class":42},"age2 ",[36,157478,47],{"class":46},[36,157480,63],{"class":62},[36,157482,157483,157486,157488],{"class":38,"line":66},[36,157484,157485],{"class":42},"_token ",[36,157487,47],{"class":46},[36,157489,157490],{"class":50}," \"abc\"\n",[19,157492,157493],{},"错误写法：",[26,157495,157497],{"className":28,"code":157496,"language":30,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,157498,157499,157508,157520],{"__ignoreMap":31},[36,157500,157501,157504,157506],{"class":38,"line":39},[36,157502,157503],{"class":79748},"2age",[36,157505,15941],{"class":46},[36,157507,63],{"class":62},[36,157509,157510,157512,157514,157516,157518],{"class":38,"line":54},[36,157511,133923],{"class":42},[36,157513,3087],{"class":46},[36,157515,43],{"class":42},[36,157517,47],{"class":46},[36,157519,148879],{"class":50},[36,157521,157522,157524,157526],{"class":38,"line":66},[36,157523,147],{"class":46},[36,157525,15941],{"class":46},[36,157527,157528],{"class":50}," \"一班\"\n",[19,157530,157531],{},"查看关键字：",[26,157533,157535],{"className":28,"code":157534,"language":30,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,157536,157537,157544,157548],{"__ignoreMap":31},[36,157538,157539,157541],{"class":38,"line":39},[36,157540,1943],{"class":46},[36,157542,157543],{"class":42}," keyword\n",[36,157545,157546],{"class":38,"line":54},[36,157547,70],{"emptyLinePlaceholder":69},[36,157549,157550,157552],{"class":38,"line":66},[36,157551,371],{"class":62},[36,157553,157554],{"class":42},"(keyword.kwlist)\n",[19,157556,157557],{},"推荐命名风格：",[26,157559,157561],{"className":28,"code":157560,"language":30,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,157562,157563,157572,157582],{"__ignoreMap":31},[36,157564,157565,157568,157570],{"class":38,"line":39},[36,157566,157567],{"class":42},"student_name ",[36,157569,47],{"class":46},[36,157571,51],{"class":50},[36,157573,157574,157577,157579],{"class":38,"line":54},[36,157575,157576],{"class":42},"total_price ",[36,157578,47],{"class":46},[36,157580,157581],{"class":62}," 99.8\n",[36,157583,157584,157587,157589],{"class":38,"line":66},[36,157585,157586],{"class":42},"is_finished ",[36,157588,47],{"class":46},[36,157590,128146],{"class":62},[19,157592,157593],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157595,53081],{"id":53080},[19,157597,2459,157598,157601],{},[33,157599,157600],{},"type()"," 查看数据类型：",[26,157603,157605],{"className":28,"code":157604,"language":30,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,157606,157607,157621,157635,157649,157663],{"__ignoreMap":31},[36,157608,157609,157611,157613,157615,157617,157619],{"class":38,"line":39},[36,157610,371],{"class":62},[36,157612,92],{"class":42},[36,157614,105447],{"class":62},[36,157616,92],{"class":42},[36,157618,1070],{"class":62},[36,157620,1914],{"class":42},[36,157622,157623,157625,157627,157629,157631,157633],{"class":38,"line":54},[36,157624,371],{"class":62},[36,157626,92],{"class":42},[36,157628,105447],{"class":62},[36,157630,92],{"class":42},[36,157632,2613],{"class":62},[36,157634,1914],{"class":42},[36,157636,157637,157639,157641,157643,157645,157647],{"class":38,"line":66},[36,157638,371],{"class":62},[36,157640,92],{"class":42},[36,157642,105447],{"class":62},[36,157644,92],{"class":42},[36,157646,8226],{"class":50},[36,157648,1914],{"class":42},[36,157650,157651,157653,157655,157657,157659,157661],{"class":38,"line":73},[36,157652,371],{"class":62},[36,157654,92],{"class":42},[36,157656,105447],{"class":62},[36,157658,92],{"class":42},[36,157660,33830],{"class":62},[36,157662,1914],{"class":42},[36,157664,157665,157667,157669,157671,157673,157675],{"class":38,"line":86},[36,157666,371],{"class":62},[36,157668,92],{"class":42},[36,157670,105447],{"class":62},[36,157672,92],{"class":42},[36,157674,98027],{"class":62},[36,157676,1914],{"class":42},[19,157678,157679],{},"输出类似：",[26,157681,157684],{"className":157682,"code":157683,"language":7570,"meta":31},[7568],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,157685,157683],{"__ignoreMap":31},[19,157687,11405,157688,109622,157690,157692,157693,157695,157696,23870,157698,157695,157700,157702],{},[33,157689,3771],{},[33,157691,2570],{}," 的子类，",[33,157694,33830],{}," 可以当作 ",[33,157697,1906],{},[33,157699,36339],{},[33,157701,2751],{},"，但业务代码中不要滥用。",[26,157704,157706],{"className":28,"code":157705,"language":30,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,157707,157708,157726],{"__ignoreMap":31},[36,157709,157710,157712,157714,157716,157718,157720,157723],{"class":38,"line":39},[36,157711,371],{"class":62},[36,157713,92],{"class":42},[36,157715,33830],{"class":62},[36,157717,47915],{"class":46},[36,157719,27489],{"class":62},[36,157721,157722],{"class":42},")   ",[36,157724,157725],{"class":2621},"# 2\n",[36,157727,157728,157730,157732,157734,157736,157738,157740],{"class":38,"line":54},[36,157729,371],{"class":62},[36,157731,92],{"class":42},[36,157733,36339],{"class":62},[36,157735,47915],{"class":46},[36,157737,27489],{"class":62},[36,157739,48157],{"class":42},[36,157741,157742],{"class":2621},"# 1\n",[14,157744,157746],{"id":157745},"_26-类型转换","2.6 类型转换",[19,157748,157749],{},"常用转换函数：",[26,157751,157753],{"className":28,"code":157752,"language":30,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,157754,157755,157765,157776,157786],{"__ignoreMap":31},[36,157756,157757,157759,157761,157763],{"class":38,"line":39},[36,157758,2570],{"class":62},[36,157760,92],{"class":42},[36,157762,56664],{"class":50},[36,157764,123],{"class":42},[36,157766,157767,157769,157771,157774],{"class":38,"line":54},[36,157768,2605],{"class":62},[36,157770,92],{"class":42},[36,157772,157773],{"class":50},"\"3.14\"",[36,157775,123],{"class":42},[36,157777,157778,157780,157782,157784],{"class":38,"line":66},[36,157779,669],{"class":62},[36,157781,92],{"class":42},[36,157783,1070],{"class":62},[36,157785,123],{"class":42},[36,157787,157788,157790,157792,157794],{"class":38,"line":73},[36,157789,3771],{"class":62},[36,157791,92],{"class":42},[36,157793,1906],{"class":62},[36,157795,123],{"class":42},[19,157797,17510],{},[26,157799,157801],{"className":28,"code":157800,"language":30,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,157802,157803,157812,157823],{"__ignoreMap":31},[36,157804,157805,157807,157809],{"class":38,"line":39},[36,157806,57],{"class":42},[36,157808,47],{"class":46},[36,157810,157811],{"class":50}," \"18\"\n",[36,157813,157814,157816,157818,157820],{"class":38,"line":54},[36,157815,57],{"class":42},[36,157817,47],{"class":46},[36,157819,4775],{"class":62},[36,157821,157822],{"class":42},"(age)\n",[36,157824,157825,157827,157830,157832,157834],{"class":38,"line":66},[36,157826,371],{"class":62},[36,157828,157829],{"class":42},"(age ",[36,157831,1885],{"class":46},[36,157833,27489],{"class":62},[36,157835,123],{"class":42},[19,157837,157838],{},"输入得到的内容永远是字符串：",[26,157840,157842],{"className":28,"code":157841,"language":30,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,157843,157844,157860],{"__ignoreMap":31},[36,157845,157846,157849,157851,157853,157855,157858],{"class":38,"line":39},[36,157847,157848],{"class":42},"num ",[36,157850,47],{"class":46},[36,157852,62953],{"class":62},[36,157854,92],{"class":42},[36,157856,157857],{"class":50},"\"请输入数字:\"",[36,157859,123],{"class":42},[36,157861,157862,157864,157866,157868,157871],{"class":38,"line":54},[36,157863,371],{"class":62},[36,157865,92],{"class":42},[36,157867,105447],{"class":62},[36,157869,157870],{"class":42},"(num))  ",[36,157872,157873],{"class":2621},"# str\n",[19,157875,157876],{},"如果要做数学运算，必须转换：",[26,157878,157880],{"className":28,"code":157879,"language":30,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,157881,157882,157900],{"__ignoreMap":31},[36,157883,157884,157886,157888,157890,157892,157894,157896,157898],{"class":38,"line":39},[36,157885,157848],{"class":42},[36,157887,47],{"class":46},[36,157889,4775],{"class":62},[36,157891,92],{"class":42},[36,157893,56169],{"class":62},[36,157895,92],{"class":42},[36,157897,157857],{"class":50},[36,157899,1914],{"class":42},[36,157901,157902,157904,157906,157908,157910],{"class":38,"line":54},[36,157903,371],{"class":62},[36,157905,47968],{"class":42},[36,157907,1885],{"class":46},[36,157909,4431],{"class":62},[36,157911,123],{"class":42},[19,157913,157914],{},"常见错误：",[26,157916,157918],{"className":28,"code":157917,"language":30,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,157919,157920,157933],{"__ignoreMap":31},[36,157921,157922,157924,157926,157928,157930],{"class":38,"line":39},[36,157923,2570],{"class":62},[36,157925,92],{"class":42},[36,157927,157773],{"class":50},[36,157929,157722],{"class":42},[36,157931,157932],{"class":2621},"# 错误\n",[36,157934,157935,157937,157939,157942,157945],{"class":38,"line":54},[36,157936,2570],{"class":62},[36,157938,92],{"class":42},[36,157940,157941],{"class":50},"\"abc\"",[36,157943,157944],{"class":42},")    ",[36,157946,157932],{"class":2621},[19,157948,157949],{},"正确写法：",[26,157951,157953],{"className":28,"code":157952,"language":30,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,157954,157955],{"__ignoreMap":31},[36,157956,157957,157959,157961,157963,157965,157967],{"class":38,"line":39},[36,157958,157848],{"class":42},[36,157960,47],{"class":46},[36,157962,112136],{"class":62},[36,157964,92],{"class":42},[36,157966,157773],{"class":50},[36,157968,123],{"class":42},[14,157970,157972],{"id":157971},"_27-运算符","2.7 运算符",[1752,157974,157976],{"id":157975},"_271-算术运算符","2.7.1 算术运算符",[2698,157978,157979,157990],{},[2701,157980,157981],{},[2704,157982,157983,157986,157988],{},[2707,157984,157985],{},"运算符",[2707,157987,28239],{},[2707,157989,29862],{},[2744,157991,157992,158006,158020,158034,158048,158062,158076],{},[2704,157993,157994,157998,158001],{},[2749,157995,157996],{},[33,157997,1885],{},[2749,157999,158000],{},"加法",[2749,158002,158003],{},[33,158004,158005],{},"1 + 2",[2704,158007,158008,158012,158015],{},[2749,158009,158010],{},[33,158011,3087],{},[2749,158013,158014],{},"减法",[2749,158016,158017],{},[33,158018,158019],{},"5 - 3",[2704,158021,158022,158026,158029],{},[2749,158023,158024],{},[33,158025,3011],{},[2749,158027,158028],{},"乘法",[2749,158030,158031],{},[33,158032,158033],{},"2 * 3",[2704,158035,158036,158040,158043],{},[2749,158037,158038],{},[33,158039,3139],{},[2749,158041,158042],{},"除法，结果是浮点数",[2749,158044,158045],{},[33,158046,158047],{},"5 \u002F 2",[2704,158049,158050,158054,158057],{},[2749,158051,158052],{},[33,158053,35681],{},[2749,158055,158056],{},"整除",[2749,158058,158059],{},[33,158060,158061],{},"5 \u002F\u002F 2",[2704,158063,158064,158068,158071],{},[2749,158065,158066],{},[33,158067,2884],{},[2749,158069,158070],{},"取余",[2749,158072,158073],{},[33,158074,158075],{},"5 % 2",[2704,158077,158078,158082,158085],{},[2749,158079,158080],{},[33,158081,13040],{},[2749,158083,158084],{},"幂运算",[2749,158086,158087],{},[33,158088,158089],{},"2 ** 3",[19,158091,17510],{},[26,158093,158095],{"className":28,"code":158094,"language":30,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,158096,158097,158115,158132,158149],{"__ignoreMap":31},[36,158098,158099,158101,158103,158105,158108,158110,158112],{"class":38,"line":39},[36,158100,371],{"class":62},[36,158102,92],{"class":42},[36,158104,2875],{"class":62},[36,158106,158107],{"class":46}," \u002F",[36,158109,17130],{"class":62},[36,158111,157722],{"class":42},[36,158113,158114],{"class":2621},"# 2.5\n",[36,158116,158117,158119,158121,158123,158126,158128,158130],{"class":38,"line":54},[36,158118,371],{"class":62},[36,158120,92],{"class":42},[36,158122,2875],{"class":62},[36,158124,158125],{"class":46}," \u002F\u002F",[36,158127,17130],{"class":62},[36,158129,48157],{"class":42},[36,158131,157725],{"class":2621},[36,158133,158134,158136,158138,158140,158143,158145,158147],{"class":38,"line":66},[36,158135,371],{"class":62},[36,158137,92],{"class":42},[36,158139,2875],{"class":62},[36,158141,158142],{"class":46}," %",[36,158144,17130],{"class":62},[36,158146,157722],{"class":42},[36,158148,157742],{"class":2621},[36,158150,158151,158153,158155,158157,158160,158162,158164],{"class":38,"line":73},[36,158152,371],{"class":62},[36,158154,92],{"class":42},[36,158156,1911],{"class":62},[36,158158,158159],{"class":46}," **",[36,158161,80415],{"class":62},[36,158163,48157],{"class":42},[36,158165,158166],{"class":2621},"# 8\n",[1752,158168,158170],{"id":158169},"_272-赋值运算符","2.7.2 赋值运算符",[26,158172,158174],{"className":28,"code":158173,"language":30,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,158175,158176,158184,158192,158200,158208],{"__ignoreMap":31},[36,158177,158178,158180,158182],{"class":38,"line":39},[36,158179,157848],{"class":42},[36,158181,47],{"class":46},[36,158183,60776],{"class":62},[36,158185,158186,158188,158190],{"class":38,"line":54},[36,158187,157848],{"class":42},[36,158189,928],{"class":46},[36,158191,56775],{"class":62},[36,158193,158194,158196,158198],{"class":38,"line":66},[36,158195,157848],{"class":42},[36,158197,1018],{"class":46},[36,158199,50072],{"class":62},[36,158201,158202,158204,158206],{"class":38,"line":73},[36,158203,157848],{"class":42},[36,158205,139487],{"class":46},[36,158207,122375],{"class":62},[36,158209,158210,158212,158215],{"class":38,"line":86},[36,158211,157848],{"class":42},[36,158213,158214],{"class":46},"\u002F=",[36,158216,50072],{"class":62},[19,158218,158219],{},"等价关系：",[26,158221,158223],{"className":28,"code":158222,"language":30,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,158224,158225,158233],{"__ignoreMap":31},[36,158226,158227,158229,158231],{"class":38,"line":39},[36,158228,157848],{"class":42},[36,158230,928],{"class":46},[36,158232,58047],{"class":62},[36,158234,158235,158237,158239,158242,158244],{"class":38,"line":54},[36,158236,157848],{"class":42},[36,158238,47],{"class":46},[36,158240,158241],{"class":42}," num ",[36,158243,1885],{"class":46},[36,158245,58047],{"class":62},[19,158247,158248,158249,302,158252,676],{},"Python 没有 ",[33,158250,158251],{},"num++",[33,158253,158254],{},"num--",[1752,158256,158258],{"id":158257},"_273-比较运算符","2.7.3 比较运算符",[19,158260,158261],{},"比较运算结果是布尔值。",[26,158263,158265],{"className":28,"code":158264,"language":30,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,158266,158267,158281,158296,158310],{"__ignoreMap":31},[36,158268,158269,158271,158273,158275,158277,158279],{"class":38,"line":39},[36,158270,371],{"class":62},[36,158272,92],{"class":42},[36,158274,3002],{"class":62},[36,158276,28592],{"class":46},[36,158278,4541],{"class":62},[36,158280,123],{"class":42},[36,158282,158283,158285,158287,158289,158292,158294],{"class":38,"line":54},[36,158284,371],{"class":62},[36,158286,92],{"class":42},[36,158288,3002],{"class":62},[36,158290,158291],{"class":46}," >=",[36,158293,4431],{"class":62},[36,158295,123],{"class":42},[36,158297,158298,158300,158302,158304,158306,158308],{"class":38,"line":66},[36,158299,371],{"class":62},[36,158301,92],{"class":42},[36,158303,3002],{"class":62},[36,158305,103899],{"class":46},[36,158307,4476],{"class":62},[36,158309,123],{"class":42},[36,158311,158312,158314,158316,158318,158321,158323],{"class":38,"line":73},[36,158313,371],{"class":62},[36,158315,92],{"class":42},[36,158317,3002],{"class":62},[36,158319,158320],{"class":46}," !=",[36,158322,4476],{"class":62},[36,158324,123],{"class":42},[19,158326,158327,158328,158330,158331,676],{},"注意：判断相等用 ",[33,158329,5334],{},"，赋值用 ",[33,158332,47],{},[26,158334,158336],{"className":28,"code":158335,"language":30,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,158337,158338,158350],{"__ignoreMap":31},[36,158339,158340,158342,158344,158347],{"class":38,"line":39},[36,158341,57],{"class":42},[36,158343,47],{"class":46},[36,158345,158346],{"class":62}," 18",[36,158348,158349],{"class":2621},"       # 赋值\n",[36,158351,158352,158354,158356,158358],{"class":38,"line":54},[36,158353,57],{"class":42},[36,158355,5334],{"class":46},[36,158357,158346],{"class":62},[36,158359,158360],{"class":2621},"      # 判断是否相等\n",[1752,158362,158364],{"id":158363},"_274-逻辑运算符","2.7.4 逻辑运算符",[2698,158366,158367,158375],{},[2701,158368,158369],{},[2704,158370,158371,158373],{},[2707,158372,157985],{},[2707,158374,28239],{},[2744,158376,158377,158386,158395],{},[2704,158378,158379,158383],{},[2749,158380,158381],{},[33,158382,32827],{},[2749,158384,158385],{},"并且",[2704,158387,158388,158392],{},[2749,158389,158390],{},[33,158391,117429],{},[2749,158393,158394],{},"或者",[2704,158396,158397,158402],{},[2749,158398,158399],{},[33,158400,158401],{},"not",[2749,158403,158404],{},"取反",[26,158406,158408],{"className":28,"code":158407,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,158409,158410,158418,158427,158431,158446,158460],{"__ignoreMap":31},[36,158411,158412,158414,158416],{"class":38,"line":39},[36,158413,57],{"class":42},[36,158415,47],{"class":46},[36,158417,90406],{"class":62},[36,158419,158420,158423,158425],{"class":38,"line":54},[36,158421,158422],{"class":42},"has_ticket ",[36,158424,47],{"class":46},[36,158426,155660],{"class":62},[36,158428,158429],{"class":38,"line":66},[36,158430,70],{"emptyLinePlaceholder":69},[36,158432,158433,158435,158437,158439,158441,158443],{"class":38,"line":73},[36,158434,371],{"class":62},[36,158436,157829],{"class":42},[36,158438,2127],{"class":46},[36,158440,158346],{"class":62},[36,158442,122768],{"class":46},[36,158444,158445],{"class":42}," has_ticket)\n",[36,158447,158448,158450,158452,158454,158456,158458],{"class":38,"line":86},[36,158449,371],{"class":62},[36,158451,157829],{"class":42},[36,158453,3463],{"class":46},[36,158455,158346],{"class":62},[36,158457,116540],{"class":46},[36,158459,158445],{"class":42},[36,158461,158462,158464,158466,158468],{"class":38,"line":126},[36,158463,371],{"class":62},[36,158465,92],{"class":42},[36,158467,158401],{"class":46},[36,158469,158445],{"class":42},[14,158471,158473],{"id":158472},"_28-字符串定义","2.8 字符串定义",[19,158475,158476],{},"三种常见写法：",[26,158478,158480],{"className":28,"code":158479,"language":30,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,158481,158482,158492,158501,158511],{"__ignoreMap":31},[36,158483,158484,158487,158489],{"class":38,"line":39},[36,158485,158486],{"class":42},"name1 ",[36,158488,47],{"class":46},[36,158490,158491],{"class":50}," '小明'\n",[36,158493,158494,158497,158499],{"class":38,"line":54},[36,158495,158496],{"class":42},"name2 ",[36,158498,47],{"class":46},[36,158500,51],{"class":50},[36,158502,158503,158506,158508],{"class":38,"line":66},[36,158504,158505],{"class":42},"text ",[36,158507,47],{"class":46},[36,158509,158510],{"class":50}," \"\"\"这是多行字符串\n",[36,158512,158513],{"class":38,"line":73},[36,158514,158515],{"class":50},"可以换行\"\"\"\n",[19,158517,158518],{},"字符串中包含引号：",[26,158520,158522],{"className":28,"code":158521,"language":30,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,158523,158524,158534,158544],{"__ignoreMap":31},[36,158525,158526,158529,158531],{"class":38,"line":39},[36,158527,158528],{"class":42},"msg ",[36,158530,47],{"class":46},[36,158532,158533],{"class":50}," \"他说:'你好'\"\n",[36,158535,158536,158539,158541],{"class":38,"line":54},[36,158537,158538],{"class":42},"msg2 ",[36,158540,47],{"class":46},[36,158542,158543],{"class":50}," '他说:\"你好\"'\n",[36,158545,158546,158549,158551,158554,158557,158560,158562],{"class":38,"line":66},[36,158547,158548],{"class":42},"msg3 ",[36,158550,47],{"class":46},[36,158552,158553],{"class":50}," \"他说:",[36,158555,158556],{"class":62},"\\\"",[36,158558,158559],{"class":50},"你好",[36,158561,158556],{"class":62},[36,158563,2326],{"class":50},[19,158565,158566],{},"常见转义字符：",[2698,158568,158569,158578],{},[2701,158570,158571],{},[2704,158572,158573,158576],{},[2707,158574,158575],{},"写法",[2707,158577,103041],{},[2744,158579,158580,158590,158599,158609,158618],{},[2704,158581,158582,158587],{},[2749,158583,158584],{},[33,158585,158586],{},"\\n",[2749,158588,158589],{},"换行",[2704,158591,158592,158596],{},[2749,158593,158594],{},[33,158595,3651],{},[2749,158597,158598],{},"制表符",[2704,158600,158601,158606],{},[2749,158602,158603],{},[33,158604,158605],{},"\\\\",[2749,158607,158608],{},"反斜杠",[2704,158610,158611,158615],{},[2749,158612,158613],{},[33,158614,158556],{},[2749,158616,158617],{},"双引号",[2704,158619,158620,158625],{},[2749,158621,158622],{},[33,158623,158624],{},"\\'",[2749,158626,158627],{},"单引号",[14,158629,158631],{"id":158630},"_29-字符串拼接","2.9 字符串拼接",[26,158633,158635],{"className":28,"code":158634,"language":30,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,158636,158637,158645],{"__ignoreMap":31},[36,158638,158639,158641,158643],{"class":38,"line":39},[36,158640,43],{"class":42},[36,158642,47],{"class":46},[36,158644,51],{"class":50},[36,158646,158647,158649,158651,158654,158656],{"class":38,"line":54},[36,158648,371],{"class":62},[36,158650,92],{"class":42},[36,158652,158653],{"class":50},"\"你好，\"",[36,158655,47915],{"class":46},[36,158657,158658],{"class":42}," name)\n",[19,158660,158661],{},"字符串只能和字符串拼接：",[26,158663,158665],{"className":28,"code":158664,"language":30,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,158666,158667,158675],{"__ignoreMap":31},[36,158668,158669,158671,158673],{"class":38,"line":39},[36,158670,57],{"class":42},[36,158672,47],{"class":46},[36,158674,63],{"class":62},[36,158676,158677,158679,158681,158683,158685,158687],{"class":38,"line":54},[36,158678,371],{"class":62},[36,158680,92],{"class":42},[36,158682,148856],{"class":50},[36,158684,47915],{"class":46},[36,158686,76264],{"class":62},[36,158688,158689],{"class":42},"(age))\n",[19,158691,158692],{},"更推荐使用格式化字符串。",[14,158694,158696],{"id":158695},"_210-字符串格式化","2.10 字符串格式化",[1752,158698,158700],{"id":158699},"_2101-百分号格式化","2.10.1 百分号格式化",[26,158702,158704],{"className":28,"code":158703,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,158705,158706,158714,158722,158731,158735],{"__ignoreMap":31},[36,158707,158708,158710,158712],{"class":38,"line":39},[36,158709,43],{"class":42},[36,158711,47],{"class":46},[36,158713,51],{"class":50},[36,158715,158716,158718,158720],{"class":38,"line":54},[36,158717,57],{"class":42},[36,158719,47],{"class":46},[36,158721,63],{"class":62},[36,158723,158724,158726,158728],{"class":38,"line":66},[36,158725,157419],{"class":42},[36,158727,47],{"class":46},[36,158729,158730],{"class":62}," 95.5\n",[36,158732,158733],{"class":38,"line":73},[36,158734,70],{"emptyLinePlaceholder":69},[36,158736,158737,158739,158741,158744,158747,158750,158753,158756,158759,158761,158763],{"class":38,"line":86},[36,158738,371],{"class":62},[36,158740,92],{"class":42},[36,158742,158743],{"class":50},"\"姓名:",[36,158745,158746],{"class":62},"%s",[36,158748,158749],{"class":50}," 年龄:",[36,158751,158752],{"class":62},"%d",[36,158754,158755],{"class":50}," 分数:",[36,158757,158758],{"class":62},"%.1f",[36,158760,604],{"class":50},[36,158762,158142],{"class":46},[36,158764,158765],{"class":42}," (name, age, score))\n",[19,158767,158768],{},"常用占位符：",[2698,158770,158771,158780],{},[2701,158772,158773],{},[2704,158774,158775,158778],{},[2707,158776,158777],{},"占位符",[2707,158779,28239],{},[2744,158781,158782,158790,158798],{},[2704,158783,158784,158788],{},[2749,158785,158786],{},[33,158787,158746],{},[2749,158789,157285],{},[2704,158791,158792,158796],{},[2749,158793,158794],{},[33,158795,158752],{},[2749,158797,157263],{},[2704,158799,158800,158805],{},[2749,158801,158802],{},[33,158803,158804],{},"%f",[2749,158806,157274],{},[19,158808,158809],{},"精度控制：",[26,158811,158813],{"className":28,"code":158812,"language":30,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,158814,158815,158824],{"__ignoreMap":31},[36,158816,158817,158819,158821],{"class":38,"line":39},[36,158818,149017],{"class":42},[36,158820,47],{"class":46},[36,158822,158823],{"class":62}," 12.3456\n",[36,158825,158826,158828,158830,158832,158835,158837,158839],{"class":38,"line":54},[36,158827,371],{"class":62},[36,158829,92],{"class":42},[36,158831,604],{"class":50},[36,158833,158834],{"class":62},"%.2f",[36,158836,604],{"class":50},[36,158838,158142],{"class":46},[36,158840,158841],{"class":42}," price)\n",[1752,158843,158845],{"id":158844},"_2102-format方法","2.10.2 format方法",[26,158847,158849],{"className":28,"code":158848,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,158850,158851,158859,158867,158871,158890,158910],{"__ignoreMap":31},[36,158852,158853,158855,158857],{"class":38,"line":39},[36,158854,43],{"class":42},[36,158856,47],{"class":46},[36,158858,51],{"class":50},[36,158860,158861,158863,158865],{"class":38,"line":54},[36,158862,57],{"class":42},[36,158864,47],{"class":46},[36,158866,63],{"class":62},[36,158868,158869],{"class":38,"line":66},[36,158870,70],{"emptyLinePlaceholder":69},[36,158872,158873,158875,158877,158879,158881,158883,158885,158887],{"class":38,"line":73},[36,158874,371],{"class":62},[36,158876,92],{"class":42},[36,158878,158743],{"class":50},[36,158880,34811],{"class":62},[36,158882,158749],{"class":50},[36,158884,34811],{"class":62},[36,158886,604],{"class":50},[36,158888,158889],{"class":42},".format(name, age))\n",[36,158891,158892,158894,158896,158898,158901,158903,158906,158908],{"class":38,"line":86},[36,158893,371],{"class":62},[36,158895,92],{"class":42},[36,158897,158743],{"class":50},[36,158899,158900],{"class":62},"{0}",[36,158902,158749],{"class":50},[36,158904,158905],{"class":62},"{1}",[36,158907,604],{"class":50},[36,158909,158889],{"class":42},[36,158911,158912,158914,158916,158918,158921,158923,158926,158928,158931,158933,158935,158938,158940,158942],{"class":38,"line":126},[36,158913,371],{"class":62},[36,158915,92],{"class":42},[36,158917,158743],{"class":50},[36,158919,158920],{"class":62},"{name}",[36,158922,158749],{"class":50},[36,158924,158925],{"class":62},"{age}",[36,158927,604],{"class":50},[36,158929,158930],{"class":42},".format(",[36,158932,104],{"class":7598},[36,158934,47],{"class":46},[36,158936,158937],{"class":42},"name, ",[36,158939,115],{"class":7598},[36,158941,47],{"class":46},[36,158943,158944],{"class":42},"age))\n",[1752,158946,158948],{"id":158947},"_2103-f-string","2.10.3 f-string",[19,158950,158951],{},"推荐写法：",[26,158953,158955],{"className":28,"code":158954,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,158956,158957,158965,158973,158981,158985],{"__ignoreMap":31},[36,158958,158959,158961,158963],{"class":38,"line":39},[36,158960,43],{"class":42},[36,158962,47],{"class":46},[36,158964,51],{"class":50},[36,158966,158967,158969,158971],{"class":38,"line":54},[36,158968,57],{"class":42},[36,158970,47],{"class":46},[36,158972,63],{"class":62},[36,158974,158975,158977,158979],{"class":38,"line":66},[36,158976,157419],{"class":42},[36,158978,47],{"class":46},[36,158980,158730],{"class":62},[36,158982,158983],{"class":38,"line":73},[36,158984,70],{"emptyLinePlaceholder":69},[36,158986,158987,158989,158991,158993,158995,158997,158999,159001,159003,159005,159007,159009,159011,159013,159016,159019,159021,159023],{"class":38,"line":86},[36,158988,371],{"class":62},[36,158990,92],{"class":42},[36,158992,95],{"class":46},[36,158994,158743],{"class":50},[36,158996,101],{"class":62},[36,158998,104],{"class":42},[36,159000,107],{"class":62},[36,159002,158749],{"class":50},[36,159004,101],{"class":62},[36,159006,115],{"class":42},[36,159008,107],{"class":62},[36,159010,158755],{"class":50},[36,159012,101],{"class":62},[36,159014,159015],{"class":42},"score",[36,159017,159018],{"class":46},":.1f",[36,159020,107],{"class":62},[36,159022,604],{"class":50},[36,159024,123],{"class":42},[19,159026,159027],{},"表达式也可以放进去：",[26,159029,159031],{"className":28,"code":159030,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,159032,159033,159041,159049],{"__ignoreMap":31},[36,159034,159035,159037,159039],{"class":38,"line":39},[36,159036,149017],{"class":42},[36,159038,47],{"class":46},[36,159040,149022],{"class":62},[36,159042,159043,159045,159047],{"class":38,"line":54},[36,159044,149027],{"class":42},[36,159046,47],{"class":46},[36,159048,56775],{"class":62},[36,159050,159051,159053,159055,159057,159060,159062,159064,159066,159069,159071,159074],{"class":38,"line":66},[36,159052,371],{"class":62},[36,159054,92],{"class":42},[36,159056,95],{"class":46},[36,159058,159059],{"class":50},"\"总价:",[36,159061,101],{"class":62},[36,159063,149017],{"class":42},[36,159065,3011],{"class":46},[36,159067,159068],{"class":42}," count",[36,159070,107],{"class":62},[36,159072,159073],{"class":50},"元\"",[36,159075,123],{"class":42},[14,159077,159079],{"id":159078},"_211-input输入","2.11 input输入",[19,159081,159082,159085],{},[33,159083,159084],{},"input()"," 会暂停程序，等待用户输入。",[26,159087,159089],{"className":28,"code":159088,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,159090,159091,159105],{"__ignoreMap":31},[36,159092,159093,159095,159097,159099,159101,159103],{"class":38,"line":39},[36,159094,43],{"class":42},[36,159096,47],{"class":46},[36,159098,62953],{"class":62},[36,159100,92],{"class":42},[36,159102,154440],{"class":50},[36,159104,123],{"class":42},[36,159106,159107,159109,159111,159113,159116,159118,159120,159122,159124],{"class":38,"line":54},[36,159108,371],{"class":62},[36,159110,92],{"class":42},[36,159112,95],{"class":46},[36,159114,159115],{"class":50},"\"你好，",[36,159117,101],{"class":62},[36,159119,104],{"class":42},[36,159121,107],{"class":62},[36,159123,604],{"class":50},[36,159125,123],{"class":42},[19,159127,159128],{},"输入整数：",[26,159130,159132],{"className":28,"code":159131,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,159133,159134,159152],{"__ignoreMap":31},[36,159135,159136,159138,159140,159142,159144,159146,159148,159150],{"class":38,"line":39},[36,159137,57],{"class":42},[36,159139,47],{"class":46},[36,159141,4775],{"class":62},[36,159143,92],{"class":42},[36,159145,56169],{"class":62},[36,159147,92],{"class":42},[36,159149,154455],{"class":50},[36,159151,1914],{"class":42},[36,159153,159154,159156,159158,159160,159163,159165,159167,159169,159172,159174],{"class":38,"line":54},[36,159155,371],{"class":62},[36,159157,92],{"class":42},[36,159159,95],{"class":46},[36,159161,159162],{"class":50},"\"明年你",[36,159164,101],{"class":62},[36,159166,57],{"class":42},[36,159168,1885],{"class":46},[36,159170,159171],{"class":62}," 1}",[36,159173,120],{"class":50},[36,159175,123],{"class":42},[19,159177,159178],{},"输入小数：",[26,159180,159182],{"className":28,"code":159181,"language":30,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,159183,159184,159203],{"__ignoreMap":31},[36,159185,159186,159188,159190,159192,159194,159196,159198,159201],{"class":38,"line":39},[36,159187,157392],{"class":42},[36,159189,47],{"class":46},[36,159191,112136],{"class":62},[36,159193,92],{"class":42},[36,159195,56169],{"class":62},[36,159197,92],{"class":42},[36,159199,159200],{"class":50},"\"请输入身高:\"",[36,159202,1914],{"class":42},[36,159204,159205,159207,159209,159211,159214,159216,159218,159221,159223,159226],{"class":38,"line":54},[36,159206,371],{"class":62},[36,159208,92],{"class":42},[36,159210,95],{"class":46},[36,159212,159213],{"class":50},"\"身高:",[36,159215,101],{"class":62},[36,159217,27352],{"class":42},[36,159219,159220],{"class":46},":.2f",[36,159222,107],{"class":62},[36,159224,159225],{"class":50},"米\"",[36,159227,123],{"class":42},[14,159229,159231],{"id":159230},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159233,125631],{},[650,159235,159236,159239,159242,159245],{},[653,159237,159238],{},"输入商品单价。",[653,159240,159241],{},"输入购买数量。",[653,159243,159244],{},"输入折扣，例如 0.8 表示八折。",[653,159246,159247],{},"输出最终金额，保留两位小数。",[19,159249,12414],{},[26,159251,159253],{"className":28,"code":159252,"language":30,"meta":31,"style":31},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[33,159254,159255,159274,159293,159313,159317,159337,159341,159364,159385,159407],{"__ignoreMap":31},[36,159256,159257,159259,159261,159263,159265,159267,159269,159272],{"class":38,"line":39},[36,159258,149017],{"class":42},[36,159260,47],{"class":46},[36,159262,112136],{"class":62},[36,159264,92],{"class":42},[36,159266,56169],{"class":62},[36,159268,92],{"class":42},[36,159270,159271],{"class":50},"\"请输入商品单价:\"",[36,159273,1914],{"class":42},[36,159275,159276,159278,159280,159282,159284,159286,159288,159291],{"class":38,"line":54},[36,159277,149027],{"class":42},[36,159279,47],{"class":46},[36,159281,4775],{"class":62},[36,159283,92],{"class":42},[36,159285,56169],{"class":62},[36,159287,92],{"class":42},[36,159289,159290],{"class":50},"\"请输入购买数量:\"",[36,159292,1914],{"class":42},[36,159294,159295,159298,159300,159302,159304,159306,159308,159311],{"class":38,"line":66},[36,159296,159297],{"class":42},"discount ",[36,159299,47],{"class":46},[36,159301,112136],{"class":62},[36,159303,92],{"class":42},[36,159305,56169],{"class":62},[36,159307,92],{"class":42},[36,159309,159310],{"class":50},"\"请输入折扣:\"",[36,159312,1914],{"class":42},[36,159314,159315],{"class":38,"line":73},[36,159316,70],{"emptyLinePlaceholder":69},[36,159318,159319,159322,159324,159327,159329,159332,159334],{"class":38,"line":86},[36,159320,159321],{"class":42},"total ",[36,159323,47],{"class":46},[36,159325,159326],{"class":42}," price ",[36,159328,3011],{"class":46},[36,159330,159331],{"class":42}," count ",[36,159333,3011],{"class":46},[36,159335,159336],{"class":42}," discount\n",[36,159338,159339],{"class":38,"line":126},[36,159340,70],{"emptyLinePlaceholder":69},[36,159342,159343,159345,159347,159349,159352,159354,159356,159358,159360,159362],{"class":38,"line":131},[36,159344,371],{"class":62},[36,159346,92],{"class":42},[36,159348,95],{"class":46},[36,159350,159351],{"class":50},"\"商品单价:",[36,159353,101],{"class":62},[36,159355,82159],{"class":42},[36,159357,159220],{"class":46},[36,159359,107],{"class":62},[36,159361,604],{"class":50},[36,159363,123],{"class":42},[36,159365,159366,159368,159370,159372,159375,159377,159379,159381,159383],{"class":38,"line":225},[36,159367,371],{"class":62},[36,159369,92],{"class":42},[36,159371,95],{"class":46},[36,159373,159374],{"class":50},"\"购买数量:",[36,159376,101],{"class":62},[36,159378,86776],{"class":42},[36,159380,107],{"class":62},[36,159382,604],{"class":50},[36,159384,123],{"class":42},[36,159386,159387,159389,159391,159393,159396,159398,159401,159403,159405],{"class":38,"line":235},[36,159388,371],{"class":62},[36,159390,92],{"class":42},[36,159392,95],{"class":46},[36,159394,159395],{"class":50},"\"折扣:",[36,159397,101],{"class":62},[36,159399,159400],{"class":42},"discount",[36,159402,107],{"class":62},[36,159404,604],{"class":50},[36,159406,123],{"class":42},[36,159408,159409,159411,159413,159415,159418,159420,159423,159425,159427,159429],{"class":38,"line":377},[36,159410,371],{"class":62},[36,159412,92],{"class":42},[36,159414,95],{"class":46},[36,159416,159417],{"class":50},"\"应付金额:",[36,159419,101],{"class":62},[36,159421,159422],{"class":42},"total",[36,159424,159220],{"class":46},[36,159426,107],{"class":62},[36,159428,159073],{"class":50},[36,159430,123],{"class":42},[14,159432,159434],{"id":159433},"_213-易错点","2.13 易错点",[650,159436,159437,159442,159448,159456,159459],{},[653,159438,159439,159441],{},[33,159440,159084],{}," 的结果是字符串，做运算前要转换。",[653,159443,159444,159445,676],{},"字符串拼接时，数字要先 ",[33,159446,159447],{},"str()",[653,159449,159450,159452,159453,159455],{},[33,159451,47],{}," 是赋值，",[33,159454,5334],{}," 是比较。",[653,159457,159458],{},"Python 没有自增自减运算符。",[653,159460,159461],{},"浮点数计算可能有精度误差：",[26,159463,159465],{"className":28,"code":159464,"language":30,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,159466,159467],{"__ignoreMap":31},[36,159468,159469,159471,159473,159475,159477,159480],{"class":38,"line":39},[36,159470,371],{"class":62},[36,159472,92],{"class":42},[36,159474,88552],{"class":62},[36,159476,47915],{"class":46},[36,159478,159479],{"class":62}," 0.2",[36,159481,123],{"class":42},[19,159483,159484,159485,159488],{},"金额计算如果要求严格，可以后续学习 ",[33,159486,159487],{},"decimal"," 模块。",[14,159490,159492],{"id":159491},"_214-本章练习","2.14 本章练习",[650,159494,159495,159498,159501,159504,159507],{},[653,159496,159497],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[653,159499,159500],{},"输入圆的半径，计算面积，保留两位小数。",[653,159502,159503],{},"输入工资和奖金，计算总收入。",[653,159505,159506],{},"输入摄氏温度，转换为华氏温度。",[653,159508,159509],{},"写一个 BMI 计算程序：",[26,159511,159514],{"className":159512,"code":159513,"language":7570,"meta":31},[7568],"BMI = 体重kg \u002F 身高m ** 2\n",[33,159515,159513],{"__ignoreMap":31},[2467,159517,159518],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":159520},[159521,159522,159523,159524,159525,159526,159527,159533,159534,159535,159540,159541,159542,159543],{"id":157082,"depth":54,"text":157083},{"id":157191,"depth":54,"text":157192},{"id":157362,"depth":54,"text":157363},{"id":157439,"depth":54,"text":157440},{"id":53080,"depth":54,"text":53081},{"id":157745,"depth":54,"text":157746},{"id":157971,"depth":54,"text":157972,"children":159528},[159529,159530,159531,159532],{"id":157975,"depth":66,"text":157976},{"id":158169,"depth":66,"text":158170},{"id":158257,"depth":66,"text":158258},{"id":158363,"depth":66,"text":158364},{"id":158472,"depth":54,"text":158473},{"id":158630,"depth":54,"text":158631},{"id":158695,"depth":54,"text":158696,"children":159536},[159537,159538,159539],{"id":158699,"depth":66,"text":158700},{"id":158844,"depth":66,"text":158845},{"id":158947,"depth":66,"text":158948},{"id":159078,"depth":54,"text":159079},{"id":159230,"depth":54,"text":159231},{"id":159433,"depth":54,"text":159434},{"id":159491,"depth":54,"text":159492},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157074,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159550,"title":159551,"body":159552,"description":2493,"extension":2494,"meta":161188,"navigation":69,"path":161189,"seo":161190,"stem":161191,"__hash__":161192},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159553,"toc":161169},[159554,159557,159561,159564,159579,159582,159610,159614,159664,159666,159682,159685,159711,159714,159718,159785,159788,159804,159808,159811,159929,159932,159939,159988,159994,159998,160001,160114,160117,160121,160125,160128,160178,160182,160185,160235,160239,160242,160280,160284,160287,160333,160336,160371,160375,160380,160383,160429,160431,160498,160502,160508,160619,160628,160632,160634,160645,160647,160813,160817,160819,160833,160835,161049,161053,161072,161089,161092,161138,161142,161166],[10,159555,159551],{"id":159556},"_3-判断语句",[14,159558,159560],{"id":159559},"_31-布尔值","3.1 布尔值",[19,159562,159563],{},"判断语句依赖布尔值：",[26,159565,159567],{"className":28,"code":159566,"language":30,"meta":31,"style":31},"True\nFalse\n",[33,159568,159569,159574],{"__ignoreMap":31},[36,159570,159571],{"class":38,"line":39},[36,159572,159573],{"class":62},"True\n",[36,159575,159576],{"class":38,"line":54},[36,159577,159578],{"class":62},"False\n",[19,159580,159581],{},"比较表达式会产生布尔值：",[26,159583,159585],{"className":28,"code":159584,"language":30,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,159586,159587,159595],{"__ignoreMap":31},[36,159588,159589,159591,159593],{"class":38,"line":39},[36,159590,57],{"class":42},[36,159592,47],{"class":46},[36,159594,63],{"class":62},[36,159596,159597,159599,159601,159603,159605,159607],{"class":38,"line":54},[36,159598,371],{"class":62},[36,159600,157829],{"class":42},[36,159602,2127],{"class":46},[36,159604,158346],{"class":62},[36,159606,48157],{"class":42},[36,159608,159609],{"class":2621},"# True\n",[14,159611,159613],{"id":159612},"_32-if基础语法","3.2 if基础语法",[26,159615,159617],{"className":28,"code":159616,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,159618,159619,159637,159641,159653],{"__ignoreMap":31},[36,159620,159621,159623,159625,159627,159629,159631,159633,159635],{"class":38,"line":39},[36,159622,57],{"class":42},[36,159624,47],{"class":46},[36,159626,4775],{"class":62},[36,159628,92],{"class":42},[36,159630,56169],{"class":62},[36,159632,92],{"class":42},[36,159634,154455],{"class":50},[36,159636,1914],{"class":42},[36,159638,159639],{"class":38,"line":54},[36,159640,70],{"emptyLinePlaceholder":69},[36,159642,159643,159645,159647,159649,159651],{"class":38,"line":66},[36,159644,3948],{"class":46},[36,159646,18080],{"class":42},[36,159648,2127],{"class":46},[36,159650,158346],{"class":62},[36,159652,153],{"class":42},[36,159654,159655,159657,159659,159662],{"class":38,"line":73},[36,159656,89],{"class":62},[36,159658,92],{"class":42},[36,159660,159661],{"class":50},"\"可以进入网吧\"",[36,159663,123],{"class":42},[19,159665,11405],{},[650,159667,159668,159673,159676,159679],{},[653,159669,159670,159672],{},[33,159671,3948],{}," 后面是条件表达式。",[653,159674,159675],{},"条件后面必须写冒号。",[653,159677,159678],{},"条件成立时执行缩进代码块。",[653,159680,159681],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159683,159684],{},"错误示例：",[26,159686,159688],{"className":28,"code":159687,"language":30,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,159689,159690,159700],{"__ignoreMap":31},[36,159691,159692,159694,159696,159698],{"class":38,"line":39},[36,159693,3948],{"class":46},[36,159695,18080],{"class":42},[36,159697,2127],{"class":46},[36,159699,63],{"class":62},[36,159701,159702,159704,159706,159709],{"class":38,"line":54},[36,159703,89],{"class":62},[36,159705,92],{"class":42},[36,159707,159708],{"class":50},"\"可以进入\"",[36,159710,123],{"class":42},[19,159712,159713],{},"缺少冒号。",[14,159715,159717],{"id":159716},"_33-if-else","3.3 if else",[26,159719,159721],{"className":28,"code":159720,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,159722,159723,159741,159745,159757,159768,159774],{"__ignoreMap":31},[36,159724,159725,159727,159729,159731,159733,159735,159737,159739],{"class":38,"line":39},[36,159726,57],{"class":42},[36,159728,47],{"class":46},[36,159730,4775],{"class":62},[36,159732,92],{"class":42},[36,159734,56169],{"class":62},[36,159736,92],{"class":42},[36,159738,154455],{"class":50},[36,159740,1914],{"class":42},[36,159742,159743],{"class":38,"line":54},[36,159744,70],{"emptyLinePlaceholder":69},[36,159746,159747,159749,159751,159753,159755],{"class":38,"line":66},[36,159748,3948],{"class":46},[36,159750,18080],{"class":42},[36,159752,2127],{"class":46},[36,159754,158346],{"class":62},[36,159756,153],{"class":42},[36,159758,159759,159761,159763,159766],{"class":38,"line":73},[36,159760,89],{"class":62},[36,159762,92],{"class":42},[36,159764,159765],{"class":50},"\"成年人\"",[36,159767,123],{"class":42},[36,159769,159770,159772],{"class":38,"line":86},[36,159771,4105],{"class":46},[36,159773,153],{"class":42},[36,159775,159776,159778,159780,159783],{"class":38,"line":126},[36,159777,89],{"class":62},[36,159779,92],{"class":42},[36,159781,159782],{"class":50},"\"未成年人\"",[36,159784,123],{"class":42},[19,159786,159787],{},"执行逻辑：",[650,159789,159790,159796,159801],{},[653,159791,159792,159793,159795],{},"条件成立，执行 ",[33,159794,3948],{}," 代码块。",[653,159797,159798,159799,159795],{},"条件不成立，执行 ",[33,159800,4105],{},[653,159802,159803],{},"两个代码块只会执行其中一个。",[14,159805,159807],{"id":159806},"_34-if-elif-else","3.4 if elif else",[19,159809,159810],{},"多条件判断：",[26,159812,159814],{"className":28,"code":159813,"language":30,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,159815,159816,159834,159838,159852,159863,159877,159888,159901,159912,159918],{"__ignoreMap":31},[36,159817,159818,159820,159822,159824,159826,159828,159830,159832],{"class":38,"line":39},[36,159819,157419],{"class":42},[36,159821,47],{"class":46},[36,159823,4775],{"class":62},[36,159825,92],{"class":42},[36,159827,56169],{"class":62},[36,159829,92],{"class":42},[36,159831,154470],{"class":50},[36,159833,1914],{"class":42},[36,159835,159836],{"class":38,"line":54},[36,159837,70],{"emptyLinePlaceholder":69},[36,159839,159840,159842,159845,159847,159850],{"class":38,"line":66},[36,159841,3948],{"class":46},[36,159843,159844],{"class":42}," score ",[36,159846,2127],{"class":46},[36,159848,159849],{"class":62}," 90",[36,159851,153],{"class":42},[36,159853,159854,159856,159858,159861],{"class":38,"line":73},[36,159855,89],{"class":62},[36,159857,92],{"class":42},[36,159859,159860],{"class":50},"\"优秀\"",[36,159862,123],{"class":42},[36,159864,159865,159868,159870,159872,159875],{"class":38,"line":86},[36,159866,159867],{"class":46},"elif",[36,159869,159844],{"class":42},[36,159871,2127],{"class":46},[36,159873,159874],{"class":62}," 80",[36,159876,153],{"class":42},[36,159878,159879,159881,159883,159886],{"class":38,"line":126},[36,159880,89],{"class":62},[36,159882,92],{"class":42},[36,159884,159885],{"class":50},"\"良好\"",[36,159887,123],{"class":42},[36,159889,159890,159892,159894,159896,159899],{"class":38,"line":131},[36,159891,159867],{"class":46},[36,159893,159844],{"class":42},[36,159895,2127],{"class":46},[36,159897,159898],{"class":62}," 60",[36,159900,153],{"class":42},[36,159902,159903,159905,159907,159910],{"class":38,"line":225},[36,159904,89],{"class":62},[36,159906,92],{"class":42},[36,159908,159909],{"class":50},"\"及格\"",[36,159911,123],{"class":42},[36,159913,159914,159916],{"class":38,"line":235},[36,159915,4105],{"class":46},[36,159917,153],{"class":42},[36,159919,159920,159922,159924,159927],{"class":38,"line":377},[36,159921,89],{"class":62},[36,159923,92],{"class":42},[36,159925,159926],{"class":50},"\"不及格\"",[36,159928,123],{"class":42},[19,159930,159931],{},"注意判断顺序很重要。",[19,159933,159934,159935,159938],{},"如果把 ",[33,159936,159937],{},"score >= 60"," 放在最前面：",[26,159940,159942],{"className":28,"code":159941,"language":30,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,159943,159944,159956,159966,159978],{"__ignoreMap":31},[36,159945,159946,159948,159950,159952,159954],{"class":38,"line":39},[36,159947,3948],{"class":46},[36,159949,159844],{"class":42},[36,159951,2127],{"class":46},[36,159953,159898],{"class":62},[36,159955,153],{"class":42},[36,159957,159958,159960,159962,159964],{"class":38,"line":54},[36,159959,89],{"class":62},[36,159961,92],{"class":42},[36,159963,159909],{"class":50},[36,159965,123],{"class":42},[36,159967,159968,159970,159972,159974,159976],{"class":38,"line":66},[36,159969,159867],{"class":46},[36,159971,159844],{"class":42},[36,159973,2127],{"class":46},[36,159975,159849],{"class":62},[36,159977,153],{"class":42},[36,159979,159980,159982,159984,159986],{"class":38,"line":73},[36,159981,89],{"class":62},[36,159983,92],{"class":42},[36,159985,159860],{"class":50},[36,159987,123],{"class":42},[19,159989,159990,159991,159993],{},"成绩 95 会先满足 ",[33,159992,159937],{},"，后面的优秀分支就不会执行。",[14,159995,159997],{"id":159996},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159999,160000],{},"嵌套判断就是在一个判断内部再写判断。",[26,160002,160004],{"className":28,"code":160003,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[33,160005,160006,160024,160039,160043,160055,160069,160079,160086,160097,160103],{"__ignoreMap":31},[36,160007,160008,160010,160012,160014,160016,160018,160020,160022],{"class":38,"line":39},[36,160009,57],{"class":42},[36,160011,47],{"class":46},[36,160013,4775],{"class":62},[36,160015,92],{"class":42},[36,160017,56169],{"class":62},[36,160019,92],{"class":42},[36,160021,154455],{"class":50},[36,160023,1914],{"class":42},[36,160025,160026,160028,160030,160032,160034,160037],{"class":38,"line":54},[36,160027,158422],{"class":42},[36,160029,47],{"class":46},[36,160031,62953],{"class":62},[36,160033,92],{"class":42},[36,160035,160036],{"class":50},"\"是否有票(y\u002Fn):\"",[36,160038,123],{"class":42},[36,160040,160041],{"class":38,"line":66},[36,160042,70],{"emptyLinePlaceholder":69},[36,160044,160045,160047,160049,160051,160053],{"class":38,"line":73},[36,160046,3948],{"class":46},[36,160048,18080],{"class":42},[36,160050,2127],{"class":46},[36,160052,158346],{"class":62},[36,160054,153],{"class":42},[36,160056,160057,160059,160062,160064,160067],{"class":38,"line":86},[36,160058,5486],{"class":46},[36,160060,160061],{"class":42}," has_ticket ",[36,160063,5334],{"class":46},[36,160065,160066],{"class":50}," \"y\"",[36,160068,153],{"class":42},[36,160070,160071,160073,160075,160077],{"class":38,"line":126},[36,160072,168],{"class":62},[36,160074,92],{"class":42},[36,160076,159708],{"class":50},[36,160078,123],{"class":42},[36,160080,160081,160084],{"class":38,"line":131},[36,160082,160083],{"class":46},"    else",[36,160085,153],{"class":42},[36,160087,160088,160090,160092,160095],{"class":38,"line":225},[36,160089,168],{"class":62},[36,160091,92],{"class":42},[36,160093,160094],{"class":50},"\"请先买票\"",[36,160096,123],{"class":42},[36,160098,160099,160101],{"class":38,"line":235},[36,160100,4105],{"class":46},[36,160102,153],{"class":42},[36,160104,160105,160107,160109,160112],{"class":38,"line":377},[36,160106,89],{"class":62},[36,160108,92],{"class":42},[36,160110,160111],{"class":50},"\"未成年人禁止进入\"",[36,160113,123],{"class":42},[19,160115,160116],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160118,160120],{"id":160119},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1752,160122,160124],{"id":160123},"_361-and","3.6.1 and",[19,160126,160127],{},"两个条件都成立才成立。",[26,160129,160131],{"className":28,"code":160130,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,160132,160133,160141,160149,160153,160168],{"__ignoreMap":31},[36,160134,160135,160137,160139],{"class":38,"line":39},[36,160136,57],{"class":42},[36,160138,47],{"class":46},[36,160140,90406],{"class":62},[36,160142,160143,160145,160147],{"class":38,"line":54},[36,160144,158422],{"class":42},[36,160146,47],{"class":46},[36,160148,155660],{"class":62},[36,160150,160151],{"class":38,"line":66},[36,160152,70],{"emptyLinePlaceholder":69},[36,160154,160155,160157,160159,160161,160163,160165],{"class":38,"line":73},[36,160156,3948],{"class":46},[36,160158,18080],{"class":42},[36,160160,2127],{"class":46},[36,160162,158346],{"class":62},[36,160164,122768],{"class":46},[36,160166,160167],{"class":42}," has_ticket:\n",[36,160169,160170,160172,160174,160176],{"class":38,"line":86},[36,160171,89],{"class":62},[36,160173,92],{"class":42},[36,160175,159708],{"class":50},[36,160177,123],{"class":42},[1752,160179,160181],{"id":160180},"_362-or","3.6.2 or",[19,160183,160184],{},"只要一个条件成立就成立。",[26,160186,160188],{"className":28,"code":160187,"language":30,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,160189,160190,160199,160208,160212,160224],{"__ignoreMap":31},[36,160191,160192,160195,160197],{"class":38,"line":39},[36,160193,160194],{"class":42},"is_vip ",[36,160196,47],{"class":46},[36,160198,128146],{"class":62},[36,160200,160201,160204,160206],{"class":38,"line":54},[36,160202,160203],{"class":42},"coupon ",[36,160205,47],{"class":46},[36,160207,155660],{"class":62},[36,160209,160210],{"class":38,"line":66},[36,160211,70],{"emptyLinePlaceholder":69},[36,160213,160214,160216,160219,160221],{"class":38,"line":73},[36,160215,3948],{"class":46},[36,160217,160218],{"class":42}," is_vip ",[36,160220,117429],{"class":46},[36,160222,160223],{"class":42}," coupon:\n",[36,160225,160226,160228,160230,160233],{"class":38,"line":86},[36,160227,89],{"class":62},[36,160229,92],{"class":42},[36,160231,160232],{"class":50},"\"可以享受优惠\"",[36,160234,123],{"class":42},[1752,160236,160238],{"id":160237},"_363-not","3.6.3 not",[19,160240,160241],{},"取反。",[26,160243,160245],{"className":28,"code":160244,"language":30,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,160246,160247,160256,160260,160269],{"__ignoreMap":31},[36,160248,160249,160252,160254],{"class":38,"line":39},[36,160250,160251],{"class":42},"is_closed ",[36,160253,47],{"class":46},[36,160255,128146],{"class":62},[36,160257,160258],{"class":38,"line":54},[36,160259,70],{"emptyLinePlaceholder":69},[36,160261,160262,160264,160266],{"class":38,"line":66},[36,160263,3948],{"class":46},[36,160265,41279],{"class":46},[36,160267,160268],{"class":42}," is_closed:\n",[36,160270,160271,160273,160275,160278],{"class":38,"line":73},[36,160272,89],{"class":62},[36,160274,92],{"class":42},[36,160276,160277],{"class":50},"\"店铺营业中\"",[36,160279,123],{"class":42},[14,160281,160283],{"id":160282},"_37-链式比较","3.7 链式比较",[19,160285,160286],{},"Python 支持链式比较：",[26,160288,160290],{"className":28,"code":160289,"language":30,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,160291,160292,160301,160305,160322],{"__ignoreMap":31},[36,160293,160294,160296,160298],{"class":38,"line":39},[36,160295,157419],{"class":42},[36,160297,47],{"class":46},[36,160299,160300],{"class":62}," 85\n",[36,160302,160303],{"class":38,"line":54},[36,160304,70],{"emptyLinePlaceholder":69},[36,160306,160307,160309,160311,160314,160316,160318,160320],{"class":38,"line":66},[36,160308,3948],{"class":46},[36,160310,899],{"class":62},[36,160312,160313],{"class":46}," \u003C=",[36,160315,159844],{"class":42},[36,160317,896],{"class":46},[36,160319,8136],{"class":62},[36,160321,153],{"class":42},[36,160323,160324,160326,160328,160331],{"class":38,"line":73},[36,160325,89],{"class":62},[36,160327,92],{"class":42},[36,160329,160330],{"class":50},"\"成绩合法\"",[36,160332,123],{"class":42},[19,160334,160335],{},"等价于：",[26,160337,160339],{"className":28,"code":160338,"language":30,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,160340,160341,160361],{"__ignoreMap":31},[36,160342,160343,160345,160347,160349,160351,160353,160355,160357,160359],{"class":38,"line":39},[36,160344,3948],{"class":46},[36,160346,159844],{"class":42},[36,160348,2127],{"class":46},[36,160350,899],{"class":62},[36,160352,122768],{"class":46},[36,160354,159844],{"class":42},[36,160356,896],{"class":46},[36,160358,8136],{"class":62},[36,160360,153],{"class":42},[36,160362,160363,160365,160367,160369],{"class":38,"line":54},[36,160364,89],{"class":62},[36,160366,92],{"class":42},[36,160368,160330],{"class":50},[36,160370,123],{"class":42},[14,160372,160374],{"id":160373},"_38-真值和假值","3.8 真值和假值",[19,160376,118806,160377,160379],{},[33,160378,3948],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160381,160382],{},"假值：",[26,160384,160386],{"className":28,"code":160385,"language":30,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,160387,160388,160392,160397,160401,160405,160410,160414,160418,160423],{"__ignoreMap":31},[36,160389,160390],{"class":38,"line":39},[36,160391,159578],{"class":62},[36,160393,160394],{"class":38,"line":54},[36,160395,160396],{"class":62},"None\n",[36,160398,160399],{"class":38,"line":66},[36,160400,5470],{"class":62},[36,160402,160403],{"class":38,"line":73},[36,160404,34695],{"class":62},[36,160406,160407],{"class":38,"line":86},[36,160408,160409],{"class":50},"\"\"\n",[36,160411,160412],{"class":38,"line":126},[36,160413,34710],{"class":42},[36,160415,160416],{"class":38,"line":131},[36,160417,4369],{"class":42},[36,160419,160420],{"class":38,"line":225},[36,160421,160422],{"class":42},"{}\n",[36,160424,160425,160427],{"class":38,"line":235},[36,160426,157351],{"class":62},[36,160428,4369],{"class":42},[19,160430,17510],{},[26,160432,160434],{"className":28,"code":160433,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,160435,160436,160450,160454,160461,160481,160487],{"__ignoreMap":31},[36,160437,160438,160440,160442,160444,160446,160448],{"class":38,"line":39},[36,160439,43],{"class":42},[36,160441,47],{"class":46},[36,160443,62953],{"class":62},[36,160445,92],{"class":42},[36,160447,154440],{"class":50},[36,160449,123],{"class":42},[36,160451,160452],{"class":38,"line":54},[36,160453,70],{"emptyLinePlaceholder":69},[36,160455,160456,160458],{"class":38,"line":66},[36,160457,3948],{"class":46},[36,160459,160460],{"class":42}," name:\n",[36,160462,160463,160465,160467,160469,160471,160473,160475,160477,160479],{"class":38,"line":73},[36,160464,89],{"class":62},[36,160466,92],{"class":42},[36,160468,95],{"class":46},[36,160470,159115],{"class":50},[36,160472,101],{"class":62},[36,160474,104],{"class":42},[36,160476,107],{"class":62},[36,160478,604],{"class":50},[36,160480,123],{"class":42},[36,160482,160483,160485],{"class":38,"line":86},[36,160484,4105],{"class":46},[36,160486,153],{"class":42},[36,160488,160489,160491,160493,160496],{"class":38,"line":126},[36,160490,89],{"class":62},[36,160492,92],{"class":42},[36,160494,160495],{"class":50},"\"姓名不能为空\"",[36,160497,123],{"class":42},[14,160499,160501],{"id":160500},"_39-match语句","3.9 match语句",[19,160503,160504,160505,160507],{},"Python 3.10 开始支持 ",[33,160506,73610],{},"。它适合处理固定选项。",[26,160509,160511],{"className":28,"code":160510,"language":30,"meta":31,"style":31},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[33,160512,160513,160529,160533,160540,160550,160561,160570,160581,160590,160601,160608],{"__ignoreMap":31},[36,160514,160515,160518,160520,160522,160524,160527],{"class":38,"line":39},[36,160516,160517],{"class":42},"command ",[36,160519,47],{"class":46},[36,160521,62953],{"class":62},[36,160523,92],{"class":42},[36,160525,160526],{"class":50},"\"请输入命令:\"",[36,160528,123],{"class":42},[36,160530,160531],{"class":38,"line":54},[36,160532,70],{"emptyLinePlaceholder":69},[36,160534,160535,160537],{"class":38,"line":66},[36,160536,73610],{"class":46},[36,160538,160539],{"class":42}," command:\n",[36,160541,160542,160545,160548],{"class":38,"line":73},[36,160543,160544],{"class":46},"    case",[36,160546,160547],{"class":50}," \"start\"",[36,160549,153],{"class":42},[36,160551,160552,160554,160556,160559],{"class":38,"line":86},[36,160553,168],{"class":62},[36,160555,92],{"class":42},[36,160557,160558],{"class":50},"\"启动\"",[36,160560,123],{"class":42},[36,160562,160563,160565,160568],{"class":38,"line":126},[36,160564,160544],{"class":46},[36,160566,160567],{"class":50}," \"stop\"",[36,160569,153],{"class":42},[36,160571,160572,160574,160576,160579],{"class":38,"line":131},[36,160573,168],{"class":62},[36,160575,92],{"class":42},[36,160577,160578],{"class":50},"\"停止\"",[36,160580,123],{"class":42},[36,160582,160583,160585,160588],{"class":38,"line":225},[36,160584,160544],{"class":46},[36,160586,160587],{"class":50}," \"restart\"",[36,160589,153],{"class":42},[36,160591,160592,160594,160596,160599],{"class":38,"line":235},[36,160593,168],{"class":62},[36,160595,92],{"class":42},[36,160597,160598],{"class":50},"\"重启\"",[36,160600,123],{"class":42},[36,160602,160603,160605],{"class":38,"line":377},[36,160604,160544],{"class":46},[36,160606,160607],{"class":42}," _:\n",[36,160609,160610,160612,160614,160617],{"class":38,"line":617},[36,160611,168],{"class":62},[36,160613,92],{"class":42},[36,160615,160616],{"class":50},"\"未知命令\"",[36,160618,123],{"class":42},[19,160620,160621,160622,160624,160625,160627],{},"入门阶段掌握 ",[33,160623,156719],{}," 更重要，",[33,160626,73610],{}," 可以作为补充。",[14,160629,160631],{"id":160630},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160633,125631],{},[650,160635,160636,160639,160642],{},[653,160637,160638],{},"输入成绩。",[653,160640,160641],{},"判断成绩是否合法。",[653,160643,160644],{},"输出等级。",[19,160646,12414],{},[26,160648,160650],{"className":28,"code":160649,"language":30,"meta":31,"style":31},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[33,160651,160652,160670,160674,160692,160703,160715,160726,160738,160749,160762,160773,160785,160796,160802],{"__ignoreMap":31},[36,160653,160654,160656,160658,160660,160662,160664,160666,160668],{"class":38,"line":39},[36,160655,157419],{"class":42},[36,160657,47],{"class":46},[36,160659,112136],{"class":62},[36,160661,92],{"class":42},[36,160663,56169],{"class":62},[36,160665,92],{"class":42},[36,160667,154470],{"class":50},[36,160669,1914],{"class":42},[36,160671,160672],{"class":38,"line":54},[36,160673,70],{"emptyLinePlaceholder":69},[36,160675,160676,160678,160680,160682,160684,160686,160688,160690],{"class":38,"line":66},[36,160677,3948],{"class":46},[36,160679,41279],{"class":46},[36,160681,899],{"class":62},[36,160683,160313],{"class":46},[36,160685,159844],{"class":42},[36,160687,896],{"class":46},[36,160689,8136],{"class":62},[36,160691,153],{"class":42},[36,160693,160694,160696,160698,160701],{"class":38,"line":73},[36,160695,89],{"class":62},[36,160697,92],{"class":42},[36,160699,160700],{"class":50},"\"成绩不合法\"",[36,160702,123],{"class":42},[36,160704,160705,160707,160709,160711,160713],{"class":38,"line":86},[36,160706,159867],{"class":46},[36,160708,159844],{"class":42},[36,160710,2127],{"class":46},[36,160712,159849],{"class":62},[36,160714,153],{"class":42},[36,160716,160717,160719,160721,160724],{"class":38,"line":126},[36,160718,89],{"class":62},[36,160720,92],{"class":42},[36,160722,160723],{"class":50},"\"等级:A\"",[36,160725,123],{"class":42},[36,160727,160728,160730,160732,160734,160736],{"class":38,"line":131},[36,160729,159867],{"class":46},[36,160731,159844],{"class":42},[36,160733,2127],{"class":46},[36,160735,159874],{"class":62},[36,160737,153],{"class":42},[36,160739,160740,160742,160744,160747],{"class":38,"line":225},[36,160741,89],{"class":62},[36,160743,92],{"class":42},[36,160745,160746],{"class":50},"\"等级:B\"",[36,160748,123],{"class":42},[36,160750,160751,160753,160755,160757,160760],{"class":38,"line":235},[36,160752,159867],{"class":46},[36,160754,159844],{"class":42},[36,160756,2127],{"class":46},[36,160758,160759],{"class":62}," 70",[36,160761,153],{"class":42},[36,160763,160764,160766,160768,160771],{"class":38,"line":377},[36,160765,89],{"class":62},[36,160767,92],{"class":42},[36,160769,160770],{"class":50},"\"等级:C\"",[36,160772,123],{"class":42},[36,160774,160775,160777,160779,160781,160783],{"class":38,"line":617},[36,160776,159867],{"class":46},[36,160778,159844],{"class":42},[36,160780,2127],{"class":46},[36,160782,159898],{"class":62},[36,160784,153],{"class":42},[36,160786,160787,160789,160791,160794],{"class":38,"line":643},[36,160788,89],{"class":62},[36,160790,92],{"class":42},[36,160792,160793],{"class":50},"\"等级:D\"",[36,160795,123],{"class":42},[36,160797,160798,160800],{"class":38,"line":921},[36,160799,4105],{"class":46},[36,160801,153],{"class":42},[36,160803,160804,160806,160808,160811],{"class":38,"line":934},[36,160805,89],{"class":62},[36,160807,92],{"class":42},[36,160809,160810],{"class":50},"\"等级:E\"",[36,160812,123],{"class":42},[14,160814,160816],{"id":160815},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160818,125631],{},[650,160820,160821,160824,160827,160830],{},[653,160822,160823],{},"输入消费金额。",[653,160825,160826],{},"输入会员等级，普通、银卡、金卡。",[653,160828,160829],{},"普通不打折，银卡 9 折，金卡 8 折。",[653,160831,160832],{},"满 500 再减 50。",[19,160834,12414],{},[26,160836,160838],{"className":28,"code":160837,"language":30,"meta":31,"style":31},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[33,160839,160840,160860,160876,160880,160888,160892,160906,160916,160929,160938,160951,160959,160965,160976,160980,160994,160998,161012,161022,161026],{"__ignoreMap":31},[36,160841,160842,160845,160847,160849,160851,160853,160855,160858],{"class":38,"line":39},[36,160843,160844],{"class":42},"amount ",[36,160846,47],{"class":46},[36,160848,112136],{"class":62},[36,160850,92],{"class":42},[36,160852,56169],{"class":62},[36,160854,92],{"class":42},[36,160856,160857],{"class":50},"\"请输入消费金额:\"",[36,160859,1914],{"class":42},[36,160861,160862,160865,160867,160869,160871,160874],{"class":38,"line":54},[36,160863,160864],{"class":42},"level ",[36,160866,47],{"class":46},[36,160868,62953],{"class":62},[36,160870,92],{"class":42},[36,160872,160873],{"class":50},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,160875,123],{"class":42},[36,160877,160878],{"class":38,"line":66},[36,160879,70],{"emptyLinePlaceholder":69},[36,160881,160882,160884,160886],{"class":38,"line":73},[36,160883,159297],{"class":42},[36,160885,47],{"class":46},[36,160887,58047],{"class":62},[36,160889,160890],{"class":38,"line":86},[36,160891,70],{"emptyLinePlaceholder":69},[36,160893,160894,160896,160899,160901,160904],{"class":38,"line":126},[36,160895,3948],{"class":46},[36,160897,160898],{"class":42}," level ",[36,160900,5334],{"class":46},[36,160902,160903],{"class":50}," \"银卡\"",[36,160905,153],{"class":42},[36,160907,160908,160911,160913],{"class":38,"line":131},[36,160909,160910],{"class":42},"    discount ",[36,160912,47],{"class":46},[36,160914,160915],{"class":62}," 0.9\n",[36,160917,160918,160920,160922,160924,160927],{"class":38,"line":225},[36,160919,159867],{"class":46},[36,160921,160898],{"class":42},[36,160923,5334],{"class":46},[36,160925,160926],{"class":50}," \"金卡\"",[36,160928,153],{"class":42},[36,160930,160931,160933,160935],{"class":38,"line":235},[36,160932,160910],{"class":42},[36,160934,47],{"class":46},[36,160936,160937],{"class":62}," 0.8\n",[36,160939,160940,160942,160944,160946,160949],{"class":38,"line":377},[36,160941,159867],{"class":46},[36,160943,160898],{"class":42},[36,160945,5334],{"class":46},[36,160947,160948],{"class":50}," \"普通\"",[36,160950,153],{"class":42},[36,160952,160953,160955,160957],{"class":38,"line":617},[36,160954,160910],{"class":42},[36,160956,47],{"class":46},[36,160958,58047],{"class":62},[36,160960,160961,160963],{"class":38,"line":643},[36,160962,4105],{"class":46},[36,160964,153],{"class":42},[36,160966,160967,160969,160971,160974],{"class":38,"line":921},[36,160968,89],{"class":62},[36,160970,92],{"class":42},[36,160972,160973],{"class":50},"\"会员等级输入错误，按普通会员计算\"",[36,160975,123],{"class":42},[36,160977,160978],{"class":38,"line":934},[36,160979,70],{"emptyLinePlaceholder":69},[36,160981,160982,160985,160987,160990,160992],{"class":38,"line":939},[36,160983,160984],{"class":42},"pay ",[36,160986,47],{"class":46},[36,160988,160989],{"class":42}," amount ",[36,160991,3011],{"class":46},[36,160993,159336],{"class":42},[36,160995,160996],{"class":38,"line":949},[36,160997,70],{"emptyLinePlaceholder":69},[36,160999,161000,161002,161005,161007,161010],{"class":38,"line":962},[36,161001,3948],{"class":46},[36,161003,161004],{"class":42}," pay ",[36,161006,2127],{"class":46},[36,161008,161009],{"class":62}," 500",[36,161011,153],{"class":42},[36,161013,161014,161017,161019],{"class":38,"line":974},[36,161015,161016],{"class":42},"    pay ",[36,161018,1018],{"class":46},[36,161020,161021],{"class":62}," 50\n",[36,161023,161024],{"class":38,"line":979},[36,161025,70],{"emptyLinePlaceholder":69},[36,161027,161028,161030,161032,161034,161036,161038,161041,161043,161045,161047],{"class":38,"line":994},[36,161029,371],{"class":62},[36,161031,92],{"class":42},[36,161033,95],{"class":46},[36,161035,159417],{"class":50},[36,161037,101],{"class":62},[36,161039,161040],{"class":42},"pay",[36,161042,159220],{"class":46},[36,161044,107],{"class":62},[36,161046,159073],{"class":50},[36,161048,123],{"class":42},[14,161050,161052],{"id":161051},"_312-易错点","3.12 易错点",[650,161054,161055,161058,161061,161064,161069],{},[653,161056,161057],{},"冒号不能漏。",[653,161059,161060],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[653,161062,161063],{},"多分支判断要注意顺序。",[653,161065,161066,161067,676],{},"判断相等用 ",[33,161068,5334],{},[653,161070,161071],{},"字符串比较区分大小写：",[26,161073,161075],{"className":28,"code":161074,"language":30,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,161076,161077],{"__ignoreMap":31},[36,161078,161079,161082,161084,161086],{"class":38,"line":39},[36,161080,161081],{"class":50},"\"Y\"",[36,161083,103899],{"class":46},[36,161085,160066],{"class":50},[36,161087,161088],{"class":2621},"  # False\n",[19,161090,161091],{},"可转换后再判断：",[26,161093,161095],{"className":28,"code":161094,"language":30,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,161096,161097,161114,161127],{"__ignoreMap":31},[36,161098,161099,161102,161104,161106,161108,161111],{"class":38,"line":39},[36,161100,161101],{"class":42},"answer ",[36,161103,47],{"class":46},[36,161105,62953],{"class":62},[36,161107,92],{"class":42},[36,161109,161110],{"class":50},"\"是否继续(y\u002Fn):\"",[36,161112,161113],{"class":42},").lower()\n",[36,161115,161116,161118,161121,161123,161125],{"class":38,"line":54},[36,161117,3948],{"class":46},[36,161119,161120],{"class":42}," answer ",[36,161122,5334],{"class":46},[36,161124,160066],{"class":50},[36,161126,153],{"class":42},[36,161128,161129,161131,161133,161136],{"class":38,"line":66},[36,161130,89],{"class":62},[36,161132,92],{"class":42},[36,161134,161135],{"class":50},"\"继续\"",[36,161137,123],{"class":42},[14,161139,161141],{"id":161140},"_313-本章练习","3.13 本章练习",[650,161143,161144,161147,161150,161153,161163],{},[653,161145,161146],{},"输入年龄，判断是否成年。",[653,161148,161149],{},"输入年份，判断是否为闰年。",[653,161151,161152],{},"输入三个数字，输出最大值。",[653,161154,161155,161156,161159,161160,161162],{},"写登录判断：用户名是 ",[33,161157,161158],{},"admin"," 且密码是 ",[33,161161,17459],{}," 才登录成功。",[653,161164,161165],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2467,161167,161168],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":161170},[161171,161172,161173,161174,161175,161176,161181,161182,161183,161184,161185,161186,161187],{"id":159559,"depth":54,"text":159560},{"id":159612,"depth":54,"text":159613},{"id":159716,"depth":54,"text":159717},{"id":159806,"depth":54,"text":159807},{"id":159996,"depth":54,"text":159997},{"id":160119,"depth":54,"text":160120,"children":161177},[161178,161179,161180],{"id":160123,"depth":66,"text":160124},{"id":160180,"depth":66,"text":160181},{"id":160237,"depth":66,"text":160238},{"id":160282,"depth":54,"text":160283},{"id":160373,"depth":54,"text":160374},{"id":160500,"depth":54,"text":160501},{"id":160630,"depth":54,"text":160631},{"id":160815,"depth":54,"text":160816},{"id":161051,"depth":54,"text":161052},{"id":161140,"depth":54,"text":161141},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159551,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161194,"title":161195,"body":161196,"description":2493,"extension":2494,"meta":162965,"navigation":69,"path":162966,"seo":162967,"stem":162968,"__hash__":162969},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161197,"toc":162945},[161198,161201,161205,161211,161214,161231,161235,161237,161254,161256,161301,161303,161320,161324,161327,161393,161396,161414,161418,161579,161588,161592,161596,161601,161648,161650,161656,161660,161665,161712,161714,161720,161724,161729,161765,161768,161815,161819,161825,161883,161888,161919,161924,161928,161983,161986,162058,162061,162120,162124,162127,162202,162205,162209,162315,162318,162344,162348,162360,162429,162432,162524,162528,162530,162541,162543,162673,162677,162879,162887,162891,162921,162925,162942],[10,161199,161195],{"id":161200},"_4-循环语句",[14,161202,161204],{"id":161203},"_41-为什么需要循环","4.1 为什么需要循环",[19,161206,161207,161208,161210],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,161209,148811],{},"，而应该用循环。",[19,161212,161213],{},"循环适合处理重复任务：",[650,161215,161216,161219,161222,161225,161228],{},[653,161217,161218],{},"重复输出。",[653,161220,161221],{},"重复输入。",[653,161223,161224],{},"遍历数据。",[653,161226,161227],{},"持续执行菜单。",[653,161229,161230],{},"批量处理文件或数据。",[14,161232,161234],{"id":161233},"_42-while循环","4.2 while循环",[19,161236,7564],{},[26,161238,161240],{"className":28,"code":161239,"language":30,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,161241,161242,161249],{"__ignoreMap":31},[36,161243,161244,161246],{"class":38,"line":39},[36,161245,111002],{"class":46},[36,161247,161248],{"class":42}," 条件:\n",[36,161250,161251],{"class":38,"line":54},[36,161252,161253],{"class":42},"    循环体\n",[19,161255,17510],{},[26,161257,161259],{"className":28,"code":161258,"language":30,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,161260,161261,161269,161273,161285,161292],{"__ignoreMap":31},[36,161262,161263,161265,161267],{"class":38,"line":39},[36,161264,102489],{"class":42},[36,161266,47],{"class":46},[36,161268,58047],{"class":62},[36,161270,161271],{"class":38,"line":54},[36,161272,70],{"emptyLinePlaceholder":69},[36,161274,161275,161277,161279,161281,161283],{"class":38,"line":66},[36,161276,111002],{"class":46},[36,161278,11818],{"class":42},[36,161280,896],{"class":46},[36,161282,4541],{"class":62},[36,161284,153],{"class":42},[36,161286,161287,161289],{"class":38,"line":73},[36,161288,89],{"class":62},[36,161290,161291],{"class":42},"(i)\n",[36,161293,161294,161297,161299],{"class":38,"line":86},[36,161295,161296],{"class":42},"    i ",[36,161298,928],{"class":46},[36,161300,58047],{"class":62},[19,161302,83271],{},[650,161304,161305,161311,161314,161317],{},[653,161306,161307,161308,676],{},"判断条件 ",[33,161309,161310],{},"i \u003C= 5",[653,161312,161313],{},"条件成立，执行循环体。",[653,161315,161316],{},"执行完后回到条件判断。",[653,161318,161319],{},"条件不成立，退出循环。",[14,161321,161323],{"id":161322},"_43-while累加","4.3 while累加",[19,161325,161326],{},"计算 1 到 100 的和：",[26,161328,161330],{"className":28,"code":161329,"language":30,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,161331,161332,161340,161348,161352,161364,161374,161382,161386],{"__ignoreMap":31},[36,161333,161334,161336,161338],{"class":38,"line":39},[36,161335,102489],{"class":42},[36,161337,47],{"class":46},[36,161339,58047],{"class":62},[36,161341,161342,161344,161346],{"class":38,"line":54},[36,161343,159321],{"class":42},[36,161345,47],{"class":46},[36,161347,49682],{"class":62},[36,161349,161350],{"class":38,"line":66},[36,161351,70],{"emptyLinePlaceholder":69},[36,161353,161354,161356,161358,161360,161362],{"class":38,"line":73},[36,161355,111002],{"class":46},[36,161357,11818],{"class":42},[36,161359,896],{"class":46},[36,161361,8136],{"class":62},[36,161363,153],{"class":42},[36,161365,161366,161369,161371],{"class":38,"line":86},[36,161367,161368],{"class":42},"    total ",[36,161370,928],{"class":46},[36,161372,161373],{"class":42}," i\n",[36,161375,161376,161378,161380],{"class":38,"line":126},[36,161377,161296],{"class":42},[36,161379,928],{"class":46},[36,161381,58047],{"class":62},[36,161383,161384],{"class":38,"line":131},[36,161385,70],{"emptyLinePlaceholder":69},[36,161387,161388,161390],{"class":38,"line":225},[36,161389,371],{"class":62},[36,161391,161392],{"class":42},"(total)\n",[19,161394,161395],{},"核心思想：",[650,161397,161398,161403,161408],{},[653,161399,161400,161402],{},[33,161401,2997],{}," 控制循环次数。",[653,161404,161405,161407],{},[33,161406,159422],{}," 保存累加结果。",[653,161409,161410,161411,161413],{},"每轮循环都要更新 ",[33,161412,2997],{},"，否则可能死循环。",[14,161415,161417],{"id":161416},"_44-while猜数字","4.4 while猜数字",[26,161419,161421],{"className":28,"code":161420,"language":30,"meta":31,"style":31},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[33,161422,161423,161429,161433,161450,161458,161462,161470,161490,161499,161503,161515,161526,161536,161547,161553,161575],{"__ignoreMap":31},[36,161424,161425,161427],{"class":38,"line":39},[36,161426,1943],{"class":46},[36,161428,47677],{"class":42},[36,161430,161431],{"class":38,"line":54},[36,161432,70],{"emptyLinePlaceholder":69},[36,161434,161435,161437,161439,161442,161444,161446,161448],{"class":38,"line":66},[36,161436,161101],{"class":42},[36,161438,47],{"class":46},[36,161440,161441],{"class":42}," random.randint(",[36,161443,1906],{"class":62},[36,161445,630],{"class":42},[36,161447,1070],{"class":62},[36,161449,123],{"class":42},[36,161451,161452,161454,161456],{"class":38,"line":73},[36,161453,149027],{"class":42},[36,161455,47],{"class":46},[36,161457,49682],{"class":62},[36,161459,161460],{"class":38,"line":86},[36,161461,70],{"emptyLinePlaceholder":69},[36,161463,161464,161466,161468],{"class":38,"line":126},[36,161465,111002],{"class":46},[36,161467,97633],{"class":62},[36,161469,153],{"class":42},[36,161471,161472,161475,161477,161479,161481,161483,161485,161488],{"class":38,"line":131},[36,161473,161474],{"class":42},"    guess ",[36,161476,47],{"class":46},[36,161478,4775],{"class":62},[36,161480,92],{"class":42},[36,161482,56169],{"class":62},[36,161484,92],{"class":42},[36,161486,161487],{"class":50},"\"请输入1到100之间的数字:\"",[36,161489,1914],{"class":42},[36,161491,161492,161495,161497],{"class":38,"line":225},[36,161493,161494],{"class":42},"    count ",[36,161496,928],{"class":46},[36,161498,58047],{"class":62},[36,161500,161501],{"class":38,"line":235},[36,161502,70],{"emptyLinePlaceholder":69},[36,161504,161505,161507,161510,161512],{"class":38,"line":377},[36,161506,5486],{"class":46},[36,161508,161509],{"class":42}," guess ",[36,161511,986],{"class":46},[36,161513,161514],{"class":42}," answer:\n",[36,161516,161517,161519,161521,161524],{"class":38,"line":617},[36,161518,168],{"class":62},[36,161520,92],{"class":42},[36,161522,161523],{"class":50},"\"猜大了\"",[36,161525,123],{"class":42},[36,161527,161528,161530,161532,161534],{"class":38,"line":643},[36,161529,41642],{"class":46},[36,161531,161509],{"class":42},[36,161533,3463],{"class":46},[36,161535,161514],{"class":42},[36,161537,161538,161540,161542,161545],{"class":38,"line":921},[36,161539,168],{"class":62},[36,161541,92],{"class":42},[36,161543,161544],{"class":50},"\"猜小了\"",[36,161546,123],{"class":42},[36,161548,161549,161551],{"class":38,"line":934},[36,161550,160083],{"class":46},[36,161552,153],{"class":42},[36,161554,161555,161557,161559,161561,161564,161566,161568,161570,161573],{"class":38,"line":939},[36,161556,168],{"class":62},[36,161558,92],{"class":42},[36,161560,95],{"class":46},[36,161562,161563],{"class":50},"\"猜对了，一共猜了",[36,161565,101],{"class":62},[36,161567,86776],{"class":42},[36,161569,107],{"class":62},[36,161571,161572],{"class":50},"次\"",[36,161574,123],{"class":42},[36,161576,161577],{"class":38,"line":949},[36,161578,33981],{"class":46},[19,161580,161581,161584,161585,161587],{},[33,161582,161583],{},"while True"," 表示无限循环，通常配合 ",[33,161586,4446],{}," 使用。",[14,161589,161591],{"id":161590},"_45-break和continue","4.5 break和continue",[1752,161593,161595],{"id":161594},"_451-break","4.5.1 break",[19,161597,161598,161600],{},[33,161599,4446],{}," 直接结束整个循环。",[26,161602,161604],{"className":28,"code":161603,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,161605,161606,161626,161638,161642],{"__ignoreMap":31},[36,161607,161608,161610,161612,161614,161616,161618,161620,161622,161624],{"class":38,"line":39},[36,161609,5410],{"class":46},[36,161611,11818],{"class":42},[36,161613,28413],{"class":46},[36,161615,34796],{"class":62},[36,161617,92],{"class":42},[36,161619,1906],{"class":62},[36,161621,630],{"class":42},[36,161623,2900],{"class":62},[36,161625,1147],{"class":42},[36,161627,161628,161630,161632,161634,161636],{"class":38,"line":54},[36,161629,5486],{"class":46},[36,161631,11818],{"class":42},[36,161633,5334],{"class":46},[36,161635,80415],{"class":62},[36,161637,153],{"class":42},[36,161639,161640],{"class":38,"line":66},[36,161641,33981],{"class":46},[36,161643,161644,161646],{"class":38,"line":73},[36,161645,89],{"class":62},[36,161647,161291],{"class":42},[19,161649,148796],{},[26,161651,161654],{"className":161652,"code":161653,"language":7570,"meta":31},[7568],"1\n2\n",[33,161655,161653],{"__ignoreMap":31},[1752,161657,161659],{"id":161658},"_452-continue","4.5.2 continue",[19,161661,161662,161664],{},[33,161663,156733],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,161666,161668],{"className":28,"code":161667,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,161669,161670,161690,161702,161706],{"__ignoreMap":31},[36,161671,161672,161674,161676,161678,161680,161682,161684,161686,161688],{"class":38,"line":39},[36,161673,5410],{"class":46},[36,161675,11818],{"class":42},[36,161677,28413],{"class":46},[36,161679,34796],{"class":62},[36,161681,92],{"class":42},[36,161683,1906],{"class":62},[36,161685,630],{"class":42},[36,161687,2900],{"class":62},[36,161689,1147],{"class":42},[36,161691,161692,161694,161696,161698,161700],{"class":38,"line":54},[36,161693,5486],{"class":46},[36,161695,11818],{"class":42},[36,161697,5334],{"class":46},[36,161699,80415],{"class":62},[36,161701,153],{"class":42},[36,161703,161704],{"class":38,"line":66},[36,161705,150848],{"class":46},[36,161707,161708,161710],{"class":38,"line":73},[36,161709,89],{"class":62},[36,161711,161291],{"class":42},[19,161713,148796],{},[26,161715,161718],{"className":161716,"code":161717,"language":7570,"meta":31},[7568],"1\n2\n4\n5\n",[33,161719,161717],{"__ignoreMap":31},[14,161721,161723],{"id":161722},"_46-for循环","4.6 for循环",[19,161725,161726,161728],{},[33,161727,5410],{}," 常用于遍历序列。",[26,161730,161732],{"className":28,"code":161731,"language":30,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,161733,161734,161743,161747,161758],{"__ignoreMap":31},[36,161735,161736,161738,161740],{"class":38,"line":39},[36,161737,43],{"class":42},[36,161739,47],{"class":46},[36,161741,161742],{"class":50}," \"python\"\n",[36,161744,161745],{"class":38,"line":54},[36,161746,70],{"emptyLinePlaceholder":69},[36,161748,161749,161751,161754,161756],{"class":38,"line":66},[36,161750,5410],{"class":46},[36,161752,161753],{"class":42}," ch ",[36,161755,28413],{"class":46},[36,161757,160460],{"class":42},[36,161759,161760,161762],{"class":38,"line":73},[36,161761,89],{"class":62},[36,161763,161764],{"class":42},"(ch)\n",[19,161766,161767],{},"遍历列表：",[26,161769,161771],{"className":28,"code":161770,"language":30,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,161772,161773,161795,161799,161809],{"__ignoreMap":31},[36,161774,161775,161778,161780,161782,161784,161786,161788,161790,161793],{"class":38,"line":39},[36,161776,161777],{"class":42},"students ",[36,161779,47],{"class":46},[36,161781,54574],{"class":42},[36,161783,627],{"class":50},[36,161785,630],{"class":42},[36,161787,1716],{"class":50},[36,161789,630],{"class":42},[36,161791,161792],{"class":50},"\"小刚\"",[36,161794,35598],{"class":42},[36,161796,161797],{"class":38,"line":54},[36,161798,70],{"emptyLinePlaceholder":69},[36,161800,161801,161803,161805,161807],{"class":38,"line":66},[36,161802,5410],{"class":46},[36,161804,154198],{"class":42},[36,161806,28413],{"class":46},[36,161808,154203],{"class":42},[36,161810,161811,161813],{"class":38,"line":73},[36,161812,89],{"class":62},[36,161814,791],{"class":42},[14,161816,161818],{"id":161817},"_47-range函数","4.7 range函数",[19,161820,161821,161824],{},[33,161822,161823],{},"range()"," 用于生成整数序列。",[26,161826,161828],{"className":28,"code":161827,"language":30,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,161829,161830,161844,161862],{"__ignoreMap":31},[36,161831,161832,161834,161836,161838,161841],{"class":38,"line":39},[36,161833,35768],{"class":62},[36,161835,92],{"class":42},[36,161837,2875],{"class":62},[36,161839,161840],{"class":42},")          ",[36,161842,161843],{"class":2621},"# 0,1,2,3,4\n",[36,161845,161846,161848,161850,161852,161854,161856,161859],{"class":38,"line":54},[36,161847,35768],{"class":62},[36,161849,92],{"class":42},[36,161851,1906],{"class":62},[36,161853,630],{"class":42},[36,161855,2875],{"class":62},[36,161857,161858],{"class":42},")       ",[36,161860,161861],{"class":2621},"# 1,2,3,4\n",[36,161863,161864,161866,161868,161870,161872,161874,161876,161878,161880],{"class":38,"line":66},[36,161865,35768],{"class":62},[36,161867,92],{"class":42},[36,161869,1906],{"class":62},[36,161871,630],{"class":42},[36,161873,3002],{"class":62},[36,161875,630],{"class":42},[36,161877,1911],{"class":62},[36,161879,157722],{"class":42},[36,161881,161882],{"class":2621},"# 1,3,5,7,9\n",[19,161884,161885,161886,26989],{},"配合 ",[33,161887,5410],{},[26,161889,161891],{"className":28,"code":161890,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,161892,161893,161913],{"__ignoreMap":31},[36,161894,161895,161897,161899,161901,161903,161905,161907,161909,161911],{"class":38,"line":39},[36,161896,5410],{"class":46},[36,161898,11818],{"class":42},[36,161900,28413],{"class":46},[36,161902,34796],{"class":62},[36,161904,92],{"class":42},[36,161906,1906],{"class":62},[36,161908,630],{"class":42},[36,161910,2900],{"class":62},[36,161912,1147],{"class":42},[36,161914,161915,161917],{"class":38,"line":54},[36,161916,89],{"class":62},[36,161918,161291],{"class":42},[19,161920,11405,161921,161923],{},[33,161922,35768],{}," 的结束值不包含在内。",[14,161925,161927],{"id":161926},"_48-for循环求和","4.8 for循环求和",[26,161929,161931],{"className":28,"code":161930,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,161932,161933,161941,161945,161965,161973,161977],{"__ignoreMap":31},[36,161934,161935,161937,161939],{"class":38,"line":39},[36,161936,159321],{"class":42},[36,161938,47],{"class":46},[36,161940,49682],{"class":62},[36,161942,161943],{"class":38,"line":54},[36,161944,70],{"emptyLinePlaceholder":69},[36,161946,161947,161949,161951,161953,161955,161957,161959,161961,161963],{"class":38,"line":66},[36,161948,5410],{"class":46},[36,161950,11818],{"class":42},[36,161952,28413],{"class":46},[36,161954,34796],{"class":62},[36,161956,92],{"class":42},[36,161958,1906],{"class":62},[36,161960,630],{"class":42},[36,161962,2893],{"class":62},[36,161964,1147],{"class":42},[36,161966,161967,161969,161971],{"class":38,"line":73},[36,161968,161368],{"class":42},[36,161970,928],{"class":46},[36,161972,161373],{"class":42},[36,161974,161975],{"class":38,"line":86},[36,161976,70],{"emptyLinePlaceholder":69},[36,161978,161979,161981],{"class":38,"line":126},[36,161980,371],{"class":62},[36,161982,161392],{"class":42},[19,161984,161985],{},"求偶数和：",[26,161987,161989],{"className":28,"code":161988,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,161990,161991,161999,162003,162023,162039,162048,162052],{"__ignoreMap":31},[36,161992,161993,161995,161997],{"class":38,"line":39},[36,161994,159321],{"class":42},[36,161996,47],{"class":46},[36,161998,49682],{"class":62},[36,162000,162001],{"class":38,"line":54},[36,162002,70],{"emptyLinePlaceholder":69},[36,162004,162005,162007,162009,162011,162013,162015,162017,162019,162021],{"class":38,"line":66},[36,162006,5410],{"class":46},[36,162008,11818],{"class":42},[36,162010,28413],{"class":46},[36,162012,34796],{"class":62},[36,162014,92],{"class":42},[36,162016,1906],{"class":62},[36,162018,630],{"class":42},[36,162020,2893],{"class":62},[36,162022,1147],{"class":42},[36,162024,162025,162027,162029,162031,162033,162035,162037],{"class":38,"line":73},[36,162026,5486],{"class":46},[36,162028,11818],{"class":42},[36,162030,2884],{"class":46},[36,162032,17130],{"class":62},[36,162034,103899],{"class":46},[36,162036,899],{"class":62},[36,162038,153],{"class":42},[36,162040,162041,162044,162046],{"class":38,"line":86},[36,162042,162043],{"class":42},"        total ",[36,162045,928],{"class":46},[36,162047,161373],{"class":42},[36,162049,162050],{"class":38,"line":126},[36,162051,70],{"emptyLinePlaceholder":69},[36,162053,162054,162056],{"class":38,"line":131},[36,162055,371],{"class":62},[36,162057,161392],{"class":42},[19,162059,162060],{},"也可以：",[26,162062,162064],{"className":28,"code":162063,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,162065,162066,162074,162078,162102,162110,162114],{"__ignoreMap":31},[36,162067,162068,162070,162072],{"class":38,"line":39},[36,162069,159321],{"class":42},[36,162071,47],{"class":46},[36,162073,49682],{"class":62},[36,162075,162076],{"class":38,"line":54},[36,162077,70],{"emptyLinePlaceholder":69},[36,162079,162080,162082,162084,162086,162088,162090,162092,162094,162096,162098,162100],{"class":38,"line":66},[36,162081,5410],{"class":46},[36,162083,11818],{"class":42},[36,162085,28413],{"class":46},[36,162087,34796],{"class":62},[36,162089,92],{"class":42},[36,162091,1911],{"class":62},[36,162093,630],{"class":42},[36,162095,2893],{"class":62},[36,162097,630],{"class":42},[36,162099,1911],{"class":62},[36,162101,1147],{"class":42},[36,162103,162104,162106,162108],{"class":38,"line":73},[36,162105,161368],{"class":42},[36,162107,928],{"class":46},[36,162109,161373],{"class":42},[36,162111,162112],{"class":38,"line":86},[36,162113,70],{"emptyLinePlaceholder":69},[36,162115,162116,162118],{"class":38,"line":126},[36,162117,371],{"class":62},[36,162119,161392],{"class":42},[14,162121,162123],{"id":162122},"_49-循环嵌套","4.9 循环嵌套",[19,162125,162126],{},"嵌套循环就是循环里面再写循环。",[26,162128,162130],{"className":28,"code":162129,"language":30,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,162131,162132,162152,162172],{"__ignoreMap":31},[36,162133,162134,162136,162138,162140,162142,162144,162146,162148,162150],{"class":38,"line":39},[36,162135,5410],{"class":46},[36,162137,11818],{"class":42},[36,162139,28413],{"class":46},[36,162141,34796],{"class":62},[36,162143,92],{"class":42},[36,162145,1906],{"class":62},[36,162147,630],{"class":42},[36,162149,2850],{"class":62},[36,162151,1147],{"class":42},[36,162153,162154,162156,162158,162160,162162,162164,162166,162168,162170],{"class":38,"line":54},[36,162155,5586],{"class":46},[36,162157,11879],{"class":42},[36,162159,28413],{"class":46},[36,162161,34796],{"class":62},[36,162163,92],{"class":42},[36,162165,1906],{"class":62},[36,162167,630],{"class":42},[36,162169,2850],{"class":62},[36,162171,1147],{"class":42},[36,162173,162174,162176,162178,162180,162183,162185,162187,162189,162192,162194,162196,162198,162200],{"class":38,"line":66},[36,162175,168],{"class":62},[36,162177,92],{"class":42},[36,162179,95],{"class":46},[36,162181,162182],{"class":50},"\"i=",[36,162184,101],{"class":62},[36,162186,2997],{"class":42},[36,162188,107],{"class":62},[36,162190,162191],{"class":50},", j=",[36,162193,101],{"class":62},[36,162195,3023],{"class":42},[36,162197,107],{"class":62},[36,162199,604],{"class":50},[36,162201,123],{"class":42},[19,162203,162204],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162206,162208],{"id":162207},"_410-九九乘法表","4.10 九九乘法表",[26,162210,162212],{"className":28,"code":162211,"language":30,"meta":31,"style":31},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[33,162213,162214,162234,162257,162309],{"__ignoreMap":31},[36,162215,162216,162218,162220,162222,162224,162226,162228,162230,162232],{"class":38,"line":39},[36,162217,5410],{"class":46},[36,162219,11818],{"class":42},[36,162221,28413],{"class":46},[36,162223,34796],{"class":62},[36,162225,92],{"class":42},[36,162227,1906],{"class":62},[36,162229,630],{"class":42},[36,162231,3002],{"class":62},[36,162233,1147],{"class":42},[36,162235,162236,162238,162240,162242,162244,162246,162248,162251,162253,162255],{"class":38,"line":54},[36,162237,5586],{"class":46},[36,162239,11879],{"class":42},[36,162241,28413],{"class":46},[36,162243,34796],{"class":62},[36,162245,92],{"class":42},[36,162247,1906],{"class":62},[36,162249,162250],{"class":42},", i ",[36,162252,1885],{"class":46},[36,162254,27489],{"class":62},[36,162256,1147],{"class":42},[36,162258,162259,162261,162263,162265,162267,162269,162271,162273,162275,162277,162279,162281,162283,162285,162287,162289,162291,162293,162295,162297,162299,162301,162303,162305,162307],{"class":38,"line":66},[36,162260,168],{"class":62},[36,162262,92],{"class":42},[36,162264,95],{"class":46},[36,162266,604],{"class":50},[36,162268,101],{"class":62},[36,162270,3023],{"class":42},[36,162272,107],{"class":62},[36,162274,3011],{"class":50},[36,162276,101],{"class":62},[36,162278,2997],{"class":42},[36,162280,107],{"class":62},[36,162282,47],{"class":50},[36,162284,101],{"class":62},[36,162286,102489],{"class":42},[36,162288,3011],{"class":46},[36,162290,5795],{"class":42},[36,162292,107],{"class":62},[36,162294,604],{"class":50},[36,162296,630],{"class":42},[36,162298,48150],{"class":7598},[36,162300,47],{"class":46},[36,162302,604],{"class":50},[36,162304,3651],{"class":62},[36,162306,604],{"class":50},[36,162308,123],{"class":42},[36,162310,162311,162313],{"class":38,"line":73},[36,162312,89],{"class":62},[36,162314,4369],{"class":42},[19,162316,162317],{},"关键点：",[650,162319,162320,162326,162332,162338],{},[653,162321,162322,162323,162325],{},"外层 ",[33,162324,2997],{}," 控制行。",[653,162327,162328,162329,162331],{},"内层 ",[33,162330,3023],{}," 控制列。",[653,162333,162334,162335,162337],{},"每行结束后用 ",[33,162336,148811],{}," 换行。",[653,162339,162340,162343],{},[33,162341,162342],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162345,162347],{"id":162346},"_411-循环else","4.11 循环else",[19,162349,162350,162351,162353,162354,162356,162357,162359],{},"Python 的循环可以带 ",[33,162352,4105],{},"。当循环正常结束时执行 ",[33,162355,4105],{},"，如果被 ",[33,162358,4446],{}," 打断，则不执行。",[26,162361,162363],{"className":28,"code":162362,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,162364,162365,162385,162397,162408,162412,162418],{"__ignoreMap":31},[36,162366,162367,162369,162371,162373,162375,162377,162379,162381,162383],{"class":38,"line":39},[36,162368,5410],{"class":46},[36,162370,11818],{"class":42},[36,162372,28413],{"class":46},[36,162374,34796],{"class":62},[36,162376,92],{"class":42},[36,162378,1906],{"class":62},[36,162380,630],{"class":42},[36,162382,2900],{"class":62},[36,162384,1147],{"class":42},[36,162386,162387,162389,162391,162393,162395],{"class":38,"line":54},[36,162388,5486],{"class":46},[36,162390,11818],{"class":42},[36,162392,5334],{"class":46},[36,162394,4431],{"class":62},[36,162396,153],{"class":42},[36,162398,162399,162401,162403,162406],{"class":38,"line":66},[36,162400,168],{"class":62},[36,162402,92],{"class":42},[36,162404,162405],{"class":50},"\"找到了\"",[36,162407,123],{"class":42},[36,162409,162410],{"class":38,"line":73},[36,162411,33981],{"class":46},[36,162413,162414,162416],{"class":38,"line":86},[36,162415,4105],{"class":46},[36,162417,153],{"class":42},[36,162419,162420,162422,162424,162427],{"class":38,"line":126},[36,162421,89],{"class":62},[36,162423,92],{"class":42},[36,162425,162426],{"class":50},"\"没找到\"",[36,162428,123],{"class":42},[19,162430,162431],{},"常用于搜索。",[26,162433,162435],{"className":28,"code":162434,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,162436,162437,162458,162467,162471,162483,162494,162504,162508,162514],{"__ignoreMap":31},[36,162438,162439,162442,162444,162446,162448,162450,162452,162454,162456],{"class":38,"line":39},[36,162440,162441],{"class":42},"names ",[36,162443,47],{"class":46},[36,162445,54574],{"class":42},[36,162447,627],{"class":50},[36,162449,630],{"class":42},[36,162451,1716],{"class":50},[36,162453,630],{"class":42},[36,162455,161792],{"class":50},[36,162457,35598],{"class":42},[36,162459,162460,162462,162464],{"class":38,"line":54},[36,162461,113917],{"class":42},[36,162463,47],{"class":46},[36,162465,162466],{"class":50}," \"小李\"\n",[36,162468,162469],{"class":38,"line":66},[36,162470,70],{"emptyLinePlaceholder":69},[36,162472,162473,162475,162478,162480],{"class":38,"line":73},[36,162474,5410],{"class":46},[36,162476,162477],{"class":42}," name ",[36,162479,28413],{"class":46},[36,162481,162482],{"class":42}," names:\n",[36,162484,162485,162487,162489,162491],{"class":38,"line":86},[36,162486,5486],{"class":46},[36,162488,162477],{"class":42},[36,162490,5334],{"class":46},[36,162492,162493],{"class":42}," target:\n",[36,162495,162496,162498,162500,162502],{"class":38,"line":126},[36,162497,168],{"class":62},[36,162499,92],{"class":42},[36,162501,162405],{"class":50},[36,162503,123],{"class":42},[36,162505,162506],{"class":38,"line":131},[36,162507,33981],{"class":46},[36,162509,162510,162512],{"class":38,"line":225},[36,162511,4105],{"class":46},[36,162513,153],{"class":42},[36,162515,162516,162518,162520,162522],{"class":38,"line":235},[36,162517,89],{"class":62},[36,162519,92],{"class":42},[36,162521,162426],{"class":50},[36,162523,123],{"class":42},[14,162525,162527],{"id":162526},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162529,125631],{},[650,162531,162532,162535,162538],{},[653,162533,162534],{},"用户最多输入 3 次密码。",[653,162536,162537],{},"密码正确则登录成功。",[653,162539,162540],{},"3 次都错误则锁定账号。",[19,162542,12414],{},[26,162544,162546],{"className":28,"code":162545,"language":30,"meta":31,"style":31},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[33,162547,162548,162558,162562,162578,162594,162598,162610,162621,162625,162631,162656,162662],{"__ignoreMap":31},[36,162549,162550,162553,162555],{"class":38,"line":39},[36,162551,162552],{"class":42},"password ",[36,162554,47],{"class":46},[36,162556,162557],{"class":50}," \"123456\"\n",[36,162559,162560],{"class":38,"line":54},[36,162561,70],{"emptyLinePlaceholder":69},[36,162563,162564,162566,162568,162570,162572,162574,162576],{"class":38,"line":66},[36,162565,5410],{"class":46},[36,162567,11818],{"class":42},[36,162569,28413],{"class":46},[36,162571,34796],{"class":62},[36,162573,92],{"class":42},[36,162575,2634],{"class":62},[36,162577,1147],{"class":42},[36,162579,162580,162583,162585,162587,162589,162592],{"class":38,"line":73},[36,162581,162582],{"class":42},"    user_password ",[36,162584,47],{"class":46},[36,162586,62953],{"class":62},[36,162588,92],{"class":42},[36,162590,162591],{"class":50},"\"请输入密码:\"",[36,162593,123],{"class":42},[36,162595,162596],{"class":38,"line":86},[36,162597,70],{"emptyLinePlaceholder":69},[36,162599,162600,162602,162605,162607],{"class":38,"line":126},[36,162601,5486],{"class":46},[36,162603,162604],{"class":42}," user_password ",[36,162606,5334],{"class":46},[36,162608,162609],{"class":42}," password:\n",[36,162611,162612,162614,162616,162619],{"class":38,"line":131},[36,162613,168],{"class":62},[36,162615,92],{"class":42},[36,162617,162618],{"class":50},"\"登录成功\"",[36,162620,123],{"class":42},[36,162622,162623],{"class":38,"line":225},[36,162624,33981],{"class":46},[36,162626,162627,162629],{"class":38,"line":235},[36,162628,160083],{"class":46},[36,162630,153],{"class":42},[36,162632,162633,162635,162637,162639,162642,162645,162647,162649,162651,162654],{"class":38,"line":377},[36,162634,168],{"class":62},[36,162636,92],{"class":42},[36,162638,95],{"class":46},[36,162640,162641],{"class":50},"\"密码错误，还剩",[36,162643,162644],{"class":62},"{2",[36,162646,54619],{"class":46},[36,162648,5417],{"class":42},[36,162650,107],{"class":62},[36,162652,162653],{"class":50},"次机会\"",[36,162655,123],{"class":42},[36,162657,162658,162660],{"class":38,"line":617},[36,162659,4105],{"class":46},[36,162661,153],{"class":42},[36,162663,162664,162666,162668,162671],{"class":38,"line":643},[36,162665,89],{"class":62},[36,162667,92],{"class":42},[36,162669,162670],{"class":50},"\"账号已锁定\"",[36,162672,123],{"class":42},[14,162674,162676],{"id":162675},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,162678,162680],{"className":28,"code":162679,"language":30,"meta":31,"style":31},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[33,162681,162682,162690,162701,162712,162723,162734,162745,162749,162764,162768,162780,162791,162803,162814,162826,162837,162849,162859,162863,162869],{"__ignoreMap":31},[36,162683,162684,162686,162688],{"class":38,"line":39},[36,162685,111002],{"class":46},[36,162687,97633],{"class":62},[36,162689,153],{"class":42},[36,162691,162692,162694,162696,162699],{"class":38,"line":54},[36,162693,89],{"class":62},[36,162695,92],{"class":42},[36,162697,162698],{"class":50},"\"====== 菜单 ======\"",[36,162700,123],{"class":42},[36,162702,162703,162705,162707,162710],{"class":38,"line":66},[36,162704,89],{"class":62},[36,162706,92],{"class":42},[36,162708,162709],{"class":50},"\"1. 查询余额\"",[36,162711,123],{"class":42},[36,162713,162714,162716,162718,162721],{"class":38,"line":73},[36,162715,89],{"class":62},[36,162717,92],{"class":42},[36,162719,162720],{"class":50},"\"2. 存款\"",[36,162722,123],{"class":42},[36,162724,162725,162727,162729,162732],{"class":38,"line":86},[36,162726,89],{"class":62},[36,162728,92],{"class":42},[36,162730,162731],{"class":50},"\"3. 取款\"",[36,162733,123],{"class":42},[36,162735,162736,162738,162740,162743],{"class":38,"line":126},[36,162737,89],{"class":62},[36,162739,92],{"class":42},[36,162741,162742],{"class":50},"\"0. 退出\"",[36,162744,123],{"class":42},[36,162746,162747],{"class":38,"line":131},[36,162748,70],{"emptyLinePlaceholder":69},[36,162750,162751,162754,162756,162758,162760,162762],{"class":38,"line":225},[36,162752,162753],{"class":42},"    choice ",[36,162755,47],{"class":46},[36,162757,62953],{"class":62},[36,162759,92],{"class":42},[36,162761,155134],{"class":50},[36,162763,123],{"class":42},[36,162765,162766],{"class":38,"line":235},[36,162767,70],{"emptyLinePlaceholder":69},[36,162769,162770,162772,162774,162776,162778],{"class":38,"line":377},[36,162771,5486],{"class":46},[36,162773,155147],{"class":42},[36,162775,5334],{"class":46},[36,162777,155152],{"class":50},[36,162779,153],{"class":42},[36,162781,162782,162784,162786,162789],{"class":38,"line":617},[36,162783,168],{"class":62},[36,162785,92],{"class":42},[36,162787,162788],{"class":50},"\"余额为1000元\"",[36,162790,123],{"class":42},[36,162792,162793,162795,162797,162799,162801],{"class":38,"line":643},[36,162794,41642],{"class":46},[36,162796,155147],{"class":42},[36,162798,5334],{"class":46},[36,162800,155171],{"class":50},[36,162802,153],{"class":42},[36,162804,162805,162807,162809,162812],{"class":38,"line":921},[36,162806,168],{"class":62},[36,162808,92],{"class":42},[36,162810,162811],{"class":50},"\"存款功能\"",[36,162813,123],{"class":42},[36,162815,162816,162818,162820,162822,162824],{"class":38,"line":934},[36,162817,41642],{"class":46},[36,162819,155147],{"class":42},[36,162821,5334],{"class":46},[36,162823,155189],{"class":50},[36,162825,153],{"class":42},[36,162827,162828,162830,162832,162835],{"class":38,"line":939},[36,162829,168],{"class":62},[36,162831,92],{"class":42},[36,162833,162834],{"class":50},"\"取款功能\"",[36,162836,123],{"class":42},[36,162838,162839,162841,162843,162845,162847],{"class":38,"line":949},[36,162840,41642],{"class":46},[36,162842,155147],{"class":42},[36,162844,5334],{"class":46},[36,162846,155243],{"class":50},[36,162848,153],{"class":42},[36,162850,162851,162853,162855,162857],{"class":38,"line":962},[36,162852,168],{"class":62},[36,162854,92],{"class":42},[36,162856,155254],{"class":50},[36,162858,123],{"class":42},[36,162860,162861],{"class":38,"line":974},[36,162862,33981],{"class":46},[36,162864,162865,162867],{"class":38,"line":979},[36,162866,160083],{"class":46},[36,162868,153],{"class":42},[36,162870,162871,162873,162875,162877],{"class":38,"line":994},[36,162872,168],{"class":62},[36,162874,92],{"class":42},[36,162876,155275],{"class":50},[36,162878,123],{"class":42},[19,162880,162881,162882,162884,162885,676],{},"菜单类程序通常使用 ",[33,162883,161583],{},"，用户选择退出时 ",[33,162886,4446],{},[14,162888,162890],{"id":162889},"_414-易错点","4.14 易错点",[650,162892,162893,162898,162904,162912,162918],{},[653,162894,162895,162897],{},[33,162896,111002],{}," 循环必须更新控制变量。",[653,162899,162900,162903],{},[33,162901,162902],{},"range(1, 10)"," 不包含 10。",[653,162905,162906,162908,162909,162911],{},[33,162907,4446],{}," 结束整个循环，",[33,162910,156733],{}," 只跳过本轮。",[653,162913,162914,162915,162917],{},"嵌套循环中，",[33,162916,4446],{}," 只跳出当前所在的一层循环。",[653,162919,162920],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162922,162924],{"id":162923},"_415-本章练习","4.15 本章练习",[650,162926,162927,162930,162933,162936,162939],{},[653,162928,162929],{},"输出 1 到 100。",[653,162931,162932],{},"计算 1 到 100 的偶数和。",[653,162934,162935],{},"输出 100 以内能被 3 和 5 同时整除的数。",[653,162937,162938],{},"编写猜数字游戏，限制最多猜 7 次。",[653,162940,162941],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2467,162943,162944],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":162946},[162947,162948,162949,162950,162951,162955,162956,162957,162958,162959,162960,162961,162962,162963,162964],{"id":161203,"depth":54,"text":161204},{"id":161233,"depth":54,"text":161234},{"id":161322,"depth":54,"text":161323},{"id":161416,"depth":54,"text":161417},{"id":161590,"depth":54,"text":161591,"children":162952},[162953,162954],{"id":161594,"depth":66,"text":161595},{"id":161658,"depth":66,"text":161659},{"id":161722,"depth":54,"text":161723},{"id":161817,"depth":54,"text":161818},{"id":161926,"depth":54,"text":161927},{"id":162122,"depth":54,"text":162123},{"id":162207,"depth":54,"text":162208},{"id":162346,"depth":54,"text":162347},{"id":162526,"depth":54,"text":162527},{"id":162675,"depth":54,"text":162676},{"id":162889,"depth":54,"text":162890},{"id":162923,"depth":54,"text":162924},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161195,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162971,"title":162972,"body":162973,"description":2493,"extension":2494,"meta":164978,"navigation":69,"path":164979,"seo":164980,"stem":164981,"__hash__":164982},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162974,"toc":164958},[162975,162978,162982,162985,162988,163002,163005,163019,163023,163025,163044,163046,163093,163095,163109,163113,163187,163190,163194,163197,163256,163264,163267,163320,163323,163327,163332,163387,163395,163445,163449,163454,163462,163561,163567,163571,163576,163579,163590,163631,163644,163648,163651,163687,163690,163703,163706,163766,163770,163774,163777,163828,163832,163835,163882,163888,163954,163957,163961,163964,164080,164083,164087,164090,164196,164200,164203,164241,164244,164286,164289,164349,164352,164356,164820,164823,164827,164854,164860,164921,164925,164955],[10,162976,162972],{"id":162977},"_5-函数基础",[14,162979,162981],{"id":162980},"_51-为什么需要函数","5.1 为什么需要函数",[19,162983,162984],{},"函数用于封装一段可以重复使用的代码。",[19,162986,162987],{},"不使用函数的问题：",[650,162989,162990,162993,162996,162999],{},[653,162991,162992],{},"重复代码多。",[653,162994,162995],{},"修改逻辑时容易漏改。",[653,162997,162998],{},"主流程不清晰。",[653,163000,163001],{},"程序越写越长，难以维护。",[19,163003,163004],{},"使用函数后的好处：",[650,163006,163007,163010,163013,163016],{},[653,163008,163009],{},"提高复用性。",[653,163011,163012],{},"提高可读性。",[653,163014,163015],{},"便于调试。",[653,163017,163018],{},"便于分工。",[14,163020,163022],{"id":163021},"_52-函数定义","5.2 函数定义",[19,163024,7564],{},[26,163026,163028],{"className":28,"code":163027,"language":30,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,163029,163030,163039],{"__ignoreMap":31},[36,163031,163032,163034,163037],{"class":38,"line":39},[36,163033,76],{"class":46},[36,163035,163036],{"class":79}," 函数名",[36,163038,34306],{"class":42},[36,163040,163041],{"class":38,"line":54},[36,163042,163043],{"class":42},"    函数体\n",[19,163045,17510],{},[26,163047,163049],{"className":28,"code":163048,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,163050,163051,163060,163070,163080,163084,163088],{"__ignoreMap":31},[36,163052,163053,163055,163058],{"class":38,"line":39},[36,163054,76],{"class":46},[36,163056,163057],{"class":79}," say_hello",[36,163059,34306],{"class":42},[36,163061,163062,163064,163066,163068],{"class":38,"line":54},[36,163063,89],{"class":62},[36,163065,92],{"class":42},[36,163067,8226],{"class":50},[36,163069,123],{"class":42},[36,163071,163072,163074,163076,163078],{"class":38,"line":66},[36,163073,89],{"class":62},[36,163075,92],{"class":42},[36,163077,148975],{"class":50},[36,163079,123],{"class":42},[36,163081,163082],{"class":38,"line":73},[36,163083,70],{"emptyLinePlaceholder":69},[36,163085,163086],{"class":38,"line":86},[36,163087,70],{"emptyLinePlaceholder":69},[36,163089,163090],{"class":38,"line":126},[36,163091,163092],{"class":42},"say_hello()\n",[19,163094,11405],{},[650,163096,163097,163100,163103,163106],{},[653,163098,163099],{},"函数必须先定义，再调用。",[653,163101,163102],{},"函数名遵循变量命名规则。",[653,163104,163105],{},"函数体需要缩进。",[653,163107,163108],{},"函数不调用就不会执行。",[14,163110,163112],{"id":163111},"_53-函数调用","5.3 函数调用",[26,163114,163116],{"className":28,"code":163115,"language":30,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,163117,163118,163127,163138,163149,163160,163170,163174,163178,163183],{"__ignoreMap":31},[36,163119,163120,163122,163125],{"class":38,"line":39},[36,163121,76],{"class":46},[36,163123,163124],{"class":79}," print_menu",[36,163126,34306],{"class":42},[36,163128,163129,163131,163133,163136],{"class":38,"line":54},[36,163130,89],{"class":62},[36,163132,92],{"class":42},[36,163134,163135],{"class":50},"\"1. 查询\"",[36,163137,123],{"class":42},[36,163139,163140,163142,163144,163147],{"class":38,"line":66},[36,163141,89],{"class":62},[36,163143,92],{"class":42},[36,163145,163146],{"class":50},"\"2. 添加\"",[36,163148,123],{"class":42},[36,163150,163151,163153,163155,163158],{"class":38,"line":73},[36,163152,89],{"class":62},[36,163154,92],{"class":42},[36,163156,163157],{"class":50},"\"3. 删除\"",[36,163159,123],{"class":42},[36,163161,163162,163164,163166,163168],{"class":38,"line":86},[36,163163,89],{"class":62},[36,163165,92],{"class":42},[36,163167,162742],{"class":50},[36,163169,123],{"class":42},[36,163171,163172],{"class":38,"line":126},[36,163173,70],{"emptyLinePlaceholder":69},[36,163175,163176],{"class":38,"line":131},[36,163177,70],{"emptyLinePlaceholder":69},[36,163179,163180],{"class":38,"line":225},[36,163181,163182],{"class":42},"print_menu()\n",[36,163184,163185],{"class":38,"line":235},[36,163186,163182],{"class":42},[19,163188,163189],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163191,163193],{"id":163192},"_54-参数","5.4 参数",[19,163195,163196],{},"参数用于向函数传递数据。",[26,163198,163200],{"className":28,"code":163199,"language":30,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,163201,163202,163211,163231,163235,163239,163248],{"__ignoreMap":31},[36,163203,163204,163206,163208],{"class":38,"line":39},[36,163205,76],{"class":46},[36,163207,163057],{"class":79},[36,163209,163210],{"class":42},"(name):\n",[36,163212,163213,163215,163217,163219,163221,163223,163225,163227,163229],{"class":38,"line":54},[36,163214,89],{"class":62},[36,163216,92],{"class":42},[36,163218,95],{"class":46},[36,163220,159115],{"class":50},[36,163222,101],{"class":62},[36,163224,104],{"class":42},[36,163226,107],{"class":62},[36,163228,604],{"class":50},[36,163230,123],{"class":42},[36,163232,163233],{"class":38,"line":66},[36,163234,70],{"emptyLinePlaceholder":69},[36,163236,163237],{"class":38,"line":73},[36,163238,70],{"emptyLinePlaceholder":69},[36,163240,163241,163244,163246],{"class":38,"line":86},[36,163242,163243],{"class":42},"say_hello(",[36,163245,627],{"class":50},[36,163247,123],{"class":42},[36,163249,163250,163252,163254],{"class":38,"line":126},[36,163251,163243],{"class":42},[36,163253,1716],{"class":50},[36,163255,123],{"class":42},[19,163257,163258,163260,163261,163263],{},[33,163259,104],{}," 是形参，",[33,163262,627],{}," 是实参。",[19,163265,163266],{},"多个参数：",[26,163268,163270],{"className":28,"code":163269,"language":30,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,163271,163272,163280,163293,163299,163303,163307],{"__ignoreMap":31},[36,163273,163274,163276,163278],{"class":38,"line":39},[36,163275,76],{"class":46},[36,163277,1872],{"class":79},[36,163279,1875],{"class":42},[36,163281,163282,163285,163287,163289,163291],{"class":38,"line":54},[36,163283,163284],{"class":42},"    result ",[36,163286,47],{"class":46},[36,163288,1882],{"class":42},[36,163290,1885],{"class":46},[36,163292,1888],{"class":42},[36,163294,163295,163297],{"class":38,"line":66},[36,163296,89],{"class":62},[36,163298,78930],{"class":42},[36,163300,163301],{"class":38,"line":73},[36,163302,70],{"emptyLinePlaceholder":69},[36,163304,163305],{"class":38,"line":86},[36,163306,70],{"emptyLinePlaceholder":69},[36,163308,163309,163312,163314,163316,163318],{"class":38,"line":126},[36,163310,163311],{"class":42},"add(",[36,163313,3002],{"class":62},[36,163315,630],{"class":42},[36,163317,3254],{"class":62},[36,163319,123],{"class":42},[19,163321,163322],{},"调用时参数数量必须匹配。",[14,163324,163326],{"id":163325},"_55-返回值","5.5 返回值",[19,163328,163329,163331],{},[33,163330,19419],{}," 用于把函数内部的结果返回给调用者。",[26,163333,163335],{"className":28,"code":163334,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,163336,163337,163345,163355,163359,163363,163381],{"__ignoreMap":31},[36,163338,163339,163341,163343],{"class":38,"line":39},[36,163340,76],{"class":46},[36,163342,1872],{"class":79},[36,163344,1875],{"class":42},[36,163346,163347,163349,163351,163353],{"class":38,"line":54},[36,163348,6474],{"class":46},[36,163350,1882],{"class":42},[36,163352,1885],{"class":46},[36,163354,1888],{"class":42},[36,163356,163357],{"class":38,"line":66},[36,163358,70],{"emptyLinePlaceholder":69},[36,163360,163361],{"class":38,"line":73},[36,163362,70],{"emptyLinePlaceholder":69},[36,163364,163365,163368,163370,163373,163375,163377,163379],{"class":38,"line":86},[36,163366,163367],{"class":42},"result ",[36,163369,47],{"class":46},[36,163371,163372],{"class":42}," add(",[36,163374,3002],{"class":62},[36,163376,630],{"class":42},[36,163378,3254],{"class":62},[36,163380,123],{"class":42},[36,163382,163383,163385],{"class":38,"line":126},[36,163384,371],{"class":62},[36,163386,78930],{"class":42},[19,163388,163389,163390,163392,163393,676],{},"如果函数没有写 ",[33,163391,19419],{},"，默认返回 ",[33,163394,98027],{},[26,163396,163398],{"className":28,"code":163397,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,163399,163400,163408,163418,163422,163426,163435],{"__ignoreMap":31},[36,163401,163402,163404,163406],{"class":38,"line":39},[36,163403,76],{"class":46},[36,163405,163057],{"class":79},[36,163407,34306],{"class":42},[36,163409,163410,163412,163414,163416],{"class":38,"line":54},[36,163411,89],{"class":62},[36,163413,92],{"class":42},[36,163415,8226],{"class":50},[36,163417,123],{"class":42},[36,163419,163420],{"class":38,"line":66},[36,163421,70],{"emptyLinePlaceholder":69},[36,163423,163424],{"class":38,"line":73},[36,163425,70],{"emptyLinePlaceholder":69},[36,163427,163428,163430,163432],{"class":38,"line":86},[36,163429,163367],{"class":42},[36,163431,47],{"class":46},[36,163433,163434],{"class":42}," say_hello()\n",[36,163436,163437,163439,163442],{"class":38,"line":126},[36,163438,371],{"class":62},[36,163440,163441],{"class":42},"(result)  ",[36,163443,163444],{"class":2621},"# None\n",[14,163446,163448],{"id":163447},"_56-return的作用","5.6 return的作用",[19,163450,163451,163453],{},[33,163452,19419],{}," 有两个作用：",[650,163455,163456,163459],{},[653,163457,163458],{},"返回结果。",[653,163460,163461],{},"结束函数。",[26,163463,163465],{"className":28,"code":163464,"language":30,"meta":31,"style":31},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[33,163466,163467,163477,163489,163496,163500,163512,163519,163523,163530,163534,163538,163549],{"__ignoreMap":31},[36,163468,163469,163471,163474],{"class":38,"line":39},[36,163470,76],{"class":46},[36,163472,163473],{"class":79}," check_age",[36,163475,163476],{"class":42},"(age):\n",[36,163478,163479,163481,163483,163485,163487],{"class":38,"line":54},[36,163480,5486],{"class":46},[36,163482,18080],{"class":42},[36,163484,3463],{"class":46},[36,163486,899],{"class":62},[36,163488,153],{"class":42},[36,163490,163491,163493],{"class":38,"line":66},[36,163492,736],{"class":46},[36,163494,163495],{"class":50}," \"年龄不合法\"\n",[36,163497,163498],{"class":38,"line":73},[36,163499,70],{"emptyLinePlaceholder":69},[36,163501,163502,163504,163506,163508,163510],{"class":38,"line":86},[36,163503,5486],{"class":46},[36,163505,18080],{"class":42},[36,163507,2127],{"class":46},[36,163509,158346],{"class":62},[36,163511,153],{"class":42},[36,163513,163514,163516],{"class":38,"line":126},[36,163515,736],{"class":46},[36,163517,163518],{"class":50}," \"成年人\"\n",[36,163520,163521],{"class":38,"line":131},[36,163522,70],{"emptyLinePlaceholder":69},[36,163524,163525,163527],{"class":38,"line":225},[36,163526,6474],{"class":46},[36,163528,163529],{"class":50}," \"未成年人\"\n",[36,163531,163532],{"class":38,"line":235},[36,163533,70],{"emptyLinePlaceholder":69},[36,163535,163536],{"class":38,"line":377},[36,163537,70],{"emptyLinePlaceholder":69},[36,163539,163540,163542,163545,163547],{"class":38,"line":617},[36,163541,371],{"class":62},[36,163543,163544],{"class":42},"(check_age(",[36,163546,3254],{"class":62},[36,163548,1914],{"class":42},[36,163550,163551,163553,163555,163557,163559],{"class":38,"line":643},[36,163552,371],{"class":62},[36,163554,163544],{"class":42},[36,163556,3087],{"class":46},[36,163558,1906],{"class":62},[36,163560,1914],{"class":42},[19,163562,163563,163564,163566],{},"函数执行到 ",[33,163565,19419],{}," 后，后面的代码不会继续执行。",[14,163568,163570],{"id":163569},"_57-none","5.7 None",[19,163572,163573,163575],{},[33,163574,98027],{}," 表示空值或没有结果。",[19,163577,163578],{},"常见使用场景：",[650,163580,163581,163584,163587],{},[653,163582,163583],{},"函数没有返回值。",[653,163585,163586],{},"变量暂时没有具体值。",[653,163588,163589],{},"表示查询不到结果。",[26,163591,163593],{"className":28,"code":163592,"language":30,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,163594,163595,163603,163607,163620],{"__ignoreMap":31},[36,163596,163597,163599,163601],{"class":38,"line":39},[36,163598,163367],{"class":42},[36,163600,47],{"class":46},[36,163602,154233],{"class":62},[36,163604,163605],{"class":38,"line":54},[36,163606,70],{"emptyLinePlaceholder":69},[36,163608,163609,163611,163614,163616,163618],{"class":38,"line":66},[36,163610,3948],{"class":46},[36,163612,163613],{"class":42}," result ",[36,163615,41276],{"class":46},[36,163617,41282],{"class":62},[36,163619,153],{"class":42},[36,163621,163622,163624,163626,163629],{"class":38,"line":73},[36,163623,89],{"class":62},[36,163625,92],{"class":42},[36,163627,163628],{"class":50},"\"没有数据\"",[36,163630,123],{"class":42},[19,163632,163633,163634,163636,163637,163640,163641,676],{},"判断 ",[33,163635,98027],{}," 推荐使用 ",[33,163638,163639],{},"is None","，不要写成 ",[33,163642,163643],{},"== None",[14,163645,163647],{"id":163646},"_58-函数文档字符串","5.8 函数文档字符串",[19,163649,163650],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,163652,163654],{"className":28,"code":163653,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,163655,163656,163666,163671],{"__ignoreMap":31},[36,163657,163658,163660,163663],{"class":38,"line":39},[36,163659,76],{"class":46},[36,163661,163662],{"class":79}," calculate_bmi",[36,163664,163665],{"class":42},"(weight, height):\n",[36,163667,163668],{"class":38,"line":54},[36,163669,163670],{"class":50},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,163672,163673,163675,163678,163680,163683,163685],{"class":38,"line":66},[36,163674,6474],{"class":46},[36,163676,163677],{"class":42}," weight ",[36,163679,3139],{"class":46},[36,163681,163682],{"class":42}," height ",[36,163684,13040],{"class":46},[36,163686,50072],{"class":62},[19,163688,163689],{},"查看说明：",[26,163691,163693],{"className":28,"code":163692,"language":30,"meta":31,"style":31},"help(calculate_bmi)\n",[33,163694,163695],{"__ignoreMap":31},[36,163696,163697,163700],{"class":38,"line":39},[36,163698,163699],{"class":62},"help",[36,163701,163702],{"class":42},"(calculate_bmi)\n",[19,163704,163705],{},"较完整的写法：",[26,163707,163709],{"className":28,"code":163708,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[33,163710,163711,163719,163724,163729,163733,163738,163743,163748,163752],{"__ignoreMap":31},[36,163712,163713,163715,163717],{"class":38,"line":39},[36,163714,76],{"class":46},[36,163716,163662],{"class":79},[36,163718,163665],{"class":42},[36,163720,163721],{"class":38,"line":54},[36,163722,163723],{"class":50},"    \"\"\"\n",[36,163725,163726],{"class":38,"line":66},[36,163727,163728],{"class":50},"    计算BMI。\n",[36,163730,163731],{"class":38,"line":73},[36,163732,70],{"emptyLinePlaceholder":69},[36,163734,163735],{"class":38,"line":86},[36,163736,163737],{"class":50},"    :param weight: 体重，单位kg\n",[36,163739,163740],{"class":38,"line":126},[36,163741,163742],{"class":50},"    :param height: 身高，单位m\n",[36,163744,163745],{"class":38,"line":131},[36,163746,163747],{"class":50},"    :return: BMI数值\n",[36,163749,163750],{"class":38,"line":225},[36,163751,163723],{"class":50},[36,163753,163754,163756,163758,163760,163762,163764],{"class":38,"line":235},[36,163755,6474],{"class":46},[36,163757,163677],{"class":42},[36,163759,3139],{"class":46},[36,163761,163682],{"class":42},[36,163763,13040],{"class":46},[36,163765,50072],{"class":62},[14,163767,163769],{"id":163768},"_59-变量作用域","5.9 变量作用域",[1752,163771,163773],{"id":163772},"_591-局部变量","5.9.1 局部变量",[19,163775,163776],{},"在函数内部定义的变量，只能在函数内部使用。",[26,163778,163780],{"className":28,"code":163779,"language":30,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,163781,163782,163791,163799,163805,163809,163813,163818],{"__ignoreMap":31},[36,163783,163784,163786,163789],{"class":38,"line":39},[36,163785,76],{"class":46},[36,163787,163788],{"class":79}," test",[36,163790,34306],{"class":42},[36,163792,163793,163795,163797],{"class":38,"line":54},[36,163794,47942],{"class":42},[36,163796,47],{"class":46},[36,163798,60776],{"class":62},[36,163800,163801,163803],{"class":38,"line":66},[36,163802,89],{"class":62},[36,163804,2579],{"class":42},[36,163806,163807],{"class":38,"line":73},[36,163808,70],{"emptyLinePlaceholder":69},[36,163810,163811],{"class":38,"line":86},[36,163812,70],{"emptyLinePlaceholder":69},[36,163814,163815],{"class":38,"line":126},[36,163816,163817],{"class":42},"test()\n",[36,163819,163820,163822,163825],{"class":38,"line":131},[36,163821,371],{"class":62},[36,163823,163824],{"class":42},"(num)  ",[36,163826,163827],{"class":2621},"# 报错\n",[1752,163829,163831],{"id":163830},"_592-全局变量","5.9.2 全局变量",[19,163833,163834],{},"在函数外部定义的变量，可以在函数内部读取。",[26,163836,163838],{"className":28,"code":163837,"language":30,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,163839,163840,163848,163852,163856,163864,163870,163874,163878],{"__ignoreMap":31},[36,163841,163842,163844,163846],{"class":38,"line":39},[36,163843,43],{"class":42},[36,163845,47],{"class":46},[36,163847,51],{"class":50},[36,163849,163850],{"class":38,"line":54},[36,163851,70],{"emptyLinePlaceholder":69},[36,163853,163854],{"class":38,"line":66},[36,163855,70],{"emptyLinePlaceholder":69},[36,163857,163858,163860,163862],{"class":38,"line":73},[36,163859,76],{"class":46},[36,163861,163057],{"class":79},[36,163863,34306],{"class":42},[36,163865,163866,163868],{"class":38,"line":86},[36,163867,89],{"class":62},[36,163869,1440],{"class":42},[36,163871,163872],{"class":38,"line":126},[36,163873,70],{"emptyLinePlaceholder":69},[36,163875,163876],{"class":38,"line":131},[36,163877,70],{"emptyLinePlaceholder":69},[36,163879,163880],{"class":38,"line":225},[36,163881,163092],{"class":42},[19,163883,163884,163885,676],{},"如果要在函数内部修改全局变量，需要 ",[33,163886,163887],{},"global",[26,163889,163891],{"className":28,"code":163890,"language":30,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,163892,163893,163901,163905,163909,163918,163926,163934,163938,163942,163947],{"__ignoreMap":31},[36,163894,163895,163897,163899],{"class":38,"line":39},[36,163896,149027],{"class":42},[36,163898,47],{"class":46},[36,163900,49682],{"class":62},[36,163902,163903],{"class":38,"line":54},[36,163904,70],{"emptyLinePlaceholder":69},[36,163906,163907],{"class":38,"line":66},[36,163908,70],{"emptyLinePlaceholder":69},[36,163910,163911,163913,163916],{"class":38,"line":73},[36,163912,76],{"class":46},[36,163914,163915],{"class":79}," add_count",[36,163917,34306],{"class":42},[36,163919,163920,163923],{"class":38,"line":86},[36,163921,163922],{"class":46},"    global",[36,163924,163925],{"class":42}," count\n",[36,163927,163928,163930,163932],{"class":38,"line":126},[36,163929,161494],{"class":42},[36,163931,928],{"class":46},[36,163933,58047],{"class":62},[36,163935,163936],{"class":38,"line":131},[36,163937,70],{"emptyLinePlaceholder":69},[36,163939,163940],{"class":38,"line":225},[36,163941,70],{"emptyLinePlaceholder":69},[36,163943,163944],{"class":38,"line":235},[36,163945,163946],{"class":42},"add_count()\n",[36,163948,163949,163951],{"class":38,"line":377},[36,163950,371],{"class":62},[36,163952,163953],{"class":42},"(count)\n",[19,163955,163956],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163958,163960],{"id":163959},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163962,163963],{},"一个函数中可以调用另一个函数。",[26,163965,163967],{"className":28,"code":163966,"language":30,"meta":31,"style":31},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[33,163968,163969,163978,163992,163996,164000,164009,164014,164034,164055,164059,164063,164067],{"__ignoreMap":31},[36,163970,163971,163973,163976],{"class":38,"line":39},[36,163972,76],{"class":46},[36,163974,163975],{"class":79}," print_line",[36,163977,34306],{"class":42},[36,163979,163980,163982,163984,163986,163988,163990],{"class":38,"line":54},[36,163981,89],{"class":62},[36,163983,92],{"class":42},[36,163985,34835],{"class":50},[36,163987,8899],{"class":46},[36,163989,81010],{"class":62},[36,163991,123],{"class":42},[36,163993,163994],{"class":38,"line":66},[36,163995,70],{"emptyLinePlaceholder":69},[36,163997,163998],{"class":38,"line":73},[36,163999,70],{"emptyLinePlaceholder":69},[36,164001,164002,164004,164007],{"class":38,"line":86},[36,164003,76],{"class":46},[36,164005,164006],{"class":79}," print_info",[36,164008,83],{"class":42},[36,164010,164011],{"class":38,"line":126},[36,164012,164013],{"class":42},"    print_line()\n",[36,164015,164016,164018,164020,164022,164024,164026,164028,164030,164032],{"class":38,"line":131},[36,164017,89],{"class":62},[36,164019,92],{"class":42},[36,164021,95],{"class":46},[36,164023,158743],{"class":50},[36,164025,101],{"class":62},[36,164027,104],{"class":42},[36,164029,107],{"class":62},[36,164031,604],{"class":50},[36,164033,123],{"class":42},[36,164035,164036,164038,164040,164042,164045,164047,164049,164051,164053],{"class":38,"line":225},[36,164037,89],{"class":62},[36,164039,92],{"class":42},[36,164041,95],{"class":46},[36,164043,164044],{"class":50},"\"年龄:",[36,164046,101],{"class":62},[36,164048,115],{"class":42},[36,164050,107],{"class":62},[36,164052,604],{"class":50},[36,164054,123],{"class":42},[36,164056,164057],{"class":38,"line":235},[36,164058,164013],{"class":42},[36,164060,164061],{"class":38,"line":377},[36,164062,70],{"emptyLinePlaceholder":69},[36,164064,164065],{"class":38,"line":617},[36,164066,70],{"emptyLinePlaceholder":69},[36,164068,164069,164072,164074,164076,164078],{"class":38,"line":643},[36,164070,164071],{"class":42},"print_info(",[36,164073,627],{"class":50},[36,164075,630],{"class":42},[36,164077,633],{"class":62},[36,164079,123],{"class":42},[19,164081,164082],{},"这种方式可以把小功能组合成大功能。",[14,164084,164086],{"id":164085},"_511-参数检查","5.11 参数检查",[19,164088,164089],{},"函数内部可以检查参数是否合法。",[26,164091,164093],{"className":28,"code":164092,"language":30,"meta":31,"style":31},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[33,164094,164095,164104,164116,164122,164132,164136,164140,164157,164161,164173,164184,164190],{"__ignoreMap":31},[36,164096,164097,164099,164102],{"class":38,"line":39},[36,164098,76],{"class":46},[36,164100,164101],{"class":79}," divide",[36,164103,1875],{"class":42},[36,164105,164106,164108,164110,164112,164114],{"class":38,"line":54},[36,164107,5486],{"class":46},[36,164109,13260],{"class":42},[36,164111,5334],{"class":46},[36,164113,899],{"class":62},[36,164115,153],{"class":42},[36,164117,164118,164120],{"class":38,"line":66},[36,164119,736],{"class":46},[36,164121,154233],{"class":62},[36,164123,164124,164126,164128,164130],{"class":38,"line":73},[36,164125,6474],{"class":46},[36,164127,1882],{"class":42},[36,164129,3139],{"class":46},[36,164131,1888],{"class":42},[36,164133,164134],{"class":38,"line":86},[36,164135,70],{"emptyLinePlaceholder":69},[36,164137,164138],{"class":38,"line":126},[36,164139,70],{"emptyLinePlaceholder":69},[36,164141,164142,164144,164146,164149,164151,164153,164155],{"class":38,"line":131},[36,164143,163367],{"class":42},[36,164145,47],{"class":46},[36,164147,164148],{"class":42}," divide(",[36,164150,3002],{"class":62},[36,164152,630],{"class":42},[36,164154,2751],{"class":62},[36,164156,123],{"class":42},[36,164158,164159],{"class":38,"line":225},[36,164160,70],{"emptyLinePlaceholder":69},[36,164162,164163,164165,164167,164169,164171],{"class":38,"line":235},[36,164164,3948],{"class":46},[36,164166,163613],{"class":42},[36,164168,41276],{"class":46},[36,164170,41282],{"class":62},[36,164172,153],{"class":42},[36,164174,164175,164177,164179,164182],{"class":38,"line":377},[36,164176,89],{"class":62},[36,164178,92],{"class":42},[36,164180,164181],{"class":50},"\"除数不能为0\"",[36,164183,123],{"class":42},[36,164185,164186,164188],{"class":38,"line":617},[36,164187,4105],{"class":46},[36,164189,153],{"class":42},[36,164191,164192,164194],{"class":38,"line":643},[36,164193,89],{"class":62},[36,164195,78930],{"class":42},[14,164197,164199],{"id":164198},"_512-类型提示","5.12 类型提示",[19,164201,164202],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,164204,164206],{"className":28,"code":164205,"language":30,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,164207,164208,164231],{"__ignoreMap":31},[36,164209,164210,164212,164214,164217,164219,164222,164224,164227,164229],{"class":38,"line":39},[36,164211,76],{"class":46},[36,164213,1872],{"class":79},[36,164215,164216],{"class":42},"(a: ",[36,164218,2570],{"class":62},[36,164220,164221],{"class":42},", b: ",[36,164223,2570],{"class":62},[36,164225,164226],{"class":42},") -> ",[36,164228,2570],{"class":62},[36,164230,153],{"class":42},[36,164232,164233,164235,164237,164239],{"class":38,"line":54},[36,164234,6474],{"class":46},[36,164236,1882],{"class":42},[36,164238,1885],{"class":46},[36,164240,1888],{"class":42},[19,164242,164243],{},"字符串参数：",[26,164245,164247],{"className":28,"code":164246,"language":30,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,164248,164249,164266],{"__ignoreMap":31},[36,164250,164251,164253,164255,164258,164260,164262,164264],{"class":38,"line":39},[36,164252,76],{"class":46},[36,164254,163057],{"class":79},[36,164256,164257],{"class":42},"(name: ",[36,164259,669],{"class":62},[36,164261,164226],{"class":42},[36,164263,98027],{"class":62},[36,164265,153],{"class":42},[36,164267,164268,164270,164272,164274,164276,164278,164280,164282,164284],{"class":38,"line":54},[36,164269,89],{"class":62},[36,164271,92],{"class":42},[36,164273,95],{"class":46},[36,164275,159115],{"class":50},[36,164277,101],{"class":62},[36,164279,104],{"class":42},[36,164281,107],{"class":62},[36,164283,604],{"class":50},[36,164285,123],{"class":42},[19,164287,164288],{},"列表参数：",[26,164290,164292],{"className":28,"code":164291,"language":30,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,164293,164294,164313,164321,164333,164342],{"__ignoreMap":31},[36,164295,164296,164298,164301,164304,164306,164309,164311],{"class":38,"line":39},[36,164297,76],{"class":46},[36,164299,164300],{"class":79}," get_total",[36,164302,164303],{"class":42},"(numbers: list[",[36,164305,2570],{"class":62},[36,164307,164308],{"class":42},"]) -> ",[36,164310,2570],{"class":62},[36,164312,153],{"class":42},[36,164314,164315,164317,164319],{"class":38,"line":54},[36,164316,161368],{"class":42},[36,164318,47],{"class":46},[36,164320,49682],{"class":62},[36,164322,164323,164325,164328,164330],{"class":38,"line":66},[36,164324,5586],{"class":46},[36,164326,164327],{"class":42}," number ",[36,164329,28413],{"class":46},[36,164331,164332],{"class":42}," numbers:\n",[36,164334,164335,164337,164339],{"class":38,"line":73},[36,164336,162043],{"class":42},[36,164338,928],{"class":46},[36,164340,164341],{"class":42}," number\n",[36,164343,164344,164346],{"class":38,"line":86},[36,164345,6474],{"class":46},[36,164347,164348],{"class":42}," total\n",[19,164350,164351],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164353,164355],{"id":164354},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,164357,164359],{"className":28,"code":164358,"language":30,"meta":31,"style":31},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[33,164360,164361,164371,164375,164379,164387,164398,164408,164418,164428,164438,164442,164446,164455,164477,164481,164485,164494,164500,164520,164532,164543,164547,164556,164567,164572,164576,164580,164589,164595,164614,164626,164636,164640,164651,164661,164665,164673,164684,164688,164692,164696,164704,164709,164723,164727,164739,164744,164756,164761,164773,164778,164790,164800,164804,164810],{"__ignoreMap":31},[36,164362,164363,164366,164368],{"class":38,"line":39},[36,164364,164365],{"class":42},"balance ",[36,164367,47],{"class":46},[36,164369,164370],{"class":62}," 1000\n",[36,164372,164373],{"class":38,"line":54},[36,164374,70],{"emptyLinePlaceholder":69},[36,164376,164377],{"class":38,"line":66},[36,164378,70],{"emptyLinePlaceholder":69},[36,164380,164381,164383,164385],{"class":38,"line":73},[36,164382,76],{"class":46},[36,164384,154094],{"class":79},[36,164386,34306],{"class":42},[36,164388,164389,164391,164393,164396],{"class":38,"line":86},[36,164390,89],{"class":62},[36,164392,92],{"class":42},[36,164394,164395],{"class":50},"\"====== ATM ======\"",[36,164397,123],{"class":42},[36,164399,164400,164402,164404,164406],{"class":38,"line":126},[36,164401,89],{"class":62},[36,164403,92],{"class":42},[36,164405,162709],{"class":50},[36,164407,123],{"class":42},[36,164409,164410,164412,164414,164416],{"class":38,"line":131},[36,164411,89],{"class":62},[36,164413,92],{"class":42},[36,164415,162720],{"class":50},[36,164417,123],{"class":42},[36,164419,164420,164422,164424,164426],{"class":38,"line":225},[36,164421,89],{"class":62},[36,164423,92],{"class":42},[36,164425,162731],{"class":50},[36,164427,123],{"class":42},[36,164429,164430,164432,164434,164436],{"class":38,"line":235},[36,164431,89],{"class":62},[36,164433,92],{"class":42},[36,164435,162742],{"class":50},[36,164437,123],{"class":42},[36,164439,164440],{"class":38,"line":377},[36,164441,70],{"emptyLinePlaceholder":69},[36,164443,164444],{"class":38,"line":617},[36,164445,70],{"emptyLinePlaceholder":69},[36,164447,164448,164450,164453],{"class":38,"line":643},[36,164449,76],{"class":46},[36,164451,164452],{"class":79}," show_balance",[36,164454,34306],{"class":42},[36,164456,164457,164459,164461,164463,164466,164468,164471,164473,164475],{"class":38,"line":921},[36,164458,89],{"class":62},[36,164460,92],{"class":42},[36,164462,95],{"class":46},[36,164464,164465],{"class":50},"\"当前余额:",[36,164467,101],{"class":62},[36,164469,164470],{"class":42},"balance",[36,164472,107],{"class":62},[36,164474,159073],{"class":50},[36,164476,123],{"class":42},[36,164478,164479],{"class":38,"line":934},[36,164480,70],{"emptyLinePlaceholder":69},[36,164482,164483],{"class":38,"line":939},[36,164484,70],{"emptyLinePlaceholder":69},[36,164486,164487,164489,164492],{"class":38,"line":949},[36,164488,76],{"class":46},[36,164490,164491],{"class":79}," save_money",[36,164493,34306],{"class":42},[36,164495,164496,164498],{"class":38,"line":962},[36,164497,163922],{"class":46},[36,164499,848],{"class":42},[36,164501,164502,164505,164507,164509,164511,164513,164515,164518],{"class":38,"line":974},[36,164503,164504],{"class":42},"    money ",[36,164506,47],{"class":46},[36,164508,112136],{"class":62},[36,164510,92],{"class":42},[36,164512,56169],{"class":62},[36,164514,92],{"class":42},[36,164516,164517],{"class":50},"\"请输入存款金额:\"",[36,164519,1914],{"class":42},[36,164521,164522,164524,164526,164528,164530],{"class":38,"line":979},[36,164523,5486],{"class":46},[36,164525,893],{"class":42},[36,164527,896],{"class":46},[36,164529,899],{"class":62},[36,164531,153],{"class":42},[36,164533,164534,164536,164538,164541],{"class":38,"line":994},[36,164535,168],{"class":62},[36,164537,92],{"class":42},[36,164539,164540],{"class":50},"\"金额必须大于0\"",[36,164542,123],{"class":42},[36,164544,164545],{"class":38,"line":1006},[36,164546,154422],{"class":46},[36,164548,164549,164552,164554],{"class":38,"line":1011},[36,164550,164551],{"class":42},"    balance ",[36,164553,928],{"class":46},[36,164555,931],{"class":42},[36,164557,164558,164560,164562,164565],{"class":38,"line":1023},[36,164559,89],{"class":62},[36,164561,92],{"class":42},[36,164563,164564],{"class":50},"\"存款成功\"",[36,164566,123],{"class":42},[36,164568,164569],{"class":38,"line":1028},[36,164570,164571],{"class":42},"    show_balance()\n",[36,164573,164574],{"class":38,"line":1033},[36,164575,70],{"emptyLinePlaceholder":69},[36,164577,164578],{"class":38,"line":1053},[36,164579,70],{"emptyLinePlaceholder":69},[36,164581,164582,164584,164587],{"class":38,"line":1064},[36,164583,76],{"class":46},[36,164585,164586],{"class":79}," withdraw_money",[36,164588,34306],{"class":42},[36,164590,164591,164593],{"class":38,"line":1075},[36,164592,163922],{"class":46},[36,164594,848],{"class":42},[36,164596,164597,164599,164601,164603,164605,164607,164609,164612],{"class":38,"line":2291},[36,164598,164504],{"class":42},[36,164600,47],{"class":46},[36,164602,112136],{"class":62},[36,164604,92],{"class":42},[36,164606,56169],{"class":62},[36,164608,92],{"class":42},[36,164610,164611],{"class":50},"\"请输入取款金额:\"",[36,164613,1914],{"class":42},[36,164615,164616,164618,164620,164622,164624],{"class":38,"line":2329},[36,164617,5486],{"class":46},[36,164619,893],{"class":42},[36,164621,896],{"class":46},[36,164623,899],{"class":62},[36,164625,153],{"class":42},[36,164627,164628,164630,164632,164634],{"class":38,"line":2334},[36,164629,168],{"class":62},[36,164631,92],{"class":42},[36,164633,164540],{"class":50},[36,164635,123],{"class":42},[36,164637,164638],{"class":38,"line":2339},[36,164639,154422],{"class":46},[36,164641,164642,164644,164646,164648],{"class":38,"line":2365},[36,164643,5486],{"class":46},[36,164645,893],{"class":42},[36,164647,986],{"class":46},[36,164649,164650],{"class":42}," balance:\n",[36,164652,164653,164655,164657,164659],{"class":38,"line":2373},[36,164654,168],{"class":62},[36,164656,92],{"class":42},[36,164658,1001],{"class":50},[36,164660,123],{"class":42},[36,164662,164663],{"class":38,"line":5001},[36,164664,154422],{"class":46},[36,164666,164667,164669,164671],{"class":38,"line":5006},[36,164668,164551],{"class":42},[36,164670,1018],{"class":46},[36,164672,931],{"class":42},[36,164674,164675,164677,164679,164682],{"class":38,"line":10328},[36,164676,89],{"class":62},[36,164678,92],{"class":42},[36,164680,164681],{"class":50},"\"取款成功\"",[36,164683,123],{"class":42},[36,164685,164686],{"class":38,"line":10352},[36,164687,164571],{"class":42},[36,164689,164690],{"class":38,"line":10357},[36,164691,70],{"emptyLinePlaceholder":69},[36,164693,164694],{"class":38,"line":10363},[36,164695,70],{"emptyLinePlaceholder":69},[36,164697,164698,164700,164702],{"class":38,"line":10390},[36,164699,111002],{"class":46},[36,164701,97633],{"class":62},[36,164703,153],{"class":42},[36,164705,164706],{"class":38,"line":10395},[36,164707,164708],{"class":42},"    show_menu()\n",[36,164710,164711,164713,164715,164717,164719,164721],{"class":38,"line":10401},[36,164712,162753],{"class":42},[36,164714,47],{"class":46},[36,164716,62953],{"class":62},[36,164718,92],{"class":42},[36,164720,155134],{"class":50},[36,164722,123],{"class":42},[36,164724,164725],{"class":38,"line":10413},[36,164726,70],{"emptyLinePlaceholder":69},[36,164728,164729,164731,164733,164735,164737],{"class":38,"line":10425},[36,164730,5486],{"class":46},[36,164732,155147],{"class":42},[36,164734,5334],{"class":46},[36,164736,155152],{"class":50},[36,164738,153],{"class":42},[36,164740,164741],{"class":38,"line":10437},[36,164742,164743],{"class":42},"        show_balance()\n",[36,164745,164746,164748,164750,164752,164754],{"class":38,"line":12095},[36,164747,41642],{"class":46},[36,164749,155147],{"class":42},[36,164751,5334],{"class":46},[36,164753,155171],{"class":50},[36,164755,153],{"class":42},[36,164757,164758],{"class":38,"line":12120},[36,164759,164760],{"class":42},"        save_money()\n",[36,164762,164763,164765,164767,164769,164771],{"class":38,"line":12143},[36,164764,41642],{"class":46},[36,164766,155147],{"class":42},[36,164768,5334],{"class":46},[36,164770,155189],{"class":50},[36,164772,153],{"class":42},[36,164774,164775],{"class":38,"line":12167},[36,164776,164777],{"class":42},"        withdraw_money()\n",[36,164779,164780,164782,164784,164786,164788],{"class":38,"line":12172},[36,164781,41642],{"class":46},[36,164783,155147],{"class":42},[36,164785,5334],{"class":46},[36,164787,155243],{"class":50},[36,164789,153],{"class":42},[36,164791,164792,164794,164796,164798],{"class":38,"line":12177},[36,164793,168],{"class":62},[36,164795,92],{"class":42},[36,164797,155254],{"class":50},[36,164799,123],{"class":42},[36,164801,164802],{"class":38,"line":12182},[36,164803,33981],{"class":46},[36,164805,164806,164808],{"class":38,"line":12191},[36,164807,160083],{"class":46},[36,164809,153],{"class":42},[36,164811,164812,164814,164816,164818],{"class":38,"line":12196},[36,164813,168],{"class":62},[36,164815,92],{"class":42},[36,164817,155275],{"class":50},[36,164819,123],{"class":42},[19,164821,164822],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164824,164826],{"id":164825},"_514-易错点","5.14 易错点",[650,164828,164829,164832,164835,164840,164845,164848],{},[653,164830,164831],{},"函数定义后必须调用才会执行。",[653,164833,164834],{},"函数名后面有括号才是调用。",[653,164836,164837,164839],{},[33,164838,19419],{}," 后面的代码不会执行。",[653,164841,164842,164843,676],{},"没有返回值的函数默认返回 ",[33,164844,98027],{},[653,164846,164847],{},"局部变量不能在函数外部访问。",[653,164849,164850,164851,164853],{},"不要滥用 ",[33,164852,163887],{},"，更好的方式是让函数返回新值。",[19,164855,164856,164857,164859],{},"例如不用 ",[33,164858,163887],{}," 改写存款：",[26,164861,164863],{"className":28,"code":164862,"language":30,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,164864,164865,164874,164885,164889,164893,164901,164914],{"__ignoreMap":31},[36,164866,164867,164869,164871],{"class":38,"line":39},[36,164868,76],{"class":46},[36,164870,164491],{"class":79},[36,164872,164873],{"class":42},"(balance, money):\n",[36,164875,164876,164878,164881,164883],{"class":38,"line":54},[36,164877,6474],{"class":46},[36,164879,164880],{"class":42}," balance ",[36,164882,1885],{"class":46},[36,164884,931],{"class":42},[36,164886,164887],{"class":38,"line":66},[36,164888,70],{"emptyLinePlaceholder":69},[36,164890,164891],{"class":38,"line":73},[36,164892,70],{"emptyLinePlaceholder":69},[36,164894,164895,164897,164899],{"class":38,"line":86},[36,164896,164365],{"class":42},[36,164898,47],{"class":46},[36,164900,164370],{"class":62},[36,164902,164903,164905,164907,164910,164912],{"class":38,"line":126},[36,164904,164365],{"class":42},[36,164906,47],{"class":46},[36,164908,164909],{"class":42}," save_money(balance, ",[36,164911,1059],{"class":62},[36,164913,123],{"class":42},[36,164915,164916,164918],{"class":38,"line":131},[36,164917,371],{"class":62},[36,164919,164920],{"class":42},"(balance)\n",[14,164922,164924],{"id":164923},"_515-本章练习","5.15 本章练习",[650,164926,164927,164934,164940,164946,164952],{},[653,164928,164929,164930,164933],{},"定义函数 ",[33,164931,164932],{},"print_student(name, age)","，输出学生信息。",[653,164935,164929,164936,164939],{},[33,164937,164938],{},"get_max(a, b, c)","，返回三个数中的最大值。",[653,164941,164929,164942,164945],{},[33,164943,164944],{},"is_even(num)","，判断一个数是否为偶数。",[653,164947,164929,164948,164951],{},[33,164949,164950],{},"calculate_bmi(weight, height)","，返回 BMI。",[653,164953,164954],{},"把第 4 章的菜单程序拆分成多个函数。",[2467,164956,164957],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":164959},[164960,164961,164962,164963,164964,164965,164966,164967,164968,164972,164973,164974,164975,164976,164977],{"id":162980,"depth":54,"text":162981},{"id":163021,"depth":54,"text":163022},{"id":163111,"depth":54,"text":163112},{"id":163192,"depth":54,"text":163193},{"id":163325,"depth":54,"text":163326},{"id":163447,"depth":54,"text":163448},{"id":163569,"depth":54,"text":163570},{"id":163646,"depth":54,"text":163647},{"id":163768,"depth":54,"text":163769,"children":164969},[164970,164971],{"id":163772,"depth":66,"text":163773},{"id":163830,"depth":66,"text":163831},{"id":163959,"depth":54,"text":163960},{"id":164085,"depth":54,"text":164086},{"id":164198,"depth":54,"text":164199},{"id":164354,"depth":54,"text":164355},{"id":164825,"depth":54,"text":164826},{"id":164923,"depth":54,"text":164924},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162972,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164984,"title":164985,"body":164986,"description":2493,"extension":2494,"meta":168030,"navigation":69,"path":168031,"seo":168032,"stem":168033,"__hash__":168034},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164987,"toc":168011},[164988,164991,164995,164998,165001,165105,165108,165112,165115,165195,165198,165202,165205,165265,165268,165304,165307,165322,165326,165399,165402,165457,165460,165530,165533,165617,165627,165685,165689,165734,165737,165763,165766,165872,165876,165879,165921,165924,165988,165991,165995,165998,166059,166062,166092,166095,166133,166137,166140,166149,166152,166276,166279,166320,166324,166327,166338,166378,166381,166396,166401,166404,166471,166474,166564,166568,166571,166619,166622,166649,166651,166681,166684,166704,166707,166738,166741,166774,166778,166781,166805,166808,166832,166835,166859,166863,166866,166996,166999,167079,167082,167157,167161,167164,167214,167217,167259,167262,167286,167288,167312,167315,167370,167373,167439,167443,167446,167449,167487,167490,167543,167546,167592,167595,167628,167631,167635,167954,167958,167987,167991,168008],[10,164989,164985],{"id":164990},"_6-数据容器",[14,164992,164994],{"id":164993},"_61-什么是数据容器","6.1 什么是数据容器",[19,164996,164997],{},"数据容器用于一次保存多个数据。",[19,164999,165000],{},"常见容器：",[2698,165002,165003,165020],{},[2701,165004,165005],{},[2704,165006,165007,165009,165012,165015,165018],{},[2707,165008,28141],{},[2707,165010,165011],{},"是否有序",[2707,165013,165014],{},"是否可变",[2707,165016,165017],{},"是否允许重复",[2707,165019,29862],{},[2744,165021,165022,165040,165056,165071,165088],{},[2704,165023,165024,165027,165030,165033,165036],{},[2749,165025,165026],{},"list列表",[2749,165028,165029],{},"有序",[2749,165031,165032],{},"可变",[2749,165034,165035],{},"允许",[2749,165037,165038],{},[33,165039,157318],{},[2704,165041,165042,165045,165047,165050,165052],{},[2749,165043,165044],{},"tuple元组",[2749,165046,165029],{},[2749,165048,165049],{},"不可变",[2749,165051,165035],{},[2749,165053,165054],{},[33,165055,157331],{},[2704,165057,165058,165061,165063,165065,165067],{},[2749,165059,165060],{},"str字符串",[2749,165062,165029],{},[2749,165064,165049],{},[2749,165066,165035],{},[2749,165068,165069],{},[33,165070,157941],{},[2704,165072,165073,165076,165079,165081,165084],{},[2749,165074,165075],{},"set集合",[2749,165077,165078],{},"无序",[2749,165080,165032],{},[2749,165082,165083],{},"不允许",[2749,165085,165086],{},[33,165087,157356],{},[2704,165089,165090,165093,165095,165097,165100],{},[2749,165091,165092],{},"dict字典",[2749,165094,165029],{},[2749,165096,165032],{},[2749,165098,165099],{},"key不允许重复",[2749,165101,165102],{},[33,165103,165104],{},"{\"name\": \"小明\"}",[19,165106,165107],{},"Python 3.7 之后，字典保持插入顺序。",[14,165109,165111],{"id":165110},"_62-列表list","6.2 列表list",[19,165113,165114],{},"列表用于保存一组有顺序的数据。",[26,165116,165118],{"className":28,"code":165117,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,165119,165120,165140,165165,165186],{"__ignoreMap":31},[36,165121,165122,165124,165126,165128,165130,165132,165134,165136,165138],{"class":38,"line":39},[36,165123,162441],{"class":42},[36,165125,47],{"class":46},[36,165127,54574],{"class":42},[36,165129,627],{"class":50},[36,165131,630],{"class":42},[36,165133,1716],{"class":50},[36,165135,630],{"class":42},[36,165137,161792],{"class":50},[36,165139,35598],{"class":42},[36,165141,165142,165145,165147,165149,165151,165153,165155,165157,165159,165161,165163],{"class":38,"line":54},[36,165143,165144],{"class":42},"numbers ",[36,165146,47],{"class":46},[36,165148,54574],{"class":42},[36,165150,1906],{"class":62},[36,165152,630],{"class":42},[36,165154,1911],{"class":62},[36,165156,630],{"class":42},[36,165158,2634],{"class":62},[36,165160,630],{"class":42},[36,165162,2850],{"class":62},[36,165164,35598],{"class":42},[36,165166,165167,165170,165172,165174,165176,165178,165180,165182,165184],{"class":38,"line":66},[36,165168,165169],{"class":42},"mixed ",[36,165171,47],{"class":46},[36,165173,54574],{"class":42},[36,165175,627],{"class":50},[36,165177,630],{"class":42},[36,165179,633],{"class":62},[36,165181,630],{"class":42},[36,165183,33830],{"class":62},[36,165185,35598],{"class":42},[36,165187,165188,165191,165193],{"class":38,"line":73},[36,165189,165190],{"class":42},"empty ",[36,165192,47],{"class":46},[36,165194,54186],{"class":42},[19,165196,165197],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165199,165201],{"id":165200},"_63-列表索引","6.3 列表索引",[19,165203,165204],{},"正向索引从 0 开始：",[26,165206,165208],{"className":28,"code":165207,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,165209,165210,165230,165234,165245,165255],{"__ignoreMap":31},[36,165211,165212,165214,165216,165218,165220,165222,165224,165226,165228],{"class":38,"line":39},[36,165213,162441],{"class":42},[36,165215,47],{"class":46},[36,165217,54574],{"class":42},[36,165219,627],{"class":50},[36,165221,630],{"class":42},[36,165223,1716],{"class":50},[36,165225,630],{"class":42},[36,165227,161792],{"class":50},[36,165229,35598],{"class":42},[36,165231,165232],{"class":38,"line":54},[36,165233,70],{"emptyLinePlaceholder":69},[36,165235,165236,165238,165241,165243],{"class":38,"line":66},[36,165237,371],{"class":62},[36,165239,165240],{"class":42},"(names[",[36,165242,2751],{"class":62},[36,165244,7040],{"class":42},[36,165246,165247,165249,165251,165253],{"class":38,"line":73},[36,165248,371],{"class":62},[36,165250,165240],{"class":42},[36,165252,1906],{"class":62},[36,165254,7040],{"class":42},[36,165256,165257,165259,165261,165263],{"class":38,"line":86},[36,165258,371],{"class":62},[36,165260,165240],{"class":42},[36,165262,1911],{"class":62},[36,165264,7040],{"class":42},[19,165266,165267],{},"反向索引从 -1 开始：",[26,165269,165271],{"className":28,"code":165270,"language":30,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,165272,165273,165289],{"__ignoreMap":31},[36,165274,165275,165277,165279,165281,165283,165286],{"class":38,"line":39},[36,165276,371],{"class":62},[36,165278,165240],{"class":42},[36,165280,3087],{"class":46},[36,165282,1906],{"class":62},[36,165284,165285],{"class":42},"])  ",[36,165287,165288],{"class":2621},"# 小刚\n",[36,165290,165291,165293,165295,165297,165299,165301],{"class":38,"line":54},[36,165292,371],{"class":62},[36,165294,165240],{"class":42},[36,165296,3087],{"class":46},[36,165298,1911],{"class":62},[36,165300,165285],{"class":42},[36,165302,165303],{"class":2621},"# 小红\n",[19,165305,165306],{},"索引越界会报错：",[26,165308,165310],{"className":28,"code":165309,"language":30,"meta":31,"style":31},"print(names[3])\n",[33,165311,165312],{"__ignoreMap":31},[36,165313,165314,165316,165318,165320],{"class":38,"line":39},[36,165315,371],{"class":62},[36,165317,165240],{"class":42},[36,165319,2634],{"class":62},[36,165321,7040],{"class":42},[14,165323,165325],{"id":165324},"_64-列表常用方法","6.4 列表常用方法",[26,165327,165329],{"className":28,"code":165328,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,165330,165331,165347,165351,165360,165374,165388,165392],{"__ignoreMap":31},[36,165332,165333,165335,165337,165339,165341,165343,165345],{"class":38,"line":39},[36,165334,162441],{"class":42},[36,165336,47],{"class":46},[36,165338,54574],{"class":42},[36,165340,627],{"class":50},[36,165342,630],{"class":42},[36,165344,1716],{"class":50},[36,165346,35598],{"class":42},[36,165348,165349],{"class":38,"line":54},[36,165350,70],{"emptyLinePlaceholder":69},[36,165352,165353,165356,165358],{"class":38,"line":66},[36,165354,165355],{"class":42},"names.append(",[36,165357,161792],{"class":50},[36,165359,123],{"class":42},[36,165361,165362,165365,165367,165369,165372],{"class":38,"line":73},[36,165363,165364],{"class":42},"names.insert(",[36,165366,1906],{"class":62},[36,165368,630],{"class":42},[36,165370,165371],{"class":50},"\"小李\"",[36,165373,123],{"class":42},[36,165375,165376,165379,165381,165383,165386],{"class":38,"line":86},[36,165377,165378],{"class":42},"names.extend([",[36,165380,11063],{"class":50},[36,165382,630],{"class":42},[36,165384,165385],{"class":50},"\"小赵\"",[36,165387,7040],{"class":42},[36,165389,165390],{"class":38,"line":126},[36,165391,70],{"emptyLinePlaceholder":69},[36,165393,165394,165396],{"class":38,"line":131},[36,165395,371],{"class":62},[36,165397,165398],{"class":42},"(names)\n",[19,165400,165401],{},"删除元素：",[26,165403,165405],{"className":28,"code":165404,"language":30,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,165406,165407,165416,165426,165440,165452],{"__ignoreMap":31},[36,165408,165409,165412,165414],{"class":38,"line":39},[36,165410,165411],{"class":42},"names.remove(",[36,165413,1716],{"class":50},[36,165415,123],{"class":42},[36,165417,165418,165421,165423],{"class":38,"line":54},[36,165419,165420],{"class":42},"last ",[36,165422,47],{"class":46},[36,165424,165425],{"class":42}," names.pop()\n",[36,165427,165428,165431,165433,165436,165438],{"class":38,"line":66},[36,165429,165430],{"class":42},"first ",[36,165432,47],{"class":46},[36,165434,165435],{"class":42}," names.pop(",[36,165437,2751],{"class":62},[36,165439,123],{"class":42},[36,165441,165442,165445,165448,165450],{"class":38,"line":73},[36,165443,165444],{"class":46},"del",[36,165446,165447],{"class":42}," names[",[36,165449,2751],{"class":62},[36,165451,35598],{"class":42},[36,165453,165454],{"class":38,"line":86},[36,165455,165456],{"class":42},"names.clear()\n",[19,165458,165459],{},"查询和统计：",[26,165461,165463],{"className":28,"code":165462,"language":30,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,165464,165465,165493,165497,165508,165519],{"__ignoreMap":31},[36,165466,165467,165469,165471,165473,165475,165477,165479,165481,165483,165485,165487,165489,165491],{"class":38,"line":39},[36,165468,165144],{"class":42},[36,165470,47],{"class":46},[36,165472,54574],{"class":42},[36,165474,1906],{"class":62},[36,165476,630],{"class":42},[36,165478,1911],{"class":62},[36,165480,630],{"class":42},[36,165482,2634],{"class":62},[36,165484,630],{"class":42},[36,165486,1911],{"class":62},[36,165488,630],{"class":42},[36,165490,2850],{"class":62},[36,165492,35598],{"class":42},[36,165494,165495],{"class":38,"line":54},[36,165496,70],{"emptyLinePlaceholder":69},[36,165498,165499,165501,165504,165506],{"class":38,"line":66},[36,165500,371],{"class":62},[36,165502,165503],{"class":42},"(numbers.index(",[36,165505,2634],{"class":62},[36,165507,1914],{"class":42},[36,165509,165510,165512,165515,165517],{"class":38,"line":73},[36,165511,371],{"class":62},[36,165513,165514],{"class":42},"(numbers.count(",[36,165516,1911],{"class":62},[36,165518,1914],{"class":42},[36,165520,165521,165523,165525,165527],{"class":38,"line":86},[36,165522,371],{"class":62},[36,165524,92],{"class":42},[36,165526,9739],{"class":62},[36,165528,165529],{"class":42},"(numbers))\n",[19,165531,165532],{},"排序：",[26,165534,165536],{"className":28,"code":165535,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,165537,165538,165562,165566,165571,165578,165582,165596,165602,165606,165611],{"__ignoreMap":31},[36,165539,165540,165542,165544,165546,165548,165550,165552,165554,165556,165558,165560],{"class":38,"line":39},[36,165541,165144],{"class":42},[36,165543,47],{"class":46},[36,165545,54574],{"class":42},[36,165547,2634],{"class":62},[36,165549,630],{"class":42},[36,165551,1906],{"class":62},[36,165553,630],{"class":42},[36,165555,2875],{"class":62},[36,165557,630],{"class":42},[36,165559,1911],{"class":62},[36,165561,35598],{"class":42},[36,165563,165564],{"class":38,"line":54},[36,165565,70],{"emptyLinePlaceholder":69},[36,165567,165568],{"class":38,"line":66},[36,165569,165570],{"class":42},"numbers.sort()\n",[36,165572,165573,165575],{"class":38,"line":73},[36,165574,371],{"class":62},[36,165576,165577],{"class":42},"(numbers)\n",[36,165579,165580],{"class":38,"line":86},[36,165581,70],{"emptyLinePlaceholder":69},[36,165583,165584,165587,165590,165592,165594],{"class":38,"line":126},[36,165585,165586],{"class":42},"numbers.sort(",[36,165588,165589],{"class":7598},"reverse",[36,165591,47],{"class":46},[36,165593,33830],{"class":62},[36,165595,123],{"class":42},[36,165597,165598,165600],{"class":38,"line":131},[36,165599,371],{"class":62},[36,165601,165577],{"class":42},[36,165603,165604],{"class":38,"line":225},[36,165605,70],{"emptyLinePlaceholder":69},[36,165607,165608],{"class":38,"line":235},[36,165609,165610],{"class":42},"numbers.reverse()\n",[36,165612,165613,165615],{"class":38,"line":377},[36,165614,371],{"class":62},[36,165616,165577],{"class":42},[19,165618,165619,165622,165623,165626],{},[33,165620,165621],{},"sort()"," 会修改原列表，",[33,165624,165625],{},"sorted()"," 返回新列表。",[26,165628,165630],{"className":28,"code":165629,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,165631,165632,165656,165668,165672,165678],{"__ignoreMap":31},[36,165633,165634,165636,165638,165640,165642,165644,165646,165648,165650,165652,165654],{"class":38,"line":39},[36,165635,165144],{"class":42},[36,165637,47],{"class":46},[36,165639,54574],{"class":42},[36,165641,2634],{"class":62},[36,165643,630],{"class":42},[36,165645,1906],{"class":62},[36,165647,630],{"class":42},[36,165649,2875],{"class":62},[36,165651,630],{"class":42},[36,165653,1911],{"class":62},[36,165655,35598],{"class":42},[36,165657,165658,165661,165663,165666],{"class":38,"line":54},[36,165659,165660],{"class":42},"new_numbers ",[36,165662,47],{"class":46},[36,165664,165665],{"class":62}," sorted",[36,165667,165577],{"class":42},[36,165669,165670],{"class":38,"line":66},[36,165671,70],{"emptyLinePlaceholder":69},[36,165673,165674,165676],{"class":38,"line":73},[36,165675,371],{"class":62},[36,165677,165577],{"class":42},[36,165679,165680,165682],{"class":38,"line":86},[36,165681,371],{"class":62},[36,165683,165684],{"class":42},"(new_numbers)\n",[14,165686,165688],{"id":165687},"_65-列表遍历","6.5 列表遍历",[26,165690,165692],{"className":28,"code":165691,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,165693,165694,165714,165718,165728],{"__ignoreMap":31},[36,165695,165696,165698,165700,165702,165704,165706,165708,165710,165712],{"class":38,"line":39},[36,165697,162441],{"class":42},[36,165699,47],{"class":46},[36,165701,54574],{"class":42},[36,165703,627],{"class":50},[36,165705,630],{"class":42},[36,165707,1716],{"class":50},[36,165709,630],{"class":42},[36,165711,161792],{"class":50},[36,165713,35598],{"class":42},[36,165715,165716],{"class":38,"line":54},[36,165717,70],{"emptyLinePlaceholder":69},[36,165719,165720,165722,165724,165726],{"class":38,"line":66},[36,165721,5410],{"class":46},[36,165723,162477],{"class":42},[36,165725,28413],{"class":46},[36,165727,162482],{"class":42},[36,165729,165730,165732],{"class":38,"line":73},[36,165731,89],{"class":62},[36,165733,1440],{"class":42},[19,165735,165736],{},"需要索引时：",[26,165738,165740],{"className":28,"code":165739,"language":30,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,165741,165742,165756],{"__ignoreMap":31},[36,165743,165744,165746,165749,165751,165753],{"class":38,"line":39},[36,165745,5410],{"class":46},[36,165747,165748],{"class":42}," index, name ",[36,165750,28413],{"class":46},[36,165752,33960],{"class":62},[36,165754,165755],{"class":42},"(names):\n",[36,165757,165758,165760],{"class":38,"line":54},[36,165759,89],{"class":62},[36,165761,165762],{"class":42},"(index, name)\n",[19,165764,165765],{},"统计总分：",[26,165767,165769],{"className":28,"code":165768,"language":30,"meta":31,"style":31},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[33,165770,165771,165796,165804,165808,165819,165827,165831,165848],{"__ignoreMap":31},[36,165772,165773,165776,165778,165780,165782,165784,165786,165788,165790,165792,165794],{"class":38,"line":39},[36,165774,165775],{"class":42},"scores ",[36,165777,47],{"class":46},[36,165779,54574],{"class":42},[36,165781,3416],{"class":62},[36,165783,630],{"class":42},[36,165785,3290],{"class":62},[36,165787,630],{"class":42},[36,165789,2811],{"class":62},[36,165791,630],{"class":42},[36,165793,3116],{"class":62},[36,165795,35598],{"class":42},[36,165797,165798,165800,165802],{"class":38,"line":54},[36,165799,159321],{"class":42},[36,165801,47],{"class":46},[36,165803,49682],{"class":62},[36,165805,165806],{"class":38,"line":66},[36,165807,70],{"emptyLinePlaceholder":69},[36,165809,165810,165812,165814,165816],{"class":38,"line":73},[36,165811,5410],{"class":46},[36,165813,159844],{"class":42},[36,165815,28413],{"class":46},[36,165817,165818],{"class":42}," scores:\n",[36,165820,165821,165823,165825],{"class":38,"line":86},[36,165822,161368],{"class":42},[36,165824,928],{"class":46},[36,165826,555],{"class":42},[36,165828,165829],{"class":38,"line":126},[36,165830,70],{"emptyLinePlaceholder":69},[36,165832,165833,165836,165838,165841,165843,165845],{"class":38,"line":131},[36,165834,165835],{"class":42},"avg ",[36,165837,47],{"class":46},[36,165839,165840],{"class":42}," total ",[36,165842,3139],{"class":46},[36,165844,9712],{"class":62},[36,165846,165847],{"class":42},"(scores)\n",[36,165849,165850,165852,165854,165856,165859,165861,165864,165866,165868,165870],{"class":38,"line":225},[36,165851,371],{"class":62},[36,165853,92],{"class":42},[36,165855,95],{"class":46},[36,165857,165858],{"class":50},"\"平均分:",[36,165860,101],{"class":62},[36,165862,165863],{"class":42},"avg",[36,165865,159220],{"class":46},[36,165867,107],{"class":62},[36,165869,604],{"class":50},[36,165871,123],{"class":42},[14,165873,165875],{"id":165874},"_66-元组tuple","6.6 元组tuple",[19,165877,165878],{},"元组和列表类似，但不可修改。",[26,165880,165882],{"className":28,"code":165881,"language":30,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,165883,165884,165901],{"__ignoreMap":31},[36,165885,165886,165889,165891,165893,165895,165897,165899],{"class":38,"line":39},[36,165887,165888],{"class":42},"point ",[36,165890,47],{"class":46},[36,165892,4066],{"class":42},[36,165894,3002],{"class":62},[36,165896,630],{"class":42},[36,165898,3254],{"class":62},[36,165900,123],{"class":42},[36,165902,165903,165905,165907,165909,165911,165913,165915,165917,165919],{"class":38,"line":54},[36,165904,118653],{"class":42},[36,165906,47],{"class":46},[36,165908,4066],{"class":42},[36,165910,627],{"class":50},[36,165912,630],{"class":42},[36,165914,633],{"class":62},[36,165916,630],{"class":42},[36,165918,71615],{"class":50},[36,165920,123],{"class":42},[19,165922,165923],{},"单元素元组必须加逗号：",[26,165925,165927],{"className":28,"code":165926,"language":30,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,165928,165929,165943,165956,165960,165974],{"__ignoreMap":31},[36,165930,165931,165934,165936,165938,165940],{"class":38,"line":39},[36,165932,165933],{"class":42},"t1 ",[36,165935,47],{"class":46},[36,165937,4066],{"class":42},[36,165939,3002],{"class":62},[36,165941,165942],{"class":42},",)\n",[36,165944,165945,165948,165950,165952,165954],{"class":38,"line":54},[36,165946,165947],{"class":42},"t2 ",[36,165949,47],{"class":46},[36,165951,4066],{"class":42},[36,165953,3002],{"class":62},[36,165955,123],{"class":42},[36,165957,165958],{"class":38,"line":66},[36,165959,70],{"emptyLinePlaceholder":69},[36,165961,165962,165964,165966,165968,165971],{"class":38,"line":73},[36,165963,371],{"class":62},[36,165965,92],{"class":42},[36,165967,105447],{"class":62},[36,165969,165970],{"class":42},"(t1))  ",[36,165972,165973],{"class":2621},"# tuple\n",[36,165975,165976,165978,165980,165982,165985],{"class":38,"line":86},[36,165977,371],{"class":62},[36,165979,92],{"class":42},[36,165981,105447],{"class":62},[36,165983,165984],{"class":42},"(t2))  ",[36,165986,165987],{"class":2621},"# int\n",[19,165989,165990],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165992,165994],{"id":165993},"_67-字符串str","6.7 字符串str",[19,165996,165997],{},"字符串也是序列，可以索引、切片和遍历。",[26,165999,166001],{"className":28,"code":166000,"language":30,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,166002,166003,166011,166015,166026,166038,166042,166053],{"__ignoreMap":31},[36,166004,166005,166007,166009],{"class":38,"line":39},[36,166006,158505],{"class":42},[36,166008,47],{"class":46},[36,166010,161742],{"class":50},[36,166012,166013],{"class":38,"line":54},[36,166014,70],{"emptyLinePlaceholder":69},[36,166016,166017,166019,166022,166024],{"class":38,"line":66},[36,166018,371],{"class":62},[36,166020,166021],{"class":42},"(text[",[36,166023,2751],{"class":62},[36,166025,7040],{"class":42},[36,166027,166028,166030,166032,166034,166036],{"class":38,"line":73},[36,166029,371],{"class":62},[36,166031,166021],{"class":42},[36,166033,3087],{"class":46},[36,166035,1906],{"class":62},[36,166037,7040],{"class":42},[36,166039,166040],{"class":38,"line":86},[36,166041,70],{"emptyLinePlaceholder":69},[36,166043,166044,166046,166048,166050],{"class":38,"line":126},[36,166045,5410],{"class":46},[36,166047,161753],{"class":42},[36,166049,28413],{"class":46},[36,166051,166052],{"class":42}," text:\n",[36,166054,166055,166057],{"class":38,"line":131},[36,166056,89],{"class":62},[36,166058,161764],{"class":42},[19,166060,166061],{},"字符串不可变：",[26,166063,166065],{"className":28,"code":166064,"language":30,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,166066,166067,166075],{"__ignoreMap":31},[36,166068,166069,166071,166073],{"class":38,"line":39},[36,166070,158505],{"class":42},[36,166072,47],{"class":46},[36,166074,161742],{"class":50},[36,166076,166077,166080,166082,166084,166086,166089],{"class":38,"line":54},[36,166078,166079],{"class":42},"text[",[36,166081,2751],{"class":62},[36,166083,6826],{"class":42},[36,166085,47],{"class":46},[36,166087,166088],{"class":50}," \"P\"",[36,166090,166091],{"class":2621},"  # 报错\n",[19,166093,166094],{},"如果要得到新字符串：",[26,166096,166098],{"className":28,"code":166097,"language":30,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,166099,166100,166108,166126],{"__ignoreMap":31},[36,166101,166102,166104,166106],{"class":38,"line":39},[36,166103,158505],{"class":42},[36,166105,47],{"class":46},[36,166107,161742],{"class":50},[36,166109,166110,166112,166114,166116,166118,166121,166123],{"class":38,"line":54},[36,166111,158505],{"class":42},[36,166113,47],{"class":46},[36,166115,166088],{"class":50},[36,166117,47915],{"class":46},[36,166119,166120],{"class":42}," text[",[36,166122,1906],{"class":62},[36,166124,166125],{"class":42},":]\n",[36,166127,166128,166130],{"class":38,"line":66},[36,166129,371],{"class":62},[36,166131,166132],{"class":42},"(text)\n",[14,166134,166136],{"id":166135},"_68-切片","6.8 切片",[19,166138,166139],{},"切片用于从序列中取一部分。",[26,166141,166143],{"className":28,"code":166142,"language":30,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,166144,166145],{"__ignoreMap":31},[36,166146,166147],{"class":38,"line":39},[36,166148,166142],{"class":42},[19,166150,166151],{},"结束位置不包含。",[26,166153,166155],{"className":28,"code":166154,"language":30,"meta":31,"style":31},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[33,166156,166157,166194,166198,166217,166232,166246,166260],{"__ignoreMap":31},[36,166158,166159,166162,166164,166166,166168,166170,166172,166174,166176,166178,166180,166182,166184,166186,166188,166190,166192],{"class":38,"line":39},[36,166160,166161],{"class":42},"nums ",[36,166163,47],{"class":46},[36,166165,54574],{"class":42},[36,166167,2751],{"class":62},[36,166169,630],{"class":42},[36,166171,1906],{"class":62},[36,166173,630],{"class":42},[36,166175,1911],{"class":62},[36,166177,630],{"class":42},[36,166179,2634],{"class":62},[36,166181,630],{"class":42},[36,166183,2850],{"class":62},[36,166185,630],{"class":42},[36,166187,2875],{"class":62},[36,166189,630],{"class":42},[36,166191,2900],{"class":62},[36,166193,35598],{"class":42},[36,166195,166196],{"class":38,"line":54},[36,166197,70],{"emptyLinePlaceholder":69},[36,166199,166200,166202,166205,166207,166209,166211,166214],{"class":38,"line":66},[36,166201,371],{"class":62},[36,166203,166204],{"class":42},"(nums[",[36,166206,1906],{"class":62},[36,166208,3413],{"class":42},[36,166210,2850],{"class":62},[36,166212,166213],{"class":42},"])    ",[36,166215,166216],{"class":2621},"# [1, 2, 3]\n",[36,166218,166219,166221,166224,166226,166229],{"class":38,"line":73},[36,166220,371],{"class":62},[36,166222,166223],{"class":42},"(nums[:",[36,166225,2634],{"class":62},[36,166227,166228],{"class":42},"])     ",[36,166230,166231],{"class":2621},"# [0, 1, 2]\n",[36,166233,166234,166236,166238,166240,166243],{"class":38,"line":86},[36,166235,371],{"class":62},[36,166237,166204],{"class":42},[36,166239,2634],{"class":62},[36,166241,166242],{"class":42},":])     ",[36,166244,166245],{"class":2621},"# [3, 4, 5, 6]\n",[36,166247,166248,166250,166253,166255,166257],{"class":38,"line":126},[36,166249,371],{"class":62},[36,166251,166252],{"class":42},"(nums[::",[36,166254,1911],{"class":62},[36,166256,166213],{"class":42},[36,166258,166259],{"class":2621},"# [0, 2, 4, 6]\n",[36,166261,166262,166264,166266,166268,166270,166273],{"class":38,"line":131},[36,166263,371],{"class":62},[36,166265,166252],{"class":42},[36,166267,3087],{"class":46},[36,166269,1906],{"class":62},[36,166271,166272],{"class":42},"])   ",[36,166274,166275],{"class":2621},"# 反转\n",[19,166277,166278],{},"字符串切片：",[26,166280,166282],{"className":28,"code":166281,"language":30,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,166283,166284,166293,166307],{"__ignoreMap":31},[36,166285,166286,166288,166290],{"class":38,"line":39},[36,166287,158505],{"class":42},[36,166289,47],{"class":46},[36,166291,166292],{"class":50}," \"abcdef\"\n",[36,166294,166295,166297,166299,166301,166303,166305],{"class":38,"line":54},[36,166296,371],{"class":62},[36,166298,166021],{"class":42},[36,166300,1906],{"class":62},[36,166302,3413],{"class":42},[36,166304,2850],{"class":62},[36,166306,7040],{"class":42},[36,166308,166309,166311,166314,166316,166318],{"class":38,"line":66},[36,166310,371],{"class":62},[36,166312,166313],{"class":42},"(text[::",[36,166315,3087],{"class":46},[36,166317,1906],{"class":62},[36,166319,7040],{"class":42},[14,166321,166323],{"id":166322},"_69-集合set","6.9 集合set",[19,166325,166326],{},"集合特点：",[650,166328,166329,166332,166335],{},[653,166330,166331],{},"无序。",[653,166333,166334],{},"元素不重复。",[653,166336,166337],{},"可以做交集、并集、差集。",[26,166339,166341],{"className":28,"code":166340,"language":30,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,166342,166343,166371],{"__ignoreMap":31},[36,166344,166345,166347,166349,166351,166353,166355,166357,166359,166361,166363,166365,166367,166369],{"class":38,"line":39},[36,166346,166161],{"class":42},[36,166348,47],{"class":46},[36,166350,6831],{"class":42},[36,166352,1906],{"class":62},[36,166354,630],{"class":42},[36,166356,1911],{"class":62},[36,166358,630],{"class":42},[36,166360,2634],{"class":62},[36,166362,630],{"class":42},[36,166364,2634],{"class":62},[36,166366,630],{"class":42},[36,166368,2850],{"class":62},[36,166370,3982],{"class":42},[36,166372,166373,166375],{"class":38,"line":54},[36,166374,371],{"class":62},[36,166376,166377],{"class":42},"(nums)\n",[19,166379,166380],{},"创建空集合：",[26,166382,166384],{"className":28,"code":166383,"language":30,"meta":31,"style":31},"s = set()\n",[33,166385,166386],{"__ignoreMap":31},[36,166387,166388,166390,166392,166394],{"class":38,"line":39},[36,166389,12958],{"class":42},[36,166391,47],{"class":46},[36,166393,122061],{"class":62},[36,166395,4369],{"class":42},[19,166397,11405,166398,166400],{},[33,166399,34811],{}," 是空字典，不是空集合。",[19,166402,166403],{},"集合常用操作：",[26,166405,166407],{"className":28,"code":166406,"language":30,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,166408,166409,166429,166433,166442,166451,166460],{"__ignoreMap":31},[36,166410,166411,166413,166415,166417,166419,166421,166423,166425,166427],{"class":38,"line":39},[36,166412,12958],{"class":42},[36,166414,47],{"class":46},[36,166416,6831],{"class":42},[36,166418,1906],{"class":62},[36,166420,630],{"class":42},[36,166422,1911],{"class":62},[36,166424,630],{"class":42},[36,166426,2634],{"class":62},[36,166428,3982],{"class":42},[36,166430,166431],{"class":38,"line":54},[36,166432,70],{"emptyLinePlaceholder":69},[36,166434,166435,166438,166440],{"class":38,"line":66},[36,166436,166437],{"class":42},"s.add(",[36,166439,2850],{"class":62},[36,166441,123],{"class":42},[36,166443,166444,166447,166449],{"class":38,"line":73},[36,166445,166446],{"class":42},"s.remove(",[36,166448,1911],{"class":62},[36,166450,123],{"class":42},[36,166452,166453,166456,166458],{"class":38,"line":86},[36,166454,166455],{"class":42},"s.discard(",[36,166457,3002],{"class":62},[36,166459,123],{"class":42},[36,166461,166462,166464,166466,166468],{"class":38,"line":126},[36,166463,371],{"class":62},[36,166465,92],{"class":42},[36,166467,9739],{"class":62},[36,166469,166470],{"class":42},"(s))\n",[19,166472,166473],{},"交并差：",[26,166475,166477],{"className":28,"code":166476,"language":30,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,166478,166479,166499,166519,166523,166538,166551],{"__ignoreMap":31},[36,166480,166481,166483,166485,166487,166489,166491,166493,166495,166497],{"class":38,"line":39},[36,166482,13297],{"class":42},[36,166484,47],{"class":46},[36,166486,6831],{"class":42},[36,166488,1906],{"class":62},[36,166490,630],{"class":42},[36,166492,1911],{"class":62},[36,166494,630],{"class":42},[36,166496,2634],{"class":62},[36,166498,3982],{"class":42},[36,166500,166501,166503,166505,166507,166509,166511,166513,166515,166517],{"class":38,"line":54},[36,166502,13323],{"class":42},[36,166504,47],{"class":46},[36,166506,6831],{"class":42},[36,166508,2634],{"class":62},[36,166510,630],{"class":42},[36,166512,2850],{"class":62},[36,166514,630],{"class":42},[36,166516,2875],{"class":62},[36,166518,3982],{"class":42},[36,166520,166521],{"class":38,"line":66},[36,166522,70],{"emptyLinePlaceholder":69},[36,166524,166525,166527,166530,166532,166535],{"class":38,"line":73},[36,166526,371],{"class":62},[36,166528,166529],{"class":42},"(a ",[36,166531,2909],{"class":46},[36,166533,166534],{"class":42}," b)  ",[36,166536,166537],{"class":2621},"# 交集\n",[36,166539,166540,166542,166544,166546,166548],{"class":38,"line":86},[36,166541,371],{"class":62},[36,166543,166529],{"class":42},[36,166545,3474],{"class":46},[36,166547,166534],{"class":42},[36,166549,166550],{"class":2621},"# 并集\n",[36,166552,166553,166555,166557,166559,166561],{"class":38,"line":126},[36,166554,371],{"class":62},[36,166556,166529],{"class":42},[36,166558,3087],{"class":46},[36,166560,166534],{"class":42},[36,166562,166563],{"class":2621},"# 差集\n",[14,166565,166567],{"id":166566},"_610-字典dict","6.10 字典dict",[19,166569,166570],{},"字典通过 key-value 保存数据。",[26,166572,166574],{"className":28,"code":166573,"language":30,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,166575,166576,166584,166594,166605,166615],{"__ignoreMap":31},[36,166577,166578,166580,166582],{"class":38,"line":39},[36,166579,208],{"class":42},[36,166581,47],{"class":46},[36,166583,2150],{"class":42},[36,166585,166586,166588,166590,166592],{"class":38,"line":54},[36,166587,149356],{"class":50},[36,166589,2158],{"class":42},[36,166591,627],{"class":50},[36,166593,33820],{"class":42},[36,166595,166596,166599,166601,166603],{"class":38,"line":66},[36,166597,166598],{"class":50},"    \"age\"",[36,166600,2158],{"class":42},[36,166602,633],{"class":62},[36,166604,33820],{"class":42},[36,166606,166607,166610,166612],{"class":38,"line":73},[36,166608,166609],{"class":50},"    \"score\"",[36,166611,2158],{"class":42},[36,166613,166614],{"class":62},"95\n",[36,166616,166617],{"class":38,"line":86},[36,166618,3982],{"class":42},[19,166620,166621],{},"获取值：",[26,166623,166625],{"className":28,"code":166624,"language":30,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,166626,166627,166638],{"__ignoreMap":31},[36,166628,166629,166631,166634,166636],{"class":38,"line":39},[36,166630,371],{"class":62},[36,166632,166633],{"class":42},"(student[",[36,166635,2251],{"class":50},[36,166637,7040],{"class":42},[36,166639,166640,166642,166645,166647],{"class":38,"line":54},[36,166641,371],{"class":62},[36,166643,166644],{"class":42},"(student.get(",[36,166646,2251],{"class":50},[36,166648,1914],{"class":42},[19,166650,17763],{},[26,166652,166654],{"className":28,"code":166653,"language":30,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,166655,166656,166669],{"__ignoreMap":31},[36,166657,166658,166660,166663,166666],{"class":38,"line":39},[36,166659,154920],{"class":42},[36,166661,166662],{"class":50},"\"address\"",[36,166664,166665],{"class":42},"]     ",[36,166667,166668],{"class":2621},"# key不存在会报错\n",[36,166670,166671,166674,166676,166678],{"class":38,"line":54},[36,166672,166673],{"class":42},"student.get(",[36,166675,166662],{"class":50},[36,166677,16091],{"class":42},[36,166679,166680],{"class":2621},"# key不存在返回None\n",[19,166682,166683],{},"设置默认值：",[26,166685,166687],{"className":28,"code":166686,"language":30,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,166688,166689],{"__ignoreMap":31},[36,166690,166691,166693,166695,166697,166699,166702],{"class":38,"line":39},[36,166692,371],{"class":62},[36,166694,166644],{"class":42},[36,166696,166662],{"class":50},[36,166698,630],{"class":42},[36,166700,166701],{"class":50},"\"未知\"",[36,166703,1914],{"class":42},[19,166705,166706],{},"新增和修改：",[26,166708,166710],{"className":28,"code":166709,"language":30,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,166711,166712,166725],{"__ignoreMap":31},[36,166713,166714,166716,166718,166720,166722],{"class":38,"line":39},[36,166715,154920],{"class":42},[36,166717,2260],{"class":50},[36,166719,6826],{"class":42},[36,166721,47],{"class":46},[36,166723,166724],{"class":62}," 19\n",[36,166726,166727,166729,166731,166733,166735],{"class":38,"line":54},[36,166728,154920],{"class":42},[36,166730,166662],{"class":50},[36,166732,6826],{"class":42},[36,166734,47],{"class":46},[36,166736,166737],{"class":50}," \"北京\"\n",[19,166739,166740],{},"删除：",[26,166742,166744],{"className":28,"code":166743,"language":30,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,166745,166746,166759,166769],{"__ignoreMap":31},[36,166747,166748,166750,166752,166755,166757],{"class":38,"line":39},[36,166749,157419],{"class":42},[36,166751,47],{"class":46},[36,166753,166754],{"class":42}," student.pop(",[36,166756,2269],{"class":50},[36,166758,123],{"class":42},[36,166760,166761,166763,166765,166767],{"class":38,"line":54},[36,166762,165444],{"class":46},[36,166764,154210],{"class":42},[36,166766,2260],{"class":50},[36,166768,35598],{"class":42},[36,166770,166771],{"class":38,"line":66},[36,166772,166773],{"class":42},"student.clear()\n",[14,166775,166777],{"id":166776},"_611-字典遍历","6.11 字典遍历",[19,166779,166780],{},"遍历 key：",[26,166782,166784],{"className":28,"code":166783,"language":30,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,166785,166786,166798],{"__ignoreMap":31},[36,166787,166788,166790,166793,166795],{"class":38,"line":39},[36,166789,5410],{"class":46},[36,166791,166792],{"class":42}," key ",[36,166794,28413],{"class":46},[36,166796,166797],{"class":42}," student:\n",[36,166799,166800,166802],{"class":38,"line":54},[36,166801,89],{"class":62},[36,166803,166804],{"class":42},"(key, student[key])\n",[19,166806,166807],{},"遍历 value：",[26,166809,166811],{"className":28,"code":166810,"language":30,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,166812,166813,166825],{"__ignoreMap":31},[36,166814,166815,166817,166820,166822],{"class":38,"line":39},[36,166816,5410],{"class":46},[36,166818,166819],{"class":42}," value ",[36,166821,28413],{"class":46},[36,166823,166824],{"class":42}," student.values():\n",[36,166826,166827,166829],{"class":38,"line":54},[36,166828,89],{"class":62},[36,166830,166831],{"class":42},"(value)\n",[19,166833,166834],{},"遍历 key 和 value：",[26,166836,166838],{"className":28,"code":166837,"language":30,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,166839,166840,166852],{"__ignoreMap":31},[36,166841,166842,166844,166847,166849],{"class":38,"line":39},[36,166843,5410],{"class":46},[36,166845,166846],{"class":42}," key, value ",[36,166848,28413],{"class":46},[36,166850,166851],{"class":42}," student.items():\n",[36,166853,166854,166856],{"class":38,"line":54},[36,166855,89],{"class":62},[36,166857,166858],{"class":42},"(key, value)\n",[14,166860,166862],{"id":166861},"_612-嵌套容器","6.12 嵌套容器",[19,166864,166865],{},"列表中保存字典，是项目中最常见的结构之一。",[26,166867,166869],{"className":28,"code":166868,"language":30,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[33,166870,166871,166879,166907,166935,166963,166967,166971,166981],{"__ignoreMap":31},[36,166872,166873,166875,166877],{"class":38,"line":39},[36,166874,161777],{"class":42},[36,166876,47],{"class":46},[36,166878,57795],{"class":42},[36,166880,166881,166883,166885,166887,166889,166891,166893,166895,166897,166899,166901,166903,166905],{"class":38,"line":54},[36,166882,150721],{"class":42},[36,166884,2251],{"class":50},[36,166886,2158],{"class":42},[36,166888,627],{"class":50},[36,166890,630],{"class":42},[36,166892,2260],{"class":50},[36,166894,2158],{"class":42},[36,166896,633],{"class":62},[36,166898,630],{"class":42},[36,166900,2269],{"class":50},[36,166902,2158],{"class":42},[36,166904,638],{"class":62},[36,166906,7313],{"class":42},[36,166908,166909,166911,166913,166915,166917,166919,166921,166923,166925,166927,166929,166931,166933],{"class":38,"line":66},[36,166910,150721],{"class":42},[36,166912,2251],{"class":50},[36,166914,2158],{"class":42},[36,166916,1716],{"class":50},[36,166918,630],{"class":42},[36,166920,2260],{"class":50},[36,166922,2158],{"class":42},[36,166924,3180],{"class":62},[36,166926,630],{"class":42},[36,166928,2269],{"class":50},[36,166930,2158],{"class":42},[36,166932,3365],{"class":62},[36,166934,7313],{"class":42},[36,166936,166937,166939,166941,166943,166945,166947,166949,166951,166953,166955,166957,166959,166961],{"class":38,"line":73},[36,166938,150721],{"class":42},[36,166940,2251],{"class":50},[36,166942,2158],{"class":42},[36,166944,161792],{"class":50},[36,166946,630],{"class":42},[36,166948,2260],{"class":50},[36,166950,2158],{"class":42},[36,166952,3229],{"class":62},[36,166954,630],{"class":42},[36,166956,2269],{"class":50},[36,166958,2158],{"class":42},[36,166960,2962],{"class":62},[36,166962,7313],{"class":42},[36,166964,166965],{"class":38,"line":86},[36,166966,35598],{"class":42},[36,166968,166969],{"class":38,"line":126},[36,166970,70],{"emptyLinePlaceholder":69},[36,166972,166973,166975,166977,166979],{"class":38,"line":131},[36,166974,5410],{"class":46},[36,166976,154198],{"class":42},[36,166978,28413],{"class":46},[36,166980,154203],{"class":42},[36,166982,166983,166985,166987,166989,166992,166994],{"class":38,"line":225},[36,166984,89],{"class":62},[36,166986,166633],{"class":42},[36,166988,2251],{"class":50},[36,166990,166991],{"class":42},"], student[",[36,166993,2269],{"class":50},[36,166995,7040],{"class":42},[19,166997,166998],{},"统计平均分：",[26,167000,167002],{"className":28,"code":167001,"language":30,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,167003,167004,167012,167016,167026,167038,167042,167057],{"__ignoreMap":31},[36,167005,167006,167008,167010],{"class":38,"line":39},[36,167007,159321],{"class":42},[36,167009,47],{"class":46},[36,167011,49682],{"class":62},[36,167013,167014],{"class":38,"line":54},[36,167015,70],{"emptyLinePlaceholder":69},[36,167017,167018,167020,167022,167024],{"class":38,"line":66},[36,167019,5410],{"class":46},[36,167021,154198],{"class":42},[36,167023,28413],{"class":46},[36,167025,154203],{"class":42},[36,167027,167028,167030,167032,167034,167036],{"class":38,"line":73},[36,167029,161368],{"class":42},[36,167031,928],{"class":46},[36,167033,154210],{"class":42},[36,167035,2269],{"class":50},[36,167037,35598],{"class":42},[36,167039,167040],{"class":38,"line":86},[36,167041,70],{"emptyLinePlaceholder":69},[36,167043,167044,167046,167048,167050,167052,167054],{"class":38,"line":126},[36,167045,165835],{"class":42},[36,167047,47],{"class":46},[36,167049,165840],{"class":42},[36,167051,3139],{"class":46},[36,167053,9712],{"class":62},[36,167055,167056],{"class":42},"(students)\n",[36,167058,167059,167061,167063,167065,167067,167069,167071,167073,167075,167077],{"class":38,"line":131},[36,167060,371],{"class":62},[36,167062,92],{"class":42},[36,167064,95],{"class":46},[36,167066,165858],{"class":50},[36,167068,101],{"class":62},[36,167070,165863],{"class":42},[36,167072,159220],{"class":46},[36,167074,107],{"class":62},[36,167076,604],{"class":50},[36,167078,123],{"class":42},[19,167080,167081],{},"查找学生：",[26,167083,167085],{"className":28,"code":167084,"language":30,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,167086,167087,167102,167106,167116,167130,167136,167140,167146],{"__ignoreMap":31},[36,167088,167089,167091,167093,167095,167097,167100],{"class":38,"line":39},[36,167090,113917],{"class":42},[36,167092,47],{"class":46},[36,167094,62953],{"class":62},[36,167096,92],{"class":42},[36,167098,167099],{"class":50},"\"请输入学生姓名:\"",[36,167101,123],{"class":42},[36,167103,167104],{"class":38,"line":54},[36,167105,70],{"emptyLinePlaceholder":69},[36,167107,167108,167110,167112,167114],{"class":38,"line":66},[36,167109,5410],{"class":46},[36,167111,154198],{"class":42},[36,167113,28413],{"class":46},[36,167115,154203],{"class":42},[36,167117,167118,167120,167122,167124,167126,167128],{"class":38,"line":73},[36,167119,5486],{"class":46},[36,167121,154210],{"class":42},[36,167123,2251],{"class":50},[36,167125,6826],{"class":42},[36,167127,5334],{"class":46},[36,167129,162493],{"class":42},[36,167131,167132,167134],{"class":38,"line":86},[36,167133,168],{"class":62},[36,167135,791],{"class":42},[36,167137,167138],{"class":38,"line":126},[36,167139,33981],{"class":46},[36,167141,167142,167144],{"class":38,"line":131},[36,167143,4105],{"class":46},[36,167145,153],{"class":42},[36,167147,167148,167150,167152,167155],{"class":38,"line":225},[36,167149,89],{"class":62},[36,167151,92],{"class":42},[36,167153,167154],{"class":50},"\"没有找到\"",[36,167156,123],{"class":42},[14,167158,167160],{"id":167159},"_613-容器通用操作","6.13 容器通用操作",[19,167162,167163],{},"长度：",[26,167165,167167],{"className":28,"code":167166,"language":30,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,167168,167169,167188,167198],{"__ignoreMap":31},[36,167170,167171,167173,167176,167178,167180,167182,167184,167186],{"class":38,"line":39},[36,167172,9739],{"class":62},[36,167174,167175],{"class":42},"([",[36,167177,1906],{"class":62},[36,167179,630],{"class":42},[36,167181,1911],{"class":62},[36,167183,630],{"class":42},[36,167185,2634],{"class":62},[36,167187,7040],{"class":42},[36,167189,167190,167192,167194,167196],{"class":38,"line":54},[36,167191,9739],{"class":62},[36,167193,92],{"class":42},[36,167195,157941],{"class":50},[36,167197,123],{"class":42},[36,167199,167200,167202,167205,167207,167209,167211],{"class":38,"line":66},[36,167201,9739],{"class":62},[36,167203,167204],{"class":42},"({",[36,167206,2251],{"class":50},[36,167208,2158],{"class":42},[36,167210,627],{"class":50},[36,167212,167213],{"class":42},"})\n",[19,167215,167216],{},"最大最小：",[26,167218,167220],{"className":28,"code":167219,"language":30,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,167221,167222,167240],{"__ignoreMap":31},[36,167223,167224,167226,167228,167230,167232,167234,167236,167238],{"class":38,"line":39},[36,167225,8397],{"class":62},[36,167227,167175],{"class":42},[36,167229,1906],{"class":62},[36,167231,630],{"class":42},[36,167233,1911],{"class":62},[36,167235,630],{"class":42},[36,167237,2634],{"class":62},[36,167239,7040],{"class":42},[36,167241,167242,167245,167247,167249,167251,167253,167255,167257],{"class":38,"line":54},[36,167243,167244],{"class":62},"min",[36,167246,167175],{"class":42},[36,167248,1906],{"class":62},[36,167250,630],{"class":42},[36,167252,1911],{"class":62},[36,167254,630],{"class":42},[36,167256,2634],{"class":62},[36,167258,7040],{"class":42},[19,167260,167261],{},"求和：",[26,167263,167265],{"className":28,"code":167264,"language":30,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,167266,167267],{"__ignoreMap":31},[36,167268,167269,167272,167274,167276,167278,167280,167282,167284],{"class":38,"line":39},[36,167270,167271],{"class":62},"sum",[36,167273,167175],{"class":42},[36,167275,1906],{"class":62},[36,167277,630],{"class":42},[36,167279,1911],{"class":62},[36,167281,630],{"class":42},[36,167283,2634],{"class":62},[36,167285,7040],{"class":42},[19,167287,165532],{},[26,167289,167291],{"className":28,"code":167290,"language":30,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,167292,167293],{"__ignoreMap":31},[36,167294,167295,167298,167300,167302,167304,167306,167308,167310],{"class":38,"line":39},[36,167296,167297],{"class":62},"sorted",[36,167299,167175],{"class":42},[36,167301,2634],{"class":62},[36,167303,630],{"class":42},[36,167305,1906],{"class":62},[36,167307,630],{"class":42},[36,167309,1911],{"class":62},[36,167311,7040],{"class":42},[19,167313,167314],{},"类型转换：",[26,167316,167318],{"className":28,"code":167317,"language":30,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,167319,167320,167330,167348],{"__ignoreMap":31},[36,167321,167322,167324,167326,167328],{"class":38,"line":39},[36,167323,156131],{"class":62},[36,167325,92],{"class":42},[36,167327,157941],{"class":50},[36,167329,123],{"class":42},[36,167331,167332,167334,167336,167338,167340,167342,167344,167346],{"class":38,"line":54},[36,167333,157326],{"class":62},[36,167335,167175],{"class":42},[36,167337,1906],{"class":62},[36,167339,630],{"class":42},[36,167341,1911],{"class":62},[36,167343,630],{"class":42},[36,167345,2634],{"class":62},[36,167347,7040],{"class":42},[36,167349,167350,167352,167354,167356,167358,167360,167362,167364,167366,167368],{"class":38,"line":66},[36,167351,157351],{"class":62},[36,167353,167175],{"class":42},[36,167355,1906],{"class":62},[36,167357,630],{"class":42},[36,167359,1906],{"class":62},[36,167361,630],{"class":42},[36,167363,1911],{"class":62},[36,167365,630],{"class":42},[36,167367,2634],{"class":62},[36,167369,7040],{"class":42},[19,167371,167372],{},"成员判断：",[26,167374,167376],{"className":28,"code":167375,"language":30,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,167377,167378,167395,167419],{"__ignoreMap":31},[36,167379,167380,167382,167384,167387,167390,167393],{"class":38,"line":39},[36,167381,371],{"class":62},[36,167383,92],{"class":42},[36,167385,167386],{"class":50},"\"a\"",[36,167388,167389],{"class":46}," in",[36,167391,167392],{"class":50}," \"abc\"",[36,167394,123],{"class":42},[36,167396,167397,167399,167401,167403,167405,167407,167409,167411,167413,167415,167417],{"class":38,"line":54},[36,167398,371],{"class":62},[36,167400,92],{"class":42},[36,167402,1906],{"class":62},[36,167404,167389],{"class":46},[36,167406,54574],{"class":42},[36,167408,1906],{"class":62},[36,167410,630],{"class":42},[36,167412,1911],{"class":62},[36,167414,630],{"class":42},[36,167416,2634],{"class":62},[36,167418,7040],{"class":42},[36,167420,167421,167423,167425,167427,167429,167431,167433,167435,167437],{"class":38,"line":66},[36,167422,371],{"class":62},[36,167424,92],{"class":42},[36,167426,2251],{"class":50},[36,167428,167389],{"class":46},[36,167430,6831],{"class":42},[36,167432,2251],{"class":50},[36,167434,2158],{"class":42},[36,167436,627],{"class":50},[36,167438,167213],{"class":42},[14,167440,167442],{"id":167441},"_614-推导式","6.14 推导式",[19,167444,167445],{},"推导式用于快速生成容器。",[19,167447,167448],{},"列表推导式：",[26,167450,167452],{"className":28,"code":167451,"language":30,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,167453,167454,167481],{"__ignoreMap":31},[36,167455,167456,167458,167460,167463,167465,167467,167469,167471,167473,167475,167477,167479],{"class":38,"line":39},[36,167457,166161],{"class":42},[36,167459,47],{"class":46},[36,167461,167462],{"class":42}," [i ",[36,167464,5410],{"class":46},[36,167466,11818],{"class":42},[36,167468,28413],{"class":46},[36,167470,34796],{"class":62},[36,167472,92],{"class":42},[36,167474,1906],{"class":62},[36,167476,630],{"class":42},[36,167478,2900],{"class":62},[36,167480,99641],{"class":42},[36,167482,167483,167485],{"class":38,"line":54},[36,167484,371],{"class":62},[36,167486,166377],{"class":42},[19,167488,167489],{},"带条件：",[26,167491,167493],{"className":28,"code":167492,"language":30,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,167494,167495,167536],{"__ignoreMap":31},[36,167496,167497,167500,167502,167504,167506,167508,167510,167512,167514,167516,167518,167520,167522,167524,167526,167528,167530,167532,167534],{"class":38,"line":39},[36,167498,167499],{"class":42},"even_nums ",[36,167501,47],{"class":46},[36,167503,167462],{"class":42},[36,167505,5410],{"class":46},[36,167507,11818],{"class":42},[36,167509,28413],{"class":46},[36,167511,34796],{"class":62},[36,167513,92],{"class":42},[36,167515,1906],{"class":62},[36,167517,630],{"class":42},[36,167519,2893],{"class":62},[36,167521,16091],{"class":42},[36,167523,3948],{"class":46},[36,167525,11818],{"class":42},[36,167527,2884],{"class":46},[36,167529,17130],{"class":62},[36,167531,103899],{"class":46},[36,167533,899],{"class":62},[36,167535,35598],{"class":42},[36,167537,167538,167540],{"class":38,"line":54},[36,167539,371],{"class":62},[36,167541,167542],{"class":42},"(even_nums)\n",[19,167544,167545],{},"字典推导式：",[26,167547,167549],{"className":28,"code":167548,"language":30,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,167550,167551,167585],{"__ignoreMap":31},[36,167552,167553,167556,167558,167561,167563,167565,167568,167570,167572,167574,167576,167578,167580,167582],{"class":38,"line":39},[36,167554,167555],{"class":42},"squares ",[36,167557,47],{"class":46},[36,167559,167560],{"class":42}," {i: i ",[36,167562,13040],{"class":46},[36,167564,17130],{"class":62},[36,167566,167567],{"class":46}," for",[36,167569,11818],{"class":42},[36,167571,28413],{"class":46},[36,167573,34796],{"class":62},[36,167575,92],{"class":42},[36,167577,1906],{"class":62},[36,167579,630],{"class":42},[36,167581,2900],{"class":62},[36,167583,167584],{"class":42},")}\n",[36,167586,167587,167589],{"class":38,"line":54},[36,167588,371],{"class":62},[36,167590,167591],{"class":42},"(squares)\n",[19,167593,167594],{},"集合推导式：",[26,167596,167598],{"className":28,"code":167597,"language":30,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,167599,167600,167621],{"__ignoreMap":31},[36,167601,167602,167605,167607,167610,167612,167614,167616,167619],{"class":38,"line":39},[36,167603,167604],{"class":42},"chars ",[36,167606,47],{"class":46},[36,167608,167609],{"class":42}," {ch ",[36,167611,5410],{"class":46},[36,167613,161753],{"class":42},[36,167615,28413],{"class":46},[36,167617,167618],{"class":50}," \"hello\"",[36,167620,3982],{"class":42},[36,167622,167623,167625],{"class":38,"line":54},[36,167624,371],{"class":62},[36,167626,167627],{"class":42},"(chars)\n",[19,167629,167630],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167632,167634],{"id":167633},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,167636,167638],{"className":28,"code":167637,"language":30,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[33,167639,167640,167648,167668,167688,167708,167728,167732,167736,167744,167758,167767,167771,167781,167793,167797,167817,167826,167830,167846,167851,167855,167869,167873,167895,167931],{"__ignoreMap":31},[36,167641,167642,167644,167646],{"class":38,"line":39},[36,167643,161777],{"class":42},[36,167645,47],{"class":46},[36,167647,57795],{"class":42},[36,167649,167650,167652,167654,167656,167658,167660,167662,167664,167666],{"class":38,"line":54},[36,167651,150721],{"class":42},[36,167653,2251],{"class":50},[36,167655,2158],{"class":42},[36,167657,627],{"class":50},[36,167659,630],{"class":42},[36,167661,2269],{"class":50},[36,167663,2158],{"class":42},[36,167665,638],{"class":62},[36,167667,7313],{"class":42},[36,167669,167670,167672,167674,167676,167678,167680,167682,167684,167686],{"class":38,"line":66},[36,167671,150721],{"class":42},[36,167673,2251],{"class":50},[36,167675,2158],{"class":42},[36,167677,1716],{"class":50},[36,167679,630],{"class":42},[36,167681,2269],{"class":50},[36,167683,2158],{"class":42},[36,167685,3365],{"class":62},[36,167687,7313],{"class":42},[36,167689,167690,167692,167694,167696,167698,167700,167702,167704,167706],{"class":38,"line":73},[36,167691,150721],{"class":42},[36,167693,2251],{"class":50},[36,167695,2158],{"class":42},[36,167697,161792],{"class":50},[36,167699,630],{"class":42},[36,167701,2269],{"class":50},[36,167703,2158],{"class":42},[36,167705,2962],{"class":62},[36,167707,7313],{"class":42},[36,167709,167710,167712,167714,167716,167718,167720,167722,167724,167726],{"class":38,"line":86},[36,167711,150721],{"class":42},[36,167713,2251],{"class":50},[36,167715,2158],{"class":42},[36,167717,165371],{"class":50},[36,167719,630],{"class":42},[36,167721,2269],{"class":50},[36,167723,2158],{"class":42},[36,167725,3436],{"class":62},[36,167727,7313],{"class":42},[36,167729,167730],{"class":38,"line":126},[36,167731,35598],{"class":42},[36,167733,167734],{"class":38,"line":131},[36,167735,70],{"emptyLinePlaceholder":69},[36,167737,167738,167740,167742],{"class":38,"line":225},[36,167739,159321],{"class":42},[36,167741,47],{"class":46},[36,167743,49682],{"class":62},[36,167745,167746,167749,167751,167754,167756],{"class":38,"line":235},[36,167747,167748],{"class":42},"max_student ",[36,167750,47],{"class":46},[36,167752,167753],{"class":42}," students[",[36,167755,2751],{"class":62},[36,167757,35598],{"class":42},[36,167759,167760,167763,167765],{"class":38,"line":377},[36,167761,167762],{"class":42},"passed ",[36,167764,47],{"class":46},[36,167766,54186],{"class":42},[36,167768,167769],{"class":38,"line":617},[36,167770,70],{"emptyLinePlaceholder":69},[36,167772,167773,167775,167777,167779],{"class":38,"line":643},[36,167774,5410],{"class":46},[36,167776,154198],{"class":42},[36,167778,28413],{"class":46},[36,167780,154203],{"class":42},[36,167782,167783,167785,167787,167789,167791],{"class":38,"line":921},[36,167784,161368],{"class":42},[36,167786,928],{"class":46},[36,167788,154210],{"class":42},[36,167790,2269],{"class":50},[36,167792,35598],{"class":42},[36,167794,167795],{"class":38,"line":934},[36,167796,70],{"emptyLinePlaceholder":69},[36,167798,167799,167801,167803,167805,167807,167809,167812,167814],{"class":38,"line":939},[36,167800,5486],{"class":46},[36,167802,154210],{"class":42},[36,167804,2269],{"class":50},[36,167806,6826],{"class":42},[36,167808,986],{"class":46},[36,167810,167811],{"class":42}," max_student[",[36,167813,2269],{"class":50},[36,167815,167816],{"class":42},"]:\n",[36,167818,167819,167822,167824],{"class":38,"line":949},[36,167820,167821],{"class":42},"        max_student ",[36,167823,47],{"class":46},[36,167825,154226],{"class":42},[36,167827,167828],{"class":38,"line":962},[36,167829,70],{"emptyLinePlaceholder":69},[36,167831,167832,167834,167836,167838,167840,167842,167844],{"class":38,"line":974},[36,167833,5486],{"class":46},[36,167835,154210],{"class":42},[36,167837,2269],{"class":50},[36,167839,6826],{"class":42},[36,167841,2127],{"class":46},[36,167843,159898],{"class":62},[36,167845,153],{"class":42},[36,167847,167848],{"class":38,"line":979},[36,167849,167850],{"class":42},"        passed.append(student)\n",[36,167852,167853],{"class":38,"line":994},[36,167854,70],{"emptyLinePlaceholder":69},[36,167856,167857,167859,167861,167863,167865,167867],{"class":38,"line":1006},[36,167858,165835],{"class":42},[36,167860,47],{"class":46},[36,167862,165840],{"class":42},[36,167864,3139],{"class":46},[36,167866,9712],{"class":62},[36,167868,167056],{"class":42},[36,167870,167871],{"class":38,"line":1011},[36,167872,70],{"emptyLinePlaceholder":69},[36,167874,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893],{"class":38,"line":1023},[36,167876,371],{"class":62},[36,167878,92],{"class":42},[36,167880,95],{"class":46},[36,167882,165858],{"class":50},[36,167884,101],{"class":62},[36,167886,165863],{"class":42},[36,167888,159220],{"class":46},[36,167890,107],{"class":62},[36,167892,604],{"class":50},[36,167894,123],{"class":42},[36,167896,167897,167899,167901,167903,167906,167908,167911,167913,167915,167917,167919,167921,167923,167925,167927,167929],{"class":38,"line":1028},[36,167898,371],{"class":62},[36,167900,92],{"class":42},[36,167902,95],{"class":46},[36,167904,167905],{"class":50},"\"最高分学生:",[36,167907,101],{"class":62},[36,167909,167910],{"class":42},"max_student[",[36,167912,154943],{"class":50},[36,167914,3493],{"class":42},[36,167916,107],{"class":62},[36,167918,6831],{"class":62},[36,167920,167910],{"class":42},[36,167922,154981],{"class":50},[36,167924,3493],{"class":42},[36,167926,107],{"class":62},[36,167928,604],{"class":50},[36,167930,123],{"class":42},[36,167932,167933,167935,167937,167939,167942,167945,167948,167950,167952],{"class":38,"line":1033},[36,167934,371],{"class":62},[36,167936,92],{"class":42},[36,167938,95],{"class":46},[36,167940,167941],{"class":50},"\"及格人数:",[36,167943,167944],{"class":62},"{len",[36,167946,167947],{"class":42},"(passed)",[36,167949,107],{"class":62},[36,167951,604],{"class":50},[36,167953,123],{"class":42},[14,167955,167957],{"id":167956},"_616-易错点","6.16 易错点",[650,167959,167960,167963,167966,167969,167975,167984],{},[653,167961,167962],{},"列表可变，元组和字符串不可变。",[653,167964,167965],{},"切片结束位置不包含。",[653,167967,167968],{},"字典通过 key 取值，不是通过索引。",[653,167970,167971,167972,676],{},"空集合要用 ",[33,167973,167974],{},"set()",[653,167976,2459,167977,167980,167981,676],{},[33,167978,167979],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,167982,167983],{},"get()",[653,167985,167986],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167988,167990],{"id":167989},"_617-本章练习","6.17 本章练习",[650,167992,167993,167996,167999,168002,168005],{},[653,167994,167995],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[653,167997,167998],{},"输入一句话，统计每个字符出现次数。",[653,168000,168001],{},"使用集合去除列表中的重复元素。",[653,168003,168004],{},"使用字典保存一个学生的信息，并实现修改成绩。",[653,168006,168007],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2467,168009,168010],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":168012},[168013,168014,168015,168016,168017,168018,168019,168020,168021,168022,168023,168024,168025,168026,168027,168028,168029],{"id":164993,"depth":54,"text":164994},{"id":165110,"depth":54,"text":165111},{"id":165200,"depth":54,"text":165201},{"id":165324,"depth":54,"text":165325},{"id":165687,"depth":54,"text":165688},{"id":165874,"depth":54,"text":165875},{"id":165993,"depth":54,"text":165994},{"id":166135,"depth":54,"text":166136},{"id":166322,"depth":54,"text":166323},{"id":166566,"depth":54,"text":166567},{"id":166776,"depth":54,"text":166777},{"id":166861,"depth":54,"text":166862},{"id":167159,"depth":54,"text":167160},{"id":167441,"depth":54,"text":167442},{"id":167633,"depth":54,"text":167634},{"id":167956,"depth":54,"text":167957},{"id":167989,"depth":54,"text":167990},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164985,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168036,"title":168037,"body":168038,"description":2493,"extension":2494,"meta":170210,"navigation":69,"path":170211,"seo":170212,"stem":170213,"__hash__":170214},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168039,"toc":170185},[168040,168043,168047,168050,168130,168133,168154,168157,168161,168164,168226,168229,168246,168250,168253,168298,168300,168308,168312,168315,168397,168400,168403,168428,168431,168454,168458,168461,168463,168525,168528,168530,168581,168585,168589,168595,168700,168704,168710,168781,168785,168788,168856,168859,168939,168943,168949,168985,168988,168991,169101,169107,169111,169114,169186,169189,169193,169197,169202,169264,169268,169273,169341,169345,169350,169466,169470,169473,169553,169556,169560,169563,169667,169669,169684,169687,169691,169829,169837,169841,169843,169854,169856,170114,170118,170150,170154,170182],[10,168041,168037],{"id":168042},"_7-函数进阶",[14,168044,168046],{"id":168045},"_71-多返回值","7.1 多返回值",[19,168048,168049],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,168051,168053],{"className":28,"code":168052,"language":30,"meta":31,"style":31},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[33,168054,168055,168064,168072,168080,168089,168096,168100,168104,168113,168119],{"__ignoreMap":31},[36,168056,168057,168059,168062],{"class":38,"line":39},[36,168058,76],{"class":46},[36,168060,168061],{"class":79}," get_info",[36,168063,34306],{"class":42},[36,168065,168066,168068,168070],{"class":38,"line":54},[36,168067,154431],{"class":42},[36,168069,47],{"class":46},[36,168071,51],{"class":50},[36,168073,168074,168076,168078],{"class":38,"line":66},[36,168075,154447],{"class":42},[36,168077,47],{"class":46},[36,168079,63],{"class":62},[36,168081,168082,168084,168086],{"class":38,"line":73},[36,168083,154462],{"class":42},[36,168085,47],{"class":46},[36,168087,168088],{"class":62}," 95\n",[36,168090,168091,168093],{"class":38,"line":86},[36,168092,6474],{"class":46},[36,168094,168095],{"class":42}," name, age, score\n",[36,168097,168098],{"class":38,"line":126},[36,168099,70],{"emptyLinePlaceholder":69},[36,168101,168102],{"class":38,"line":131},[36,168103,70],{"emptyLinePlaceholder":69},[36,168105,168106,168108,168110],{"class":38,"line":225},[36,168107,163367],{"class":42},[36,168109,47],{"class":46},[36,168111,168112],{"class":42}," get_info()\n",[36,168114,168115,168117],{"class":38,"line":235},[36,168116,371],{"class":62},[36,168118,78930],{"class":42},[36,168120,168121,168123,168125,168127],{"class":38,"line":377},[36,168122,371],{"class":62},[36,168124,92],{"class":42},[36,168126,105447],{"class":62},[36,168128,168129],{"class":42},"(result))\n",[19,168131,168132],{},"可以直接解包：",[26,168134,168136],{"className":28,"code":168135,"language":30,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,168137,168138,168147],{"__ignoreMap":31},[36,168139,168140,168143,168145],{"class":38,"line":39},[36,168141,168142],{"class":42},"name, age, score ",[36,168144,47],{"class":46},[36,168146,168112],{"class":42},[36,168148,168149,168151],{"class":38,"line":54},[36,168150,371],{"class":62},[36,168152,168153],{"class":42},"(name, age, score)\n",[19,168155,168156],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168158,168160],{"id":168159},"_72-位置参数","7.2 位置参数",[19,168162,168163],{},"位置参数按顺序传递。",[26,168165,168167],{"className":28,"code":168166,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,168168,168169,168177,168205,168209,168213],{"__ignoreMap":31},[36,168170,168171,168173,168175],{"class":38,"line":39},[36,168172,76],{"class":46},[36,168174,80],{"class":79},[36,168176,83],{"class":42},[36,168178,168179,168181,168183,168185,168187,168189,168191,168193,168195,168197,168199,168201,168203],{"class":38,"line":54},[36,168180,89],{"class":62},[36,168182,92],{"class":42},[36,168184,95],{"class":46},[36,168186,98],{"class":50},[36,168188,101],{"class":62},[36,168190,104],{"class":42},[36,168192,107],{"class":62},[36,168194,110],{"class":50},[36,168196,101],{"class":62},[36,168198,115],{"class":42},[36,168200,107],{"class":62},[36,168202,120],{"class":50},[36,168204,123],{"class":42},[36,168206,168207],{"class":38,"line":66},[36,168208,70],{"emptyLinePlaceholder":69},[36,168210,168211],{"class":38,"line":73},[36,168212,70],{"emptyLinePlaceholder":69},[36,168214,168215,168218,168220,168222,168224],{"class":38,"line":86},[36,168216,168217],{"class":42},"introduce(",[36,168219,627],{"class":50},[36,168221,630],{"class":42},[36,168223,633],{"class":62},[36,168225,123],{"class":42},[19,168227,168228],{},"顺序错了就会得到错误含义：",[26,168230,168232],{"className":28,"code":168231,"language":30,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,168233,168234],{"__ignoreMap":31},[36,168235,168236,168238,168240,168242,168244],{"class":38,"line":39},[36,168237,168217],{"class":42},[36,168239,633],{"class":62},[36,168241,630],{"class":42},[36,168243,627],{"class":50},[36,168245,123],{"class":42},[14,168247,168249],{"id":168248},"_73-关键字参数","7.3 关键字参数",[19,168251,168252],{},"关键字参数按参数名传递。",[26,168254,168256],{"className":28,"code":168255,"language":30,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,168257,168258,168278],{"__ignoreMap":31},[36,168259,168260,168262,168264,168266,168268,168270,168272,168274,168276],{"class":38,"line":39},[36,168261,168217],{"class":42},[36,168263,104],{"class":7598},[36,168265,47],{"class":46},[36,168267,627],{"class":50},[36,168269,630],{"class":42},[36,168271,115],{"class":7598},[36,168273,47],{"class":46},[36,168275,633],{"class":62},[36,168277,123],{"class":42},[36,168279,168280,168282,168284,168286,168288,168290,168292,168294,168296],{"class":38,"line":54},[36,168281,168217],{"class":42},[36,168283,115],{"class":7598},[36,168285,47],{"class":46},[36,168287,633],{"class":62},[36,168289,630],{"class":42},[36,168291,104],{"class":7598},[36,168293,47],{"class":46},[36,168295,627],{"class":50},[36,168297,123],{"class":42},[19,168299,120273],{},[650,168301,168302,168305],{},[653,168303,168304],{},"顺序不容易错。",[653,168306,168307],{},"调用时可读性更强。",[14,168309,168311],{"id":168310},"_74-默认参数","7.4 默认参数",[19,168313,168314],{},"默认参数给参数设置默认值。",[26,168316,168318],{"className":28,"code":168317,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,168319,168320,168336,168366,168370,168374,168384],{"__ignoreMap":31},[36,168321,168322,168324,168326,168329,168331,168334],{"class":38,"line":39},[36,168323,76],{"class":46},[36,168325,124432],{"class":79},[36,168327,168328],{"class":42},"(host, port",[36,168330,47],{"class":46},[36,168332,168333],{"class":62},"3306",[36,168335,1147],{"class":42},[36,168337,168338,168340,168342,168344,168347,168349,168351,168353,168355,168357,168360,168362,168364],{"class":38,"line":54},[36,168339,89],{"class":62},[36,168341,92],{"class":42},[36,168343,95],{"class":46},[36,168345,168346],{"class":50},"\"连接",[36,168348,101],{"class":62},[36,168350,29765],{"class":42},[36,168352,107],{"class":62},[36,168354,3413],{"class":50},[36,168356,101],{"class":62},[36,168358,168359],{"class":42},"port",[36,168361,107],{"class":62},[36,168363,604],{"class":50},[36,168365,123],{"class":42},[36,168367,168368],{"class":38,"line":66},[36,168369,70],{"emptyLinePlaceholder":69},[36,168371,168372],{"class":38,"line":73},[36,168373,70],{"emptyLinePlaceholder":69},[36,168375,168376,168379,168382],{"class":38,"line":86},[36,168377,168378],{"class":42},"connect(",[36,168380,168381],{"class":50},"\"localhost\"",[36,168383,123],{"class":42},[36,168385,168386,168388,168390,168392,168395],{"class":38,"line":126},[36,168387,168378],{"class":42},[36,168389,168381],{"class":50},[36,168391,630],{"class":42},[36,168393,168394],{"class":62},"6379",[36,168396,123],{"class":42},[19,168398,168399],{},"注意：默认参数必须放在非默认参数后面。",[19,168401,168402],{},"错误：",[26,168404,168406],{"className":28,"code":168405,"language":30,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,168407,168408,168424],{"__ignoreMap":31},[36,168409,168410,168412,168414,168417,168419,168421],{"class":38,"line":39},[36,168411,76],{"class":46},[36,168413,124432],{"class":79},[36,168415,168416],{"class":42},"(port",[36,168418,47],{"class":46},[36,168420,168333],{"class":62},[36,168422,168423],{"class":42},", host):\n",[36,168425,168426],{"class":38,"line":54},[36,168427,266],{"class":46},[19,168429,168430],{},"正确：",[26,168432,168434],{"className":28,"code":168433,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,168435,168436,168450],{"__ignoreMap":31},[36,168437,168438,168440,168442,168444,168446,168448],{"class":38,"line":39},[36,168439,76],{"class":46},[36,168441,124432],{"class":79},[36,168443,168328],{"class":42},[36,168445,47],{"class":46},[36,168447,168333],{"class":62},[36,168449,1147],{"class":42},[36,168451,168452],{"class":38,"line":54},[36,168453,266],{"class":46},[14,168455,168457],{"id":168456},"_75-默认参数的坑","7.5 默认参数的坑",[19,168459,168460],{},"不要使用可变对象作为默认参数。",[19,168462,159684],{},[26,168464,168466],{"className":28,"code":168465,"language":30,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,168467,168468,168483,168488,168495,168499,168503,168514],{"__ignoreMap":31},[36,168469,168470,168472,168475,168478,168480],{"class":38,"line":39},[36,168471,76],{"class":46},[36,168473,168474],{"class":79}," add_item",[36,168476,168477],{"class":42},"(item, items",[36,168479,47],{"class":46},[36,168481,168482],{"class":42},"[]):\n",[36,168484,168485],{"class":38,"line":54},[36,168486,168487],{"class":42},"    items.append(item)\n",[36,168489,168490,168492],{"class":38,"line":66},[36,168491,6474],{"class":46},[36,168493,168494],{"class":42}," items\n",[36,168496,168497],{"class":38,"line":73},[36,168498,70],{"emptyLinePlaceholder":69},[36,168500,168501],{"class":38,"line":86},[36,168502,70],{"emptyLinePlaceholder":69},[36,168504,168505,168507,168510,168512],{"class":38,"line":126},[36,168506,371],{"class":62},[36,168508,168509],{"class":42},"(add_item(",[36,168511,167386],{"class":50},[36,168513,1914],{"class":42},[36,168515,168516,168518,168520,168523],{"class":38,"line":131},[36,168517,371],{"class":62},[36,168519,168509],{"class":42},[36,168521,168522],{"class":50},"\"b\"",[36,168524,1914],{"class":42},[19,168526,168527],{},"第二次调用会复用第一次的列表。",[19,168529,157949],{},[26,168531,168533],{"className":28,"code":168532,"language":30,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,168534,168535,168549,168562,168571,168575],{"__ignoreMap":31},[36,168536,168537,168539,168541,168543,168545,168547],{"class":38,"line":39},[36,168538,76],{"class":46},[36,168540,168474],{"class":79},[36,168542,168477],{"class":42},[36,168544,47],{"class":46},[36,168546,98027],{"class":62},[36,168548,1147],{"class":42},[36,168550,168551,168553,168556,168558,168560],{"class":38,"line":54},[36,168552,5486],{"class":46},[36,168554,168555],{"class":42}," items ",[36,168557,41276],{"class":46},[36,168559,41282],{"class":62},[36,168561,153],{"class":42},[36,168563,168564,168567,168569],{"class":38,"line":66},[36,168565,168566],{"class":42},"        items ",[36,168568,47],{"class":46},[36,168570,54186],{"class":42},[36,168572,168573],{"class":38,"line":73},[36,168574,168487],{"class":42},[36,168576,168577,168579],{"class":38,"line":86},[36,168578,6474],{"class":46},[36,168580,168494],{"class":42},[14,168582,168584],{"id":168583},"_76-不定长参数","7.6 不定长参数",[1752,168586,168588],{"id":168587},"_761-args","7.6.1 *args",[19,168590,168591,168594],{},[33,168592,168593],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,168596,168598],{"className":28,"code":168597,"language":30,"meta":31,"style":31},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[33,168599,168600,168613,168621,168632,168641,168647,168651,168655,168674],{"__ignoreMap":31},[36,168601,168602,168604,168606,168608,168610],{"class":38,"line":39},[36,168603,76],{"class":46},[36,168605,1872],{"class":79},[36,168607,92],{"class":42},[36,168609,3011],{"class":46},[36,168611,168612],{"class":42},"args):\n",[36,168614,168615,168617,168619],{"class":38,"line":54},[36,168616,161368],{"class":42},[36,168618,47],{"class":46},[36,168620,49682],{"class":62},[36,168622,168623,168625,168627,168629],{"class":38,"line":66},[36,168624,5586],{"class":46},[36,168626,158241],{"class":42},[36,168628,28413],{"class":46},[36,168630,168631],{"class":42}," args:\n",[36,168633,168634,168636,168638],{"class":38,"line":73},[36,168635,162043],{"class":42},[36,168637,928],{"class":46},[36,168639,168640],{"class":42}," num\n",[36,168642,168643,168645],{"class":38,"line":86},[36,168644,6474],{"class":46},[36,168646,164348],{"class":42},[36,168648,168649],{"class":38,"line":126},[36,168650,70],{"emptyLinePlaceholder":69},[36,168652,168653],{"class":38,"line":131},[36,168654,70],{"emptyLinePlaceholder":69},[36,168656,168657,168659,168662,168664,168666,168668,168670,168672],{"class":38,"line":225},[36,168658,371],{"class":62},[36,168660,168661],{"class":42},"(add(",[36,168663,1906],{"class":62},[36,168665,630],{"class":42},[36,168667,1911],{"class":62},[36,168669,630],{"class":42},[36,168671,2634],{"class":62},[36,168673,1914],{"class":42},[36,168675,168676,168678,168680,168682,168684,168686,168688,168690,168692,168694,168696,168698],{"class":38,"line":235},[36,168677,371],{"class":62},[36,168679,168661],{"class":42},[36,168681,1906],{"class":62},[36,168683,630],{"class":42},[36,168685,1911],{"class":62},[36,168687,630],{"class":42},[36,168689,2634],{"class":62},[36,168691,630],{"class":42},[36,168693,2850],{"class":62},[36,168695,630],{"class":42},[36,168697,2875],{"class":62},[36,168699,1914],{"class":42},[1752,168701,168703],{"id":168702},"_762-kwargs","7.6.2 **kwargs",[19,168705,168706,168709],{},[33,168707,168708],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,168711,168713],{"className":28,"code":168712,"language":30,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,168714,168715,168728,168739,168745,168749,168753],{"__ignoreMap":31},[36,168716,168717,168719,168721,168723,168725],{"class":38,"line":39},[36,168718,76],{"class":46},[36,168720,164006],{"class":79},[36,168722,92],{"class":42},[36,168724,13040],{"class":46},[36,168726,168727],{"class":42},"kwargs):\n",[36,168729,168730,168732,168734,168736],{"class":38,"line":54},[36,168731,5586],{"class":46},[36,168733,166846],{"class":42},[36,168735,28413],{"class":46},[36,168737,168738],{"class":42}," kwargs.items():\n",[36,168740,168741,168743],{"class":38,"line":66},[36,168742,168],{"class":62},[36,168744,166858],{"class":42},[36,168746,168747],{"class":38,"line":73},[36,168748,70],{"emptyLinePlaceholder":69},[36,168750,168751],{"class":38,"line":86},[36,168752,70],{"emptyLinePlaceholder":69},[36,168754,168755,168757,168759,168761,168763,168765,168767,168769,168771,168773,168775,168777,168779],{"class":38,"line":126},[36,168756,164071],{"class":42},[36,168758,104],{"class":7598},[36,168760,47],{"class":46},[36,168762,627],{"class":50},[36,168764,630],{"class":42},[36,168766,115],{"class":7598},[36,168768,47],{"class":46},[36,168770,633],{"class":62},[36,168772,630],{"class":42},[36,168774,72617],{"class":7598},[36,168776,47],{"class":46},[36,168778,71615],{"class":50},[36,168780,123],{"class":42},[14,168782,168784],{"id":168783},"_77-参数解包","7.7 参数解包",[19,168786,168787],{},"列表或元组解包为位置参数：",[26,168789,168791],{"className":28,"code":168790,"language":30,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,168792,168793,168802,168817,168821,168825,168845],{"__ignoreMap":31},[36,168794,168795,168797,168799],{"class":38,"line":39},[36,168796,76],{"class":46},[36,168798,1872],{"class":79},[36,168800,168801],{"class":42},"(a, b, c):\n",[36,168803,168804,168806,168808,168810,168812,168814],{"class":38,"line":54},[36,168805,6474],{"class":46},[36,168807,1882],{"class":42},[36,168809,1885],{"class":46},[36,168811,13260],{"class":42},[36,168813,1885],{"class":46},[36,168815,168816],{"class":42}," c\n",[36,168818,168819],{"class":38,"line":66},[36,168820,70],{"emptyLinePlaceholder":69},[36,168822,168823],{"class":38,"line":73},[36,168824,70],{"emptyLinePlaceholder":69},[36,168826,168827,168829,168831,168833,168835,168837,168839,168841,168843],{"class":38,"line":86},[36,168828,166161],{"class":42},[36,168830,47],{"class":46},[36,168832,54574],{"class":42},[36,168834,1906],{"class":62},[36,168836,630],{"class":42},[36,168838,1911],{"class":62},[36,168840,630],{"class":42},[36,168842,2634],{"class":62},[36,168844,35598],{"class":42},[36,168846,168847,168849,168851,168853],{"class":38,"line":126},[36,168848,371],{"class":62},[36,168850,168661],{"class":42},[36,168852,3011],{"class":46},[36,168854,168855],{"class":42},"nums))\n",[19,168857,168858],{},"字典解包为关键字参数：",[26,168860,168862],{"className":28,"code":168861,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,168863,168864,168872,168898,168902,168906,168930],{"__ignoreMap":31},[36,168865,168866,168868,168870],{"class":38,"line":39},[36,168867,76],{"class":46},[36,168869,80],{"class":79},[36,168871,83],{"class":42},[36,168873,168874,168876,168878,168880,168882,168884,168886,168888,168890,168892,168894,168896],{"class":38,"line":54},[36,168875,89],{"class":62},[36,168877,92],{"class":42},[36,168879,95],{"class":46},[36,168881,604],{"class":50},[36,168883,101],{"class":62},[36,168885,104],{"class":42},[36,168887,107],{"class":62},[36,168889,6831],{"class":62},[36,168891,115],{"class":42},[36,168893,107],{"class":62},[36,168895,604],{"class":50},[36,168897,123],{"class":42},[36,168899,168900],{"class":38,"line":66},[36,168901,70],{"emptyLinePlaceholder":69},[36,168903,168904],{"class":38,"line":73},[36,168905,70],{"emptyLinePlaceholder":69},[36,168907,168908,168910,168912,168914,168916,168918,168920,168922,168924,168926,168928],{"class":38,"line":86},[36,168909,118653],{"class":42},[36,168911,47],{"class":46},[36,168913,6831],{"class":42},[36,168915,2251],{"class":50},[36,168917,2158],{"class":42},[36,168919,627],{"class":50},[36,168921,630],{"class":42},[36,168923,2260],{"class":50},[36,168925,2158],{"class":42},[36,168927,633],{"class":62},[36,168929,3982],{"class":42},[36,168931,168932,168934,168936],{"class":38,"line":126},[36,168933,168217],{"class":42},[36,168935,13040],{"class":46},[36,168937,168938],{"class":42},"info)\n",[14,168940,168942],{"id":168941},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168944,168945,168948],{},[33,168946,168947],{},"lambda"," 用于定义简单匿名函数。",[26,168950,168952],{"className":28,"code":168951,"language":30,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,168953,168954,168971],{"__ignoreMap":31},[36,168955,168956,168959,168961,168964,168967,168969],{"class":38,"line":39},[36,168957,168958],{"class":42},"add ",[36,168960,47],{"class":46},[36,168962,168963],{"class":46}," lambda",[36,168965,168966],{"class":42}," a, b: a ",[36,168968,1885],{"class":46},[36,168970,1888],{"class":42},[36,168972,168973,168975,168977,168979,168981,168983],{"class":38,"line":54},[36,168974,371],{"class":62},[36,168976,168661],{"class":42},[36,168978,1906],{"class":62},[36,168980,630],{"class":42},[36,168982,1911],{"class":62},[36,168984,1914],{"class":42},[19,168986,168987],{},"常和排序、过滤等函数一起使用。",[19,168989,168990],{},"按分数排序：",[26,168992,168994],{"className":28,"code":168993,"language":30,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[33,168995,168996,169004,169024,169044,169064,169068,169072,169095],{"__ignoreMap":31},[36,168997,168998,169000,169002],{"class":38,"line":39},[36,168999,161777],{"class":42},[36,169001,47],{"class":46},[36,169003,57795],{"class":42},[36,169005,169006,169008,169010,169012,169014,169016,169018,169020,169022],{"class":38,"line":54},[36,169007,150721],{"class":42},[36,169009,2251],{"class":50},[36,169011,2158],{"class":42},[36,169013,627],{"class":50},[36,169015,630],{"class":42},[36,169017,2269],{"class":50},[36,169019,2158],{"class":42},[36,169021,638],{"class":62},[36,169023,7313],{"class":42},[36,169025,169026,169028,169030,169032,169034,169036,169038,169040,169042],{"class":38,"line":66},[36,169027,150721],{"class":42},[36,169029,2251],{"class":50},[36,169031,2158],{"class":42},[36,169033,1716],{"class":50},[36,169035,630],{"class":42},[36,169037,2269],{"class":50},[36,169039,2158],{"class":42},[36,169041,3365],{"class":62},[36,169043,7313],{"class":42},[36,169045,169046,169048,169050,169052,169054,169056,169058,169060,169062],{"class":38,"line":73},[36,169047,150721],{"class":42},[36,169049,2251],{"class":50},[36,169051,2158],{"class":42},[36,169053,161792],{"class":50},[36,169055,630],{"class":42},[36,169057,2269],{"class":50},[36,169059,2158],{"class":42},[36,169061,2962],{"class":62},[36,169063,7313],{"class":42},[36,169065,169066],{"class":38,"line":86},[36,169067,35598],{"class":42},[36,169069,169070],{"class":38,"line":126},[36,169071,70],{"emptyLinePlaceholder":69},[36,169073,169074,169077,169079,169081,169083,169085,169087,169089,169091,169093],{"class":38,"line":131},[36,169075,169076],{"class":42},"students.sort(",[36,169078,156007],{"class":7598},[36,169080,156010],{"class":46},[36,169082,156013],{"class":42},[36,169084,2269],{"class":50},[36,169086,114541],{"class":42},[36,169088,165589],{"class":7598},[36,169090,47],{"class":46},[36,169092,33830],{"class":62},[36,169094,123],{"class":42},[36,169096,169097,169099],{"class":38,"line":225},[36,169098,371],{"class":62},[36,169100,167056],{"class":42},[19,169102,169103,169104,169106],{},"如果逻辑复杂，不要硬写 ",[33,169105,168947],{},"，定义普通函数更清晰。",[14,169108,169110],{"id":169109},"_79-函数作为参数","7.9 函数作为参数",[19,169112,169113],{},"函数可以作为参数传给另一个函数。",[26,169115,169117],{"className":28,"code":169116,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[33,169118,169119,169127,169137,169141,169145,169155,169162,169166,169170],{"__ignoreMap":31},[36,169120,169121,169123,169125],{"class":38,"line":39},[36,169122,76],{"class":46},[36,169124,1872],{"class":79},[36,169126,1875],{"class":42},[36,169128,169129,169131,169133,169135],{"class":38,"line":54},[36,169130,6474],{"class":46},[36,169132,1882],{"class":42},[36,169134,1885],{"class":46},[36,169136,1888],{"class":42},[36,169138,169139],{"class":38,"line":66},[36,169140,70],{"emptyLinePlaceholder":69},[36,169142,169143],{"class":38,"line":73},[36,169144,70],{"emptyLinePlaceholder":69},[36,169146,169147,169149,169152],{"class":38,"line":86},[36,169148,76],{"class":46},[36,169150,169151],{"class":79}," calculate",[36,169153,169154],{"class":42},"(a, b, func):\n",[36,169156,169157,169159],{"class":38,"line":126},[36,169158,6474],{"class":46},[36,169160,169161],{"class":42}," func(a, b)\n",[36,169163,169164],{"class":38,"line":131},[36,169165,70],{"emptyLinePlaceholder":69},[36,169167,169168],{"class":38,"line":225},[36,169169,70],{"emptyLinePlaceholder":69},[36,169171,169172,169174,169177,169179,169181,169183],{"class":38,"line":235},[36,169173,371],{"class":62},[36,169175,169176],{"class":42},"(calculate(",[36,169178,3002],{"class":62},[36,169180,630],{"class":42},[36,169182,3254],{"class":62},[36,169184,169185],{"class":42},", add))\n",[19,169187,169188],{},"这种思想在排序、回调、框架中经常出现。",[14,169190,169192],{"id":169191},"_710-mapfiltersorted","7.10 map、filter、sorted",[1752,169194,169196],{"id":169195},"_7101-map","7.10.1 map",[19,169198,169199,169201],{},[33,169200,76389],{}," 对每个元素执行函数。",[26,169203,169205],{"className":28,"code":169204,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,169206,169207,169231,169254],{"__ignoreMap":31},[36,169208,169209,169211,169213,169215,169217,169219,169221,169223,169225,169227,169229],{"class":38,"line":39},[36,169210,166161],{"class":42},[36,169212,47],{"class":46},[36,169214,54574],{"class":42},[36,169216,1906],{"class":62},[36,169218,630],{"class":42},[36,169220,1911],{"class":62},[36,169222,630],{"class":42},[36,169224,2634],{"class":62},[36,169226,630],{"class":42},[36,169228,2850],{"class":62},[36,169230,35598],{"class":42},[36,169232,169233,169235,169237,169240,169242,169244,169247,169249,169251],{"class":38,"line":54},[36,169234,163367],{"class":42},[36,169236,47],{"class":46},[36,169238,169239],{"class":62}," map",[36,169241,92],{"class":42},[36,169243,168947],{"class":46},[36,169245,169246],{"class":42}," x: x ",[36,169248,3011],{"class":46},[36,169250,17130],{"class":62},[36,169252,169253],{"class":42},", nums)\n",[36,169255,169256,169258,169260,169262],{"class":38,"line":66},[36,169257,371],{"class":62},[36,169259,92],{"class":42},[36,169261,156131],{"class":62},[36,169263,168129],{"class":42},[1752,169265,169267],{"id":169266},"_7102-filter","7.10.2 filter",[19,169269,169270,169272],{},[33,169271,82395],{}," 保留满足条件的元素。",[26,169274,169276],{"className":28,"code":169275,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,169277,169278,169306,169331],{"__ignoreMap":31},[36,169279,169280,169282,169284,169286,169288,169290,169292,169294,169296,169298,169300,169302,169304],{"class":38,"line":39},[36,169281,166161],{"class":42},[36,169283,47],{"class":46},[36,169285,54574],{"class":42},[36,169287,1906],{"class":62},[36,169289,630],{"class":42},[36,169291,1911],{"class":62},[36,169293,630],{"class":42},[36,169295,2634],{"class":62},[36,169297,630],{"class":42},[36,169299,2850],{"class":62},[36,169301,630],{"class":42},[36,169303,2875],{"class":62},[36,169305,35598],{"class":42},[36,169307,169308,169310,169312,169315,169317,169319,169321,169323,169325,169327,169329],{"class":38,"line":54},[36,169309,163367],{"class":42},[36,169311,47],{"class":46},[36,169313,169314],{"class":62}," filter",[36,169316,92],{"class":42},[36,169318,168947],{"class":46},[36,169320,169246],{"class":42},[36,169322,2884],{"class":46},[36,169324,17130],{"class":62},[36,169326,103899],{"class":46},[36,169328,899],{"class":62},[36,169330,169253],{"class":42},[36,169332,169333,169335,169337,169339],{"class":38,"line":66},[36,169334,371],{"class":62},[36,169336,92],{"class":42},[36,169338,156131],{"class":62},[36,169340,168129],{"class":42},[1752,169342,169344],{"id":169343},"_7103-sorted","7.10.3 sorted",[19,169346,169347,169349],{},[33,169348,167297],{}," 返回排序后的新列表。",[26,169351,169353],{"className":28,"code":169352,"language":30,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[33,169354,169355,169363,169383,169403,169423,169427,169431,169460],{"__ignoreMap":31},[36,169356,169357,169359,169361],{"class":38,"line":39},[36,169358,161777],{"class":42},[36,169360,47],{"class":46},[36,169362,57795],{"class":42},[36,169364,169365,169367,169369,169371,169373,169375,169377,169379,169381],{"class":38,"line":54},[36,169366,150721],{"class":42},[36,169368,2251],{"class":50},[36,169370,2158],{"class":42},[36,169372,627],{"class":50},[36,169374,630],{"class":42},[36,169376,2269],{"class":50},[36,169378,2158],{"class":42},[36,169380,638],{"class":62},[36,169382,7313],{"class":42},[36,169384,169385,169387,169389,169391,169393,169395,169397,169399,169401],{"class":38,"line":66},[36,169386,150721],{"class":42},[36,169388,2251],{"class":50},[36,169390,2158],{"class":42},[36,169392,1716],{"class":50},[36,169394,630],{"class":42},[36,169396,2269],{"class":50},[36,169398,2158],{"class":42},[36,169400,3365],{"class":62},[36,169402,7313],{"class":42},[36,169404,169405,169407,169409,169411,169413,169415,169417,169419,169421],{"class":38,"line":73},[36,169406,150721],{"class":42},[36,169408,2251],{"class":50},[36,169410,2158],{"class":42},[36,169412,161792],{"class":50},[36,169414,630],{"class":42},[36,169416,2269],{"class":50},[36,169418,2158],{"class":42},[36,169420,2962],{"class":62},[36,169422,7313],{"class":42},[36,169424,169425],{"class":38,"line":86},[36,169426,35598],{"class":42},[36,169428,169429],{"class":38,"line":126},[36,169430,70],{"emptyLinePlaceholder":69},[36,169432,169433,169435,169437,169439,169442,169444,169446,169448,169450,169452,169454,169456,169458],{"class":38,"line":131},[36,169434,163367],{"class":42},[36,169436,47],{"class":46},[36,169438,165665],{"class":62},[36,169440,169441],{"class":42},"(students, ",[36,169443,156007],{"class":7598},[36,169445,156010],{"class":46},[36,169447,156013],{"class":42},[36,169449,2269],{"class":50},[36,169451,114541],{"class":42},[36,169453,165589],{"class":7598},[36,169455,47],{"class":46},[36,169457,33830],{"class":62},[36,169459,123],{"class":42},[36,169461,169462,169464],{"class":38,"line":225},[36,169463,371],{"class":62},[36,169465,78930],{"class":42},[14,169467,169469],{"id":169468},"_711-闭包入门","7.11 闭包入门",[19,169471,169472],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,169474,169476],{"className":28,"code":169475,"language":30,"meta":31,"style":31},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[33,169477,169478,169488,169498,169509,169513,169520,169524,169528,169542],{"__ignoreMap":31},[36,169479,169480,169482,169485],{"class":38,"line":39},[36,169481,76],{"class":46},[36,169483,169484],{"class":79}," outer",[36,169486,169487],{"class":42},"(base):\n",[36,169489,169490,169492,169495],{"class":38,"line":54},[36,169491,158],{"class":46},[36,169493,169494],{"class":79}," inner",[36,169496,169497],{"class":42},"(num):\n",[36,169499,169500,169502,169505,169507],{"class":38,"line":66},[36,169501,736],{"class":46},[36,169503,169504],{"class":42}," base ",[36,169506,1885],{"class":46},[36,169508,168640],{"class":42},[36,169510,169511],{"class":38,"line":73},[36,169512,70],{"emptyLinePlaceholder":69},[36,169514,169515,169517],{"class":38,"line":86},[36,169516,6474],{"class":46},[36,169518,169519],{"class":42}," inner\n",[36,169521,169522],{"class":38,"line":126},[36,169523,70],{"emptyLinePlaceholder":69},[36,169525,169526],{"class":38,"line":131},[36,169527,70],{"emptyLinePlaceholder":69},[36,169529,169530,169533,169535,169538,169540],{"class":38,"line":225},[36,169531,169532],{"class":42},"add_10 ",[36,169534,47],{"class":46},[36,169536,169537],{"class":42}," outer(",[36,169539,3002],{"class":62},[36,169541,123],{"class":42},[36,169543,169544,169546,169549,169551],{"class":38,"line":235},[36,169545,371],{"class":62},[36,169547,169548],{"class":42},"(add_10(",[36,169550,2875],{"class":62},[36,169552,1914],{"class":42},[19,169554,169555],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169557,169559],{"id":169558},"_712-装饰器入门","7.12 装饰器入门",[19,169561,169562],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,169564,169566],{"className":28,"code":169565,"language":30,"meta":31,"style":31},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[33,169567,169568,169577,169586,169597,169602,169613,169617,169624,169628,169632,169637,169645,169655,169659,169663],{"__ignoreMap":31},[36,169569,169570,169572,169574],{"class":38,"line":39},[36,169571,76],{"class":46},[36,169573,89533],{"class":79},[36,169575,169576],{"class":42},"(func):\n",[36,169578,169579,169581,169584],{"class":38,"line":54},[36,169580,158],{"class":46},[36,169582,169583],{"class":79}," wrapper",[36,169585,34306],{"class":42},[36,169587,169588,169590,169592,169595],{"class":38,"line":66},[36,169589,168],{"class":62},[36,169591,92],{"class":42},[36,169593,169594],{"class":50},"\"函数开始执行\"",[36,169596,123],{"class":42},[36,169598,169599],{"class":38,"line":73},[36,169600,169601],{"class":42},"        func()\n",[36,169603,169604,169606,169608,169611],{"class":38,"line":86},[36,169605,168],{"class":62},[36,169607,92],{"class":42},[36,169609,169610],{"class":50},"\"函数执行结束\"",[36,169612,123],{"class":42},[36,169614,169615],{"class":38,"line":126},[36,169616,70],{"emptyLinePlaceholder":69},[36,169618,169619,169621],{"class":38,"line":131},[36,169620,6474],{"class":46},[36,169622,169623],{"class":42}," wrapper\n",[36,169625,169626],{"class":38,"line":225},[36,169627,70],{"emptyLinePlaceholder":69},[36,169629,169630],{"class":38,"line":235},[36,169631,70],{"emptyLinePlaceholder":69},[36,169633,169634],{"class":38,"line":377},[36,169635,169636],{"class":79},"@log\n",[36,169638,169639,169641,169643],{"class":38,"line":617},[36,169640,76],{"class":46},[36,169642,163057],{"class":79},[36,169644,34306],{"class":42},[36,169646,169647,169649,169651,169653],{"class":38,"line":643},[36,169648,89],{"class":62},[36,169650,92],{"class":42},[36,169652,8226],{"class":50},[36,169654,123],{"class":42},[36,169656,169657],{"class":38,"line":921},[36,169658,70],{"emptyLinePlaceholder":69},[36,169660,169661],{"class":38,"line":934},[36,169662,70],{"emptyLinePlaceholder":69},[36,169664,169665],{"class":38,"line":939},[36,169666,163092],{"class":42},[19,169668,160335],{},[26,169670,169672],{"className":28,"code":169671,"language":30,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,169673,169674],{"__ignoreMap":31},[36,169675,169676,169679,169681],{"class":38,"line":39},[36,169677,169678],{"class":42},"say_hello ",[36,169680,47],{"class":46},[36,169682,169683],{"class":42}," log(say_hello)\n",[19,169685,169686],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169688,169690],{"id":169689},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,169692,169694],{"className":28,"code":169693,"language":30,"meta":31,"style":31},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[33,169695,169696,169704,169721,169731,169750,169760,169767,169771,169777,169781,169785,169789,169797,169807,169811,169815],{"__ignoreMap":31},[36,169697,169698,169700,169702],{"class":38,"line":39},[36,169699,76],{"class":46},[36,169701,89533],{"class":79},[36,169703,169576],{"class":42},[36,169705,169706,169708,169710,169712,169714,169717,169719],{"class":38,"line":54},[36,169707,158],{"class":46},[36,169709,169583],{"class":79},[36,169711,92],{"class":42},[36,169713,3011],{"class":46},[36,169715,169716],{"class":42},"args, ",[36,169718,13040],{"class":46},[36,169720,168727],{"class":42},[36,169722,169723,169725,169727,169729],{"class":38,"line":66},[36,169724,168],{"class":62},[36,169726,92],{"class":42},[36,169728,169594],{"class":50},[36,169730,123],{"class":42},[36,169732,169733,169736,169738,169741,169743,169745,169747],{"class":38,"line":73},[36,169734,169735],{"class":42},"        result ",[36,169737,47],{"class":46},[36,169739,169740],{"class":42}," func(",[36,169742,3011],{"class":46},[36,169744,169716],{"class":42},[36,169746,13040],{"class":46},[36,169748,169749],{"class":42},"kwargs)\n",[36,169751,169752,169754,169756,169758],{"class":38,"line":86},[36,169753,168],{"class":62},[36,169755,92],{"class":42},[36,169757,169610],{"class":50},[36,169759,123],{"class":42},[36,169761,169762,169764],{"class":38,"line":126},[36,169763,736],{"class":46},[36,169765,169766],{"class":42}," result\n",[36,169768,169769],{"class":38,"line":131},[36,169770,70],{"emptyLinePlaceholder":69},[36,169772,169773,169775],{"class":38,"line":225},[36,169774,6474],{"class":46},[36,169776,169623],{"class":42},[36,169778,169779],{"class":38,"line":235},[36,169780,70],{"emptyLinePlaceholder":69},[36,169782,169783],{"class":38,"line":377},[36,169784,70],{"emptyLinePlaceholder":69},[36,169786,169787],{"class":38,"line":617},[36,169788,169636],{"class":79},[36,169790,169791,169793,169795],{"class":38,"line":643},[36,169792,76],{"class":46},[36,169794,1872],{"class":79},[36,169796,1875],{"class":42},[36,169798,169799,169801,169803,169805],{"class":38,"line":921},[36,169800,6474],{"class":46},[36,169802,1882],{"class":42},[36,169804,1885],{"class":46},[36,169806,1888],{"class":42},[36,169808,169809],{"class":38,"line":934},[36,169810,70],{"emptyLinePlaceholder":69},[36,169812,169813],{"class":38,"line":939},[36,169814,70],{"emptyLinePlaceholder":69},[36,169816,169817,169819,169821,169823,169825,169827],{"class":38,"line":949},[36,169818,371],{"class":62},[36,169820,168661],{"class":42},[36,169822,3002],{"class":62},[36,169824,630],{"class":42},[36,169826,3254],{"class":62},[36,169828,1914],{"class":42},[19,169830,169831,169832,302,169834,169836],{},"这个写法使用 ",[33,169833,168593],{},[33,169835,168708],{}," 接收原函数的所有参数。",[14,169838,169840],{"id":169839},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169842,125631],{},[650,169844,169845,169848,169851],{},[653,169846,169847],{},"给定一组学生数据。",[653,169849,169850],{},"封装函数，根据传入规则筛选学生。",[653,169852,169853],{},"筛选及格、优秀、未成年学生。",[19,169855,12414],{},[26,169857,169859],{"className":28,"code":169858,"language":30,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[33,169860,169861,169869,169897,169925,169953,169957,169961,169965,169975,169983,169993,170000,170005,170011,170015,170019,170043,170066,170089,170093,170100,170107],{"__ignoreMap":31},[36,169862,169863,169865,169867],{"class":38,"line":39},[36,169864,161777],{"class":42},[36,169866,47],{"class":46},[36,169868,57795],{"class":42},[36,169870,169871,169873,169875,169877,169879,169881,169883,169885,169887,169889,169891,169893,169895],{"class":38,"line":54},[36,169872,150721],{"class":42},[36,169874,2251],{"class":50},[36,169876,2158],{"class":42},[36,169878,627],{"class":50},[36,169880,630],{"class":42},[36,169882,2260],{"class":50},[36,169884,2158],{"class":42},[36,169886,633],{"class":62},[36,169888,630],{"class":42},[36,169890,2269],{"class":50},[36,169892,2158],{"class":42},[36,169894,638],{"class":62},[36,169896,7313],{"class":42},[36,169898,169899,169901,169903,169905,169907,169909,169911,169913,169915,169917,169919,169921,169923],{"class":38,"line":66},[36,169900,150721],{"class":42},[36,169902,2251],{"class":50},[36,169904,2158],{"class":42},[36,169906,1716],{"class":50},[36,169908,630],{"class":42},[36,169910,2260],{"class":50},[36,169912,2158],{"class":42},[36,169914,3180],{"class":62},[36,169916,630],{"class":42},[36,169918,2269],{"class":50},[36,169920,2158],{"class":42},[36,169922,3365],{"class":62},[36,169924,7313],{"class":42},[36,169926,169927,169929,169931,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951],{"class":38,"line":73},[36,169928,150721],{"class":42},[36,169930,2251],{"class":50},[36,169932,2158],{"class":42},[36,169934,161792],{"class":50},[36,169936,630],{"class":42},[36,169938,2260],{"class":50},[36,169940,2158],{"class":42},[36,169942,3229],{"class":62},[36,169944,630],{"class":42},[36,169946,2269],{"class":50},[36,169948,2158],{"class":42},[36,169950,3436],{"class":62},[36,169952,7313],{"class":42},[36,169954,169955],{"class":38,"line":86},[36,169956,35598],{"class":42},[36,169958,169959],{"class":38,"line":126},[36,169960,70],{"emptyLinePlaceholder":69},[36,169962,169963],{"class":38,"line":131},[36,169964,70],{"emptyLinePlaceholder":69},[36,169966,169967,169969,169972],{"class":38,"line":225},[36,169968,76],{"class":46},[36,169970,169971],{"class":79}," filter_students",[36,169973,169974],{"class":42},"(students, condition):\n",[36,169976,169977,169979,169981],{"class":38,"line":235},[36,169978,163284],{"class":42},[36,169980,47],{"class":46},[36,169982,54186],{"class":42},[36,169984,169985,169987,169989,169991],{"class":38,"line":377},[36,169986,5586],{"class":46},[36,169988,154198],{"class":42},[36,169990,28413],{"class":46},[36,169992,154203],{"class":42},[36,169994,169995,169997],{"class":38,"line":617},[36,169996,890],{"class":46},[36,169998,169999],{"class":42}," condition(student):\n",[36,170001,170002],{"class":38,"line":643},[36,170003,170004],{"class":42},"            result.append(student)\n",[36,170006,170007,170009],{"class":38,"line":921},[36,170008,6474],{"class":46},[36,170010,169766],{"class":42},[36,170012,170013],{"class":38,"line":934},[36,170014,70],{"emptyLinePlaceholder":69},[36,170016,170017],{"class":38,"line":939},[36,170018,70],{"emptyLinePlaceholder":69},[36,170020,170021,170023,170025,170028,170030,170033,170035,170037,170039,170041],{"class":38,"line":949},[36,170022,167762],{"class":42},[36,170024,47],{"class":46},[36,170026,170027],{"class":42}," filter_students(students, ",[36,170029,168947],{"class":46},[36,170031,170032],{"class":42}," s: s[",[36,170034,2269],{"class":50},[36,170036,6826],{"class":42},[36,170038,2127],{"class":46},[36,170040,159898],{"class":62},[36,170042,123],{"class":42},[36,170044,170045,170048,170050,170052,170054,170056,170058,170060,170062,170064],{"class":38,"line":962},[36,170046,170047],{"class":42},"excellent ",[36,170049,47],{"class":46},[36,170051,170027],{"class":42},[36,170053,168947],{"class":46},[36,170055,170032],{"class":42},[36,170057,2269],{"class":50},[36,170059,6826],{"class":42},[36,170061,2127],{"class":46},[36,170063,159849],{"class":62},[36,170065,123],{"class":42},[36,170067,170068,170071,170073,170075,170077,170079,170081,170083,170085,170087],{"class":38,"line":974},[36,170069,170070],{"class":42},"under_age ",[36,170072,47],{"class":46},[36,170074,170027],{"class":42},[36,170076,168947],{"class":46},[36,170078,170032],{"class":42},[36,170080,2260],{"class":50},[36,170082,6826],{"class":42},[36,170084,3463],{"class":46},[36,170086,158346],{"class":62},[36,170088,123],{"class":42},[36,170090,170091],{"class":38,"line":979},[36,170092,70],{"emptyLinePlaceholder":69},[36,170094,170095,170097],{"class":38,"line":994},[36,170096,371],{"class":62},[36,170098,170099],{"class":42},"(passed)\n",[36,170101,170102,170104],{"class":38,"line":1006},[36,170103,371],{"class":62},[36,170105,170106],{"class":42},"(excellent)\n",[36,170108,170109,170111],{"class":38,"line":1011},[36,170110,371],{"class":62},[36,170112,170113],{"class":42},"(under_age)\n",[14,170115,170117],{"id":170116},"_715-易错点","7.15 易错点",[650,170119,170120,170123,170131,170136,170147],{},[653,170121,170122],{},"默认参数不要写可变对象。",[653,170124,170125,170127,170128,170130],{},[33,170126,168593],{}," 是元组，",[33,170129,168708],{}," 是字典。",[653,170132,170133,170135],{},[33,170134,168947],{}," 只适合简单表达式。",[653,170137,170138,302,170140,170142,170143,170146],{},[33,170139,76389],{},[33,170141,82395],{}," 的结果是迭代器，常用 ",[33,170144,170145],{},"list()"," 转换查看。",[653,170148,170149],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170151,170153],{"id":170152},"_716-本章练习","7.16 本章练习",[650,170155,170156,170163,170169,170174,170179],{},[653,170157,170158,170159,170162],{},"写函数 ",[33,170160,170161],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[653,170164,170158,170165,170168],{},[33,170166,170167],{},"print_user(**kwargs)","，输出用户所有字段。",[653,170170,2459,170171,170173],{},[33,170172,168947],{}," 对学生列表按年龄排序。",[653,170175,2459,170176,170178],{},[33,170177,82395],{}," 找出成绩不及格的学生。",[653,170180,170181],{},"写一个装饰器，统计函数执行前后的提示信息。",[2467,170183,170184],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":170186},[170187,170188,170189,170190,170191,170192,170196,170197,170198,170199,170204,170205,170206,170207,170208,170209],{"id":168045,"depth":54,"text":168046},{"id":168159,"depth":54,"text":168160},{"id":168248,"depth":54,"text":168249},{"id":168310,"depth":54,"text":168311},{"id":168456,"depth":54,"text":168457},{"id":168583,"depth":54,"text":168584,"children":170193},[170194,170195],{"id":168587,"depth":66,"text":168588},{"id":168702,"depth":66,"text":168703},{"id":168783,"depth":54,"text":168784},{"id":168941,"depth":54,"text":168942},{"id":169109,"depth":54,"text":169110},{"id":169191,"depth":54,"text":169192,"children":170200},[170201,170202,170203],{"id":169195,"depth":66,"text":169196},{"id":169266,"depth":66,"text":169267},{"id":169343,"depth":66,"text":169344},{"id":169468,"depth":54,"text":169469},{"id":169558,"depth":54,"text":169559},{"id":169689,"depth":54,"text":169690},{"id":169839,"depth":54,"text":169840},{"id":170116,"depth":54,"text":170117},{"id":170152,"depth":54,"text":170153},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168037,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170216,"title":170217,"body":170218,"description":2493,"extension":2494,"meta":172737,"navigation":69,"path":172738,"seo":172739,"stem":172740,"__hash__":172741},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170219,"toc":172712},[170220,170223,170227,170230,170233,170264,170268,170272,170275,170302,170306,170309,170360,170363,170378,170381,170416,170420,170422,170446,170449,170509,170513,170517,170520,170577,170580,170600,170604,170607,170670,170674,170677,170733,170740,170764,170768,170771,170834,170838,170843,170894,170897,170901,170906,170973,170976,171058,171062,171067,171118,171121,171125,171128,171131,171139,171142,171188,171191,171237,171241,171247,171291,171294,171340,171343,171383,171386,171447,171451,171454,171544,171547,171689,171692,171759,171763,171766,171769,171910,171913,171991,171994,172170,172174,172176,172187,172189,172388,172392,172636,172640,172674,172678,172709],[10,170221,170217],{"id":170222},"_8-文件操作",[14,170224,170226],{"id":170225},"_81-文件操作的意义","8.1 文件操作的意义",[19,170228,170229],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170231,170232],{},"常见文件类型：",[650,170234,170235,170241,170247,170253,170259],{},[653,170236,170237,170240],{},[33,170238,170239],{},".txt","：普通文本。",[653,170242,170243,170246],{},[33,170244,170245],{},".csv","：表格文本。",[653,170248,170249,170252],{},[33,170250,170251],{},".json","：结构化数据。",[653,170254,170255,170258],{},[33,170256,170257],{},".log","：日志文件。",[653,170260,170261,170263],{},[33,170262,148691],{},"：Python 源代码。",[14,170265,170267],{"id":170266},"_82-路径","8.2 路径",[1752,170269,170271],{"id":170270},"_821-相对路径","8.2.1 相对路径",[19,170273,170274],{},"相对当前运行目录：",[26,170276,170278],{"className":28,"code":170277,"language":30,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,170279,170280],{"__ignoreMap":31},[36,170281,170282,170284,170286,170288,170290,170292,170294,170296,170298,170300],{"class":38,"line":39},[36,170283,89257],{"class":62},[36,170285,92],{"class":42},[36,170287,149132],{"class":50},[36,170289,630],{"class":42},[36,170291,149137],{"class":50},[36,170293,630],{"class":42},[36,170295,149142],{"class":7598},[36,170297,47],{"class":46},[36,170299,149147],{"class":50},[36,170301,123],{"class":42},[1752,170303,170305],{"id":170304},"_822-绝对路径","8.2.2 绝对路径",[19,170307,170308],{},"从根目录或盘符开始：",[26,170310,170312],{"className":28,"code":170311,"language":30,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,170313,170314,170337],{"__ignoreMap":31},[36,170315,170316,170318,170320,170323,170325,170327,170329,170331,170333,170335],{"class":38,"line":39},[36,170317,89257],{"class":62},[36,170319,92],{"class":42},[36,170321,170322],{"class":50},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,170324,630],{"class":42},[36,170326,149137],{"class":50},[36,170328,630],{"class":42},[36,170330,149142],{"class":7598},[36,170332,47],{"class":46},[36,170334,149147],{"class":50},[36,170336,123],{"class":42},[36,170338,170339,170341,170343,170346,170348,170350,170352,170354,170356,170358],{"class":38,"line":54},[36,170340,89257],{"class":62},[36,170342,92],{"class":42},[36,170344,170345],{"class":50},"\"D:\u002Fdata\u002Fdata.txt\"",[36,170347,630],{"class":42},[36,170349,149137],{"class":50},[36,170351,630],{"class":42},[36,170353,149142],{"class":7598},[36,170355,47],{"class":46},[36,170357,149147],{"class":50},[36,170359,123],{"class":42},[19,170361,170362],{},"Windows 路径建议写成：",[26,170364,170366],{"className":28,"code":170365,"language":30,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,170367,170368],{"__ignoreMap":31},[36,170369,170370,170373,170375],{"class":38,"line":39},[36,170371,170372],{"class":42},"path ",[36,170374,47],{"class":46},[36,170376,170377],{"class":50}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170379,170380],{},"或原始字符串：",[26,170382,170384],{"className":28,"code":170383,"language":30,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,170385,170386],{"__ignoreMap":31},[36,170387,170388,170390,170392,170394,170396,170399,170402,170405,170407,170409,170411,170414],{"class":38,"line":39},[36,170389,170372],{"class":42},[36,170391,47],{"class":46},[36,170393,19494],{"class":46},[36,170395,604],{"class":50},[36,170397,170398],{"class":50326},"D:",[36,170400,170401],{"class":62},"\\d",[36,170403,170404],{"class":50326},"ata",[36,170406,170401],{"class":62},[36,170408,170404],{"class":50326},[36,170410,3113],{"class":62},[36,170412,170413],{"class":50326},"txt",[36,170415,2326],{"class":50},[14,170417,170419],{"id":170418},"_83-open函数","8.3 open函数",[19,170421,7564],{},[26,170423,170425],{"className":28,"code":170424,"language":30,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,170426,170427],{"__ignoreMap":31},[36,170428,170429,170431,170433,170435,170438,170440,170442,170444],{"class":38,"line":39},[36,170430,47703],{"class":7598},[36,170432,15941],{"class":46},[36,170434,149127],{"class":62},[36,170436,170437],{"class":42},"(文件路径, 打开模式, ",[36,170439,149142],{"class":7598},[36,170441,47],{"class":46},[36,170443,149147],{"class":50},[36,170445,123],{"class":42},[19,170447,170448],{},"常见模式：",[2698,170450,170451,170460],{},[2701,170452,170453],{},[2704,170454,170455,170458],{},[2707,170456,170457],{},"模式",[2707,170459,28239],{},[2744,170461,170462,170471,170480,170489,170499],{},[2704,170463,170464,170468],{},[2749,170465,170466],{},[33,170467,3224],{},[2749,170469,170470],{},"只读，文件不存在会报错",[2704,170472,170473,170477],{},[2749,170474,170475],{},[33,170476,3349],{},[2749,170478,170479],{},"只写，文件不存在会创建，存在会清空",[2704,170481,170482,170486],{},[2749,170483,170484],{},[33,170485,2796],{},[2749,170487,170488],{},"追加，文件不存在会创建",[2704,170490,170491,170496],{},[2749,170492,170493],{},[33,170494,170495],{},"rb",[2749,170497,170498],{},"二进制只读",[2704,170500,170501,170506],{},[2749,170502,170503],{},[33,170504,170505],{},"wb",[2749,170507,170508],{},"二进制只写",[14,170510,170512],{"id":170511},"_84-读取文件","8.4 读取文件",[1752,170514,170516],{"id":170515},"_841-read","8.4.1 read",[19,170518,170519],{},"一次读取全部内容：",[26,170521,170523],{"className":28,"code":170522,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,170524,170525,170551,170563,170570],{"__ignoreMap":31},[36,170526,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547,170549],{"class":38,"line":39},[36,170528,47703],{"class":7598},[36,170530,15941],{"class":46},[36,170532,149127],{"class":62},[36,170534,92],{"class":42},[36,170536,149132],{"class":50},[36,170538,630],{"class":42},[36,170540,149137],{"class":50},[36,170542,630],{"class":42},[36,170544,149142],{"class":7598},[36,170546,47],{"class":46},[36,170548,149147],{"class":50},[36,170550,123],{"class":42},[36,170552,170553,170556,170558,170560],{"class":38,"line":54},[36,170554,170555],{"class":42},"content ",[36,170557,47],{"class":46},[36,170559,150489],{"class":7598},[36,170561,170562],{"class":42},".read()\n",[36,170564,170565,170567],{"class":38,"line":66},[36,170566,371],{"class":62},[36,170568,170569],{"class":42},"(content)\n",[36,170571,170572,170574],{"class":38,"line":73},[36,170573,47703],{"class":7598},[36,170575,170576],{"class":42},".close()\n",[19,170578,170579],{},"可以指定读取字符数：",[26,170581,170583],{"className":28,"code":170582,"language":30,"meta":31,"style":31},"content = file.read(10)\n",[33,170584,170585],{"__ignoreMap":31},[36,170586,170587,170589,170591,170593,170596,170598],{"class":38,"line":39},[36,170588,170555],{"class":42},[36,170590,47],{"class":46},[36,170592,150489],{"class":7598},[36,170594,170595],{"class":42},".read(",[36,170597,3002],{"class":62},[36,170599,123],{"class":42},[1752,170601,170603],{"id":170602},"_842-readline","8.4.2 readline",[19,170605,170606],{},"一次读取一行：",[26,170608,170610],{"className":28,"code":170609,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,170611,170612,170638,170642,170653,170660,170664],{"__ignoreMap":31},[36,170613,170614,170616,170618,170620,170622,170624,170626,170628,170630,170632,170634,170636],{"class":38,"line":39},[36,170615,47703],{"class":7598},[36,170617,15941],{"class":46},[36,170619,149127],{"class":62},[36,170621,92],{"class":42},[36,170623,149132],{"class":50},[36,170625,630],{"class":42},[36,170627,149137],{"class":50},[36,170629,630],{"class":42},[36,170631,149142],{"class":7598},[36,170633,47],{"class":46},[36,170635,149147],{"class":50},[36,170637,123],{"class":42},[36,170639,170640],{"class":38,"line":54},[36,170641,70],{"emptyLinePlaceholder":69},[36,170643,170644,170646,170648,170650],{"class":38,"line":66},[36,170645,149588],{"class":42},[36,170647,47],{"class":46},[36,170649,150489],{"class":7598},[36,170651,170652],{"class":42},".readline()\n",[36,170654,170655,170657],{"class":38,"line":73},[36,170656,371],{"class":62},[36,170658,170659],{"class":42},"(line)\n",[36,170661,170662],{"class":38,"line":86},[36,170663,70],{"emptyLinePlaceholder":69},[36,170665,170666,170668],{"class":38,"line":126},[36,170667,47703],{"class":7598},[36,170669,170576],{"class":42},[1752,170671,170673],{"id":170672},"_843-readlines","8.4.3 readlines",[19,170675,170676],{},"读取所有行，返回列表：",[26,170678,170680],{"className":28,"code":170679,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,170681,170682,170708,170720,170727],{"__ignoreMap":31},[36,170683,170684,170686,170688,170690,170692,170694,170696,170698,170700,170702,170704,170706],{"class":38,"line":39},[36,170685,47703],{"class":7598},[36,170687,15941],{"class":46},[36,170689,149127],{"class":62},[36,170691,92],{"class":42},[36,170693,149132],{"class":50},[36,170695,630],{"class":42},[36,170697,149137],{"class":50},[36,170699,630],{"class":42},[36,170701,149142],{"class":7598},[36,170703,47],{"class":46},[36,170705,149147],{"class":50},[36,170707,123],{"class":42},[36,170709,170710,170713,170715,170717],{"class":38,"line":54},[36,170711,170712],{"class":42},"lines ",[36,170714,47],{"class":46},[36,170716,150489],{"class":7598},[36,170718,170719],{"class":42},".readlines()\n",[36,170721,170722,170724],{"class":38,"line":66},[36,170723,371],{"class":62},[36,170725,170726],{"class":42},"(lines)\n",[36,170728,170729,170731],{"class":38,"line":73},[36,170730,47703],{"class":7598},[36,170732,170576],{"class":42},[19,170734,170735,170736,170739],{},"每一行通常带有换行符，可以用 ",[33,170737,170738],{},"strip()"," 去掉：",[26,170741,170743],{"className":28,"code":170742,"language":30,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,170744,170745,170757],{"__ignoreMap":31},[36,170746,170747,170749,170752,170754],{"class":38,"line":39},[36,170748,5410],{"class":46},[36,170750,170751],{"class":42}," line ",[36,170753,28413],{"class":46},[36,170755,170756],{"class":42}," lines:\n",[36,170758,170759,170761],{"class":38,"line":54},[36,170760,89],{"class":62},[36,170762,170763],{"class":42},"(line.strip())\n",[1752,170765,170767],{"id":170766},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170769,170770],{},"推荐读取大文件时使用：",[26,170772,170774],{"className":28,"code":170773,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,170775,170776,170802,170806,170818,170824,170828],{"__ignoreMap":31},[36,170777,170778,170780,170782,170784,170786,170788,170790,170792,170794,170796,170798,170800],{"class":38,"line":39},[36,170779,47703],{"class":7598},[36,170781,15941],{"class":46},[36,170783,149127],{"class":62},[36,170785,92],{"class":42},[36,170787,149132],{"class":50},[36,170789,630],{"class":42},[36,170791,149137],{"class":50},[36,170793,630],{"class":42},[36,170795,149142],{"class":7598},[36,170797,47],{"class":46},[36,170799,149147],{"class":50},[36,170801,123],{"class":42},[36,170803,170804],{"class":38,"line":54},[36,170805,70],{"emptyLinePlaceholder":69},[36,170807,170808,170810,170812,170814,170816],{"class":38,"line":66},[36,170809,5410],{"class":46},[36,170811,170751],{"class":42},[36,170813,28413],{"class":46},[36,170815,150489],{"class":7598},[36,170817,153],{"class":42},[36,170819,170820,170822],{"class":38,"line":73},[36,170821,89],{"class":62},[36,170823,170763],{"class":42},[36,170825,170826],{"class":38,"line":86},[36,170827,70],{"emptyLinePlaceholder":69},[36,170829,170830,170832],{"class":38,"line":126},[36,170831,47703],{"class":7598},[36,170833,170576],{"class":42},[14,170835,170837],{"id":170836},"_85-with语句","8.5 with语句",[19,170839,170840,170842],{},[33,170841,110172],{}," 会自动关闭文件，推荐使用。",[26,170844,170846],{"className":28,"code":170845,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,170847,170848,170878,170888],{"__ignoreMap":31},[36,170849,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868,170870,170872,170874,170876],{"class":38,"line":39},[36,170851,110172],{"class":46},[36,170853,149127],{"class":62},[36,170855,92],{"class":42},[36,170857,149132],{"class":50},[36,170859,630],{"class":42},[36,170861,149137],{"class":50},[36,170863,630],{"class":42},[36,170865,149142],{"class":7598},[36,170867,47],{"class":46},[36,170869,149147],{"class":50},[36,170871,16091],{"class":42},[36,170873,33737],{"class":46},[36,170875,150489],{"class":7598},[36,170877,153],{"class":42},[36,170879,170880,170882,170884,170886],{"class":38,"line":54},[36,170881,149159],{"class":42},[36,170883,47],{"class":46},[36,170885,150489],{"class":7598},[36,170887,170562],{"class":42},[36,170889,170890,170892],{"class":38,"line":66},[36,170891,89],{"class":62},[36,170893,170569],{"class":42},[19,170895,170896],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170898,170900],{"id":170899},"_86-写入文件","8.6 写入文件",[19,170902,170903,170905],{},[33,170904,3349],{}," 模式会清空原文件。",[26,170907,170909],{"className":28,"code":170908,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,170910,170911,170941,170958],{"__ignoreMap":31},[36,170912,170913,170915,170917,170919,170921,170923,170925,170927,170929,170931,170933,170935,170937,170939],{"class":38,"line":39},[36,170914,110172],{"class":46},[36,170916,149127],{"class":62},[36,170918,92],{"class":42},[36,170920,149132],{"class":50},[36,170922,630],{"class":42},[36,170924,154037],{"class":50},[36,170926,630],{"class":42},[36,170928,149142],{"class":7598},[36,170930,47],{"class":46},[36,170932,149147],{"class":50},[36,170934,16091],{"class":42},[36,170936,33737],{"class":46},[36,170938,150489],{"class":7598},[36,170940,153],{"class":42},[36,170942,170943,170946,170949,170952,170954,170956],{"class":38,"line":54},[36,170944,170945],{"class":7598},"    file",[36,170947,170948],{"class":42},".write(",[36,170950,170951],{"class":50},"\"hello",[36,170953,158586],{"class":62},[36,170955,604],{"class":50},[36,170957,123],{"class":42},[36,170959,170960,170962,170964,170967,170969,170971],{"class":38,"line":66},[36,170961,170945],{"class":7598},[36,170963,170948],{"class":42},[36,170965,170966],{"class":50},"\"python",[36,170968,158586],{"class":62},[36,170970,604],{"class":50},[36,170972,123],{"class":42},[19,170974,170975],{},"写入多行：",[26,170977,170979],{"className":28,"code":170978,"language":30,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,170980,170981,171016,171020,171051],{"__ignoreMap":31},[36,170982,170983,170985,170987,170989,170992,170994,170996,170998,171001,171003,171005,171007,171010,171012,171014],{"class":38,"line":39},[36,170984,170712],{"class":42},[36,170986,47],{"class":46},[36,170988,54574],{"class":42},[36,170990,170991],{"class":50},"\"小明,18",[36,170993,158586],{"class":62},[36,170995,604],{"class":50},[36,170997,630],{"class":42},[36,170999,171000],{"class":50},"\"小红,17",[36,171002,158586],{"class":62},[36,171004,604],{"class":50},[36,171006,630],{"class":42},[36,171008,171009],{"class":50},"\"小刚,19",[36,171011,158586],{"class":62},[36,171013,604],{"class":50},[36,171015,35598],{"class":42},[36,171017,171018],{"class":38,"line":54},[36,171019,70],{"emptyLinePlaceholder":69},[36,171021,171022,171024,171026,171028,171031,171033,171035,171037,171039,171041,171043,171045,171047,171049],{"class":38,"line":66},[36,171023,110172],{"class":46},[36,171025,149127],{"class":62},[36,171027,92],{"class":42},[36,171029,171030],{"class":50},"\"students.txt\"",[36,171032,630],{"class":42},[36,171034,154037],{"class":50},[36,171036,630],{"class":42},[36,171038,149142],{"class":7598},[36,171040,47],{"class":46},[36,171042,149147],{"class":50},[36,171044,16091],{"class":42},[36,171046,33737],{"class":46},[36,171048,150489],{"class":7598},[36,171050,153],{"class":42},[36,171052,171053,171055],{"class":38,"line":73},[36,171054,170945],{"class":7598},[36,171056,171057],{"class":42},".writelines(lines)\n",[14,171059,171061],{"id":171060},"_87-追加文件","8.7 追加文件",[19,171063,171064,171066],{},[33,171065,2796],{}," 模式不会清空原内容，而是在末尾追加。",[26,171068,171070],{"className":28,"code":171069,"language":30,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,171071,171072,171103],{"__ignoreMap":31},[36,171073,171074,171076,171078,171080,171083,171085,171087,171089,171091,171093,171095,171097,171099,171101],{"class":38,"line":39},[36,171075,110172],{"class":46},[36,171077,149127],{"class":62},[36,171079,92],{"class":42},[36,171081,171082],{"class":50},"\"log.txt\"",[36,171084,630],{"class":42},[36,171086,167386],{"class":50},[36,171088,630],{"class":42},[36,171090,149142],{"class":7598},[36,171092,47],{"class":46},[36,171094,149147],{"class":50},[36,171096,16091],{"class":42},[36,171098,33737],{"class":46},[36,171100,150489],{"class":7598},[36,171102,153],{"class":42},[36,171104,171105,171107,171109,171112,171114,171116],{"class":38,"line":54},[36,171106,170945],{"class":7598},[36,171108,170948],{"class":42},[36,171110,171111],{"class":50},"\"程序启动",[36,171113,158586],{"class":62},[36,171115,604],{"class":50},[36,171117,123],{"class":42},[19,171119,171120],{},"日志类文件常用追加模式。",[14,171122,171124],{"id":171123},"_88-文件编码","8.8 文件编码",[19,171126,171127],{},"编码决定文字如何保存为字节。",[19,171129,171130],{},"常见编码：",[650,171132,171133,171136],{},[653,171134,171135],{},"UTF-8：推荐。",[653,171137,171138],{},"GBK：部分 Windows 中文文件常见。",[19,171140,171141],{},"读取文件乱码时，可以尝试：",[26,171143,171145],{"className":28,"code":171144,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,171146,171147,171178],{"__ignoreMap":31},[36,171148,171149,171151,171153,171155,171157,171159,171161,171163,171165,171167,171170,171172,171174,171176],{"class":38,"line":39},[36,171150,110172],{"class":46},[36,171152,149127],{"class":62},[36,171154,92],{"class":42},[36,171156,149132],{"class":50},[36,171158,630],{"class":42},[36,171160,149137],{"class":50},[36,171162,630],{"class":42},[36,171164,149142],{"class":7598},[36,171166,47],{"class":46},[36,171168,171169],{"class":50},"\"gbk\"",[36,171171,16091],{"class":42},[36,171173,33737],{"class":46},[36,171175,150489],{"class":7598},[36,171177,153],{"class":42},[36,171179,171180,171182,171184,171186],{"class":38,"line":54},[36,171181,149159],{"class":42},[36,171183,47],{"class":46},[36,171185,150489],{"class":7598},[36,171187,170562],{"class":42},[19,171189,171190],{},"写文件时建议统一 UTF-8：",[26,171192,171194],{"className":28,"code":171193,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,171195,171196,171226],{"__ignoreMap":31},[36,171197,171198,171200,171202,171204,171206,171208,171210,171212,171214,171216,171218,171220,171222,171224],{"class":38,"line":39},[36,171199,110172],{"class":46},[36,171201,149127],{"class":62},[36,171203,92],{"class":42},[36,171205,149132],{"class":50},[36,171207,630],{"class":42},[36,171209,154037],{"class":50},[36,171211,630],{"class":42},[36,171213,149142],{"class":7598},[36,171215,47],{"class":46},[36,171217,149147],{"class":50},[36,171219,16091],{"class":42},[36,171221,33737],{"class":46},[36,171223,150489],{"class":7598},[36,171225,153],{"class":42},[36,171227,171228,171230,171232,171235],{"class":38,"line":54},[36,171229,170945],{"class":7598},[36,171231,170948],{"class":42},[36,171233,171234],{"class":50},"\"中文内容\"",[36,171236,123],{"class":42},[14,171238,171240],{"id":171239},"_89-pathlib","8.9 pathlib",[19,171242,171243,171246],{},[33,171244,171245],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,171248,171250],{"className":28,"code":171249,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,171251,171252,171262,171266,171284],{"__ignoreMap":31},[36,171253,171254,171256,171258,171260],{"class":38,"line":39},[36,171255,1937],{"class":46},[36,171257,110650],{"class":42},[36,171259,1943],{"class":46},[36,171261,110655],{"class":42},[36,171263,171264],{"class":38,"line":54},[36,171265,70],{"emptyLinePlaceholder":69},[36,171267,171268,171270,171272,171274,171277,171279,171281],{"class":38,"line":66},[36,171269,170372],{"class":42},[36,171271,47],{"class":46},[36,171273,110884],{"class":42},[36,171275,171276],{"class":50},"\"data\"",[36,171278,16091],{"class":42},[36,171280,3139],{"class":46},[36,171282,171283],{"class":50}," \"students.txt\"\n",[36,171285,171286,171288],{"class":38,"line":73},[36,171287,371],{"class":62},[36,171289,171290],{"class":42},"(path)\n",[19,171292,171293],{},"创建目录：",[26,171295,171297],{"className":28,"code":171296,"language":30,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,171298,171299,171309,171313,171326],{"__ignoreMap":31},[36,171300,171301,171303,171305,171307],{"class":38,"line":39},[36,171302,1937],{"class":46},[36,171304,110650],{"class":42},[36,171306,1943],{"class":46},[36,171308,110655],{"class":42},[36,171310,171311],{"class":38,"line":54},[36,171312,70],{"emptyLinePlaceholder":69},[36,171314,171315,171318,171320,171322,171324],{"class":38,"line":66},[36,171316,171317],{"class":42},"data_dir ",[36,171319,47],{"class":46},[36,171321,110884],{"class":42},[36,171323,171276],{"class":50},[36,171325,123],{"class":42},[36,171327,171328,171331,171334,171336,171338],{"class":38,"line":73},[36,171329,171330],{"class":42},"data_dir.mkdir(",[36,171332,171333],{"class":7598},"exist_ok",[36,171335,47],{"class":46},[36,171337,33830],{"class":62},[36,171339,123],{"class":42},[19,171341,171342],{},"判断文件是否存在：",[26,171344,171346],{"className":28,"code":171345,"language":30,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,171347,171348,171361,171365,171372],{"__ignoreMap":31},[36,171349,171350,171352,171354,171356,171359],{"class":38,"line":39},[36,171351,170372],{"class":42},[36,171353,47],{"class":46},[36,171355,110884],{"class":42},[36,171357,171358],{"class":50},"\"data\u002Fstudents.txt\"",[36,171360,123],{"class":42},[36,171362,171363],{"class":38,"line":54},[36,171364,70],{"emptyLinePlaceholder":69},[36,171366,171367,171369],{"class":38,"line":66},[36,171368,3948],{"class":46},[36,171370,171371],{"class":42}," path.exists():\n",[36,171373,171374,171376,171378,171381],{"class":38,"line":73},[36,171375,89],{"class":62},[36,171377,92],{"class":42},[36,171379,171380],{"class":50},"\"文件存在\"",[36,171382,123],{"class":42},[19,171384,171385],{},"读写文本：",[26,171387,171389],{"className":28,"code":171388,"language":30,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,171390,171391,171403,171407,171424,171441],{"__ignoreMap":31},[36,171392,171393,171395,171397,171399,171401],{"class":38,"line":39},[36,171394,170372],{"class":42},[36,171396,47],{"class":46},[36,171398,110884],{"class":42},[36,171400,149132],{"class":50},[36,171402,123],{"class":42},[36,171404,171405],{"class":38,"line":54},[36,171406,70],{"emptyLinePlaceholder":69},[36,171408,171409,171412,171414,171416,171418,171420,171422],{"class":38,"line":66},[36,171410,171411],{"class":42},"path.write_text(",[36,171413,148215],{"class":50},[36,171415,630],{"class":42},[36,171417,149142],{"class":7598},[36,171419,47],{"class":46},[36,171421,149147],{"class":50},[36,171423,123],{"class":42},[36,171425,171426,171428,171430,171433,171435,171437,171439],{"class":38,"line":73},[36,171427,170555],{"class":42},[36,171429,47],{"class":46},[36,171431,171432],{"class":42}," path.read_text(",[36,171434,149142],{"class":7598},[36,171436,47],{"class":46},[36,171438,149147],{"class":50},[36,171440,123],{"class":42},[36,171442,171443,171445],{"class":38,"line":86},[36,171444,371],{"class":62},[36,171446,170569],{"class":42},[14,171448,171450],{"id":171449},"_810-json文件","8.10 JSON文件",[19,171452,171453],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,171455,171457],{"className":28,"code":171456,"language":30,"meta":31,"style":31},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[33,171458,171459,171465,171469,171477,171487,171497,171505,171509,171513,171538],{"__ignoreMap":31},[36,171460,171461,171463],{"class":38,"line":39},[36,171462,1943],{"class":46},[36,171464,149427],{"class":42},[36,171466,171467],{"class":38,"line":54},[36,171468,70],{"emptyLinePlaceholder":69},[36,171470,171471,171473,171475],{"class":38,"line":66},[36,171472,208],{"class":42},[36,171474,47],{"class":46},[36,171476,2150],{"class":42},[36,171478,171479,171481,171483,171485],{"class":38,"line":73},[36,171480,149356],{"class":50},[36,171482,2158],{"class":42},[36,171484,627],{"class":50},[36,171486,33820],{"class":42},[36,171488,171489,171491,171493,171495],{"class":38,"line":86},[36,171490,166598],{"class":50},[36,171492,2158],{"class":42},[36,171494,633],{"class":62},[36,171496,33820],{"class":42},[36,171498,171499,171501,171503],{"class":38,"line":126},[36,171500,166609],{"class":50},[36,171502,2158],{"class":42},[36,171504,166614],{"class":62},[36,171506,171507],{"class":38,"line":131},[36,171508,3982],{"class":42},[36,171510,171511],{"class":38,"line":225},[36,171512,70],{"emptyLinePlaceholder":69},[36,171514,171515,171517,171519,171522,171524,171526,171528,171530,171532,171534,171536],{"class":38,"line":235},[36,171516,158505],{"class":42},[36,171518,47],{"class":46},[36,171520,171521],{"class":42}," json.dumps(student, ",[36,171523,149473],{"class":7598},[36,171525,47],{"class":46},[36,171527,36339],{"class":62},[36,171529,630],{"class":42},[36,171531,154073],{"class":7598},[36,171533,47],{"class":46},[36,171535,1911],{"class":62},[36,171537,123],{"class":42},[36,171539,171540,171542],{"class":38,"line":377},[36,171541,371],{"class":62},[36,171543,166132],{"class":42},[19,171545,171546],{},"写入 JSON 文件：",[26,171548,171550],{"className":28,"code":171549,"language":30,"meta":31,"style":31},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[33,171551,171552,171558,171562,171570,171598,171626,171630,171634,171664],{"__ignoreMap":31},[36,171553,171554,171556],{"class":38,"line":39},[36,171555,1943],{"class":46},[36,171557,149427],{"class":42},[36,171559,171560],{"class":38,"line":54},[36,171561,70],{"emptyLinePlaceholder":69},[36,171563,171564,171566,171568],{"class":38,"line":66},[36,171565,161777],{"class":42},[36,171567,47],{"class":46},[36,171569,57795],{"class":42},[36,171571,171572,171574,171576,171578,171580,171582,171584,171586,171588,171590,171592,171594,171596],{"class":38,"line":73},[36,171573,150721],{"class":42},[36,171575,2251],{"class":50},[36,171577,2158],{"class":42},[36,171579,627],{"class":50},[36,171581,630],{"class":42},[36,171583,2260],{"class":50},[36,171585,2158],{"class":42},[36,171587,633],{"class":62},[36,171589,630],{"class":42},[36,171591,2269],{"class":50},[36,171593,2158],{"class":42},[36,171595,638],{"class":62},[36,171597,7313],{"class":42},[36,171599,171600,171602,171604,171606,171608,171610,171612,171614,171616,171618,171620,171622,171624],{"class":38,"line":86},[36,171601,150721],{"class":42},[36,171603,2251],{"class":50},[36,171605,2158],{"class":42},[36,171607,1716],{"class":50},[36,171609,630],{"class":42},[36,171611,2260],{"class":50},[36,171613,2158],{"class":42},[36,171615,3180],{"class":62},[36,171617,630],{"class":42},[36,171619,2269],{"class":50},[36,171621,2158],{"class":42},[36,171623,3365],{"class":62},[36,171625,7313],{"class":42},[36,171627,171628],{"class":38,"line":126},[36,171629,35598],{"class":42},[36,171631,171632],{"class":38,"line":131},[36,171633,70],{"emptyLinePlaceholder":69},[36,171635,171636,171638,171640,171642,171644,171646,171648,171650,171652,171654,171656,171658,171660,171662],{"class":38,"line":225},[36,171637,110172],{"class":46},[36,171639,149127],{"class":62},[36,171641,92],{"class":42},[36,171643,153892],{"class":50},[36,171645,630],{"class":42},[36,171647,154037],{"class":50},[36,171649,630],{"class":42},[36,171651,149142],{"class":7598},[36,171653,47],{"class":46},[36,171655,149147],{"class":50},[36,171657,16091],{"class":42},[36,171659,33737],{"class":46},[36,171661,150489],{"class":7598},[36,171663,153],{"class":42},[36,171665,171666,171669,171671,171673,171675,171677,171679,171681,171683,171685,171687],{"class":38,"line":235},[36,171667,171668],{"class":42},"    json.dump(students, ",[36,171670,47703],{"class":7598},[36,171672,630],{"class":42},[36,171674,149473],{"class":7598},[36,171676,47],{"class":46},[36,171678,36339],{"class":62},[36,171680,630],{"class":42},[36,171682,154073],{"class":7598},[36,171684,47],{"class":46},[36,171686,1911],{"class":62},[36,171688,123],{"class":42},[19,171690,171691],{},"读取 JSON 文件：",[26,171693,171695],{"className":28,"code":171694,"language":30,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,171696,171697,171703,171707,171737,171749,171753],{"__ignoreMap":31},[36,171698,171699,171701],{"class":38,"line":39},[36,171700,1943],{"class":46},[36,171702,149427],{"class":42},[36,171704,171705],{"class":38,"line":54},[36,171706,70],{"emptyLinePlaceholder":69},[36,171708,171709,171711,171713,171715,171717,171719,171721,171723,171725,171727,171729,171731,171733,171735],{"class":38,"line":66},[36,171710,110172],{"class":46},[36,171712,149127],{"class":62},[36,171714,92],{"class":42},[36,171716,153892],{"class":50},[36,171718,630],{"class":42},[36,171720,149137],{"class":50},[36,171722,630],{"class":42},[36,171724,149142],{"class":7598},[36,171726,47],{"class":46},[36,171728,149147],{"class":50},[36,171730,16091],{"class":42},[36,171732,33737],{"class":46},[36,171734,150489],{"class":7598},[36,171736,153],{"class":42},[36,171738,171739,171741,171743,171745,171747],{"class":38,"line":73},[36,171740,155098],{"class":42},[36,171742,47],{"class":46},[36,171744,150500],{"class":42},[36,171746,47703],{"class":7598},[36,171748,123],{"class":42},[36,171750,171751],{"class":38,"line":86},[36,171752,70],{"emptyLinePlaceholder":69},[36,171754,171755,171757],{"class":38,"line":126},[36,171756,371],{"class":62},[36,171758,167056],{"class":42},[14,171760,171762],{"id":171761},"_811-csv文件","8.11 CSV文件",[19,171764,171765],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171767,171768],{},"写入 CSV：",[26,171770,171772],{"className":28,"code":171771,"language":30,"meta":31,"style":31},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[33,171773,171774,171781,171785,171793,171811,171827,171843,171847,171851,171891,171905],{"__ignoreMap":31},[36,171775,171776,171778],{"class":38,"line":39},[36,171777,1943],{"class":46},[36,171779,171780],{"class":42}," csv\n",[36,171782,171783],{"class":38,"line":54},[36,171784,70],{"emptyLinePlaceholder":69},[36,171786,171787,171789,171791],{"class":38,"line":66},[36,171788,161777],{"class":42},[36,171790,47],{"class":46},[36,171792,57795],{"class":42},[36,171794,171795,171798,171800,171802,171804,171806,171809],{"class":38,"line":73},[36,171796,171797],{"class":42},"    [",[36,171799,75444],{"class":50},[36,171801,630],{"class":42},[36,171803,75477],{"class":50},[36,171805,630],{"class":42},[36,171807,171808],{"class":50},"\"成绩\"",[36,171810,2244],{"class":42},[36,171812,171813,171815,171817,171819,171821,171823,171825],{"class":38,"line":86},[36,171814,171797],{"class":42},[36,171816,627],{"class":50},[36,171818,630],{"class":42},[36,171820,633],{"class":62},[36,171822,630],{"class":42},[36,171824,638],{"class":62},[36,171826,2244],{"class":42},[36,171828,171829,171831,171833,171835,171837,171839,171841],{"class":38,"line":126},[36,171830,171797],{"class":42},[36,171832,1716],{"class":50},[36,171834,630],{"class":42},[36,171836,3180],{"class":62},[36,171838,630],{"class":42},[36,171840,3365],{"class":62},[36,171842,2244],{"class":42},[36,171844,171845],{"class":38,"line":131},[36,171846,35598],{"class":42},[36,171848,171849],{"class":38,"line":225},[36,171850,70],{"emptyLinePlaceholder":69},[36,171852,171853,171855,171857,171859,171862,171864,171866,171868,171870,171872,171874,171876,171879,171881,171883,171885,171887,171889],{"class":38,"line":235},[36,171854,110172],{"class":46},[36,171856,149127],{"class":62},[36,171858,92],{"class":42},[36,171860,171861],{"class":50},"\"students.csv\"",[36,171863,630],{"class":42},[36,171865,154037],{"class":50},[36,171867,630],{"class":42},[36,171869,149142],{"class":7598},[36,171871,47],{"class":46},[36,171873,149147],{"class":50},[36,171875,630],{"class":42},[36,171877,171878],{"class":7598},"newline",[36,171880,47],{"class":46},[36,171882,10033],{"class":50},[36,171884,16091],{"class":42},[36,171886,33737],{"class":46},[36,171888,150489],{"class":7598},[36,171890,153],{"class":42},[36,171892,171893,171896,171898,171901,171903],{"class":38,"line":377},[36,171894,171895],{"class":42},"    writer ",[36,171897,47],{"class":46},[36,171899,171900],{"class":42}," csv.writer(",[36,171902,47703],{"class":7598},[36,171904,123],{"class":42},[36,171906,171907],{"class":38,"line":617},[36,171908,171909],{"class":42},"    writer.writerows(students)\n",[19,171911,171912],{},"读取 CSV：",[26,171914,171916],{"className":28,"code":171915,"language":30,"meta":31,"style":31},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[33,171917,171918,171924,171928,171958,171972,171984],{"__ignoreMap":31},[36,171919,171920,171922],{"class":38,"line":39},[36,171921,1943],{"class":46},[36,171923,171780],{"class":42},[36,171925,171926],{"class":38,"line":54},[36,171927,70],{"emptyLinePlaceholder":69},[36,171929,171930,171932,171934,171936,171938,171940,171942,171944,171946,171948,171950,171952,171954,171956],{"class":38,"line":66},[36,171931,110172],{"class":46},[36,171933,149127],{"class":62},[36,171935,92],{"class":42},[36,171937,171861],{"class":50},[36,171939,630],{"class":42},[36,171941,149137],{"class":50},[36,171943,630],{"class":42},[36,171945,149142],{"class":7598},[36,171947,47],{"class":46},[36,171949,149147],{"class":50},[36,171951,16091],{"class":42},[36,171953,33737],{"class":46},[36,171955,150489],{"class":7598},[36,171957,153],{"class":42},[36,171959,171960,171963,171965,171968,171970],{"class":38,"line":73},[36,171961,171962],{"class":42},"    reader ",[36,171964,47],{"class":46},[36,171966,171967],{"class":42}," csv.reader(",[36,171969,47703],{"class":7598},[36,171971,123],{"class":42},[36,171973,171974,171976,171979,171981],{"class":38,"line":86},[36,171975,5586],{"class":46},[36,171977,171978],{"class":42}," row ",[36,171980,28413],{"class":46},[36,171982,171983],{"class":42}," reader:\n",[36,171985,171986,171988],{"class":38,"line":126},[36,171987,168],{"class":62},[36,171989,171990],{"class":42},"(row)\n",[19,171992,171993],{},"使用字典写入：",[26,171995,171997],{"className":28,"code":171996,"language":30,"meta":31,"style":31},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[33,171998,171999,172005,172009,172017,172045,172073,172077,172081,172119,172140,172161,172166],{"__ignoreMap":31},[36,172000,172001,172003],{"class":38,"line":39},[36,172002,1943],{"class":46},[36,172004,171780],{"class":42},[36,172006,172007],{"class":38,"line":54},[36,172008,70],{"emptyLinePlaceholder":69},[36,172010,172011,172013,172015],{"class":38,"line":66},[36,172012,161777],{"class":42},[36,172014,47],{"class":46},[36,172016,57795],{"class":42},[36,172018,172019,172021,172023,172025,172027,172029,172031,172033,172035,172037,172039,172041,172043],{"class":38,"line":73},[36,172020,150721],{"class":42},[36,172022,2251],{"class":50},[36,172024,2158],{"class":42},[36,172026,627],{"class":50},[36,172028,630],{"class":42},[36,172030,2260],{"class":50},[36,172032,2158],{"class":42},[36,172034,633],{"class":62},[36,172036,630],{"class":42},[36,172038,2269],{"class":50},[36,172040,2158],{"class":42},[36,172042,638],{"class":62},[36,172044,7313],{"class":42},[36,172046,172047,172049,172051,172053,172055,172057,172059,172061,172063,172065,172067,172069,172071],{"class":38,"line":86},[36,172048,150721],{"class":42},[36,172050,2251],{"class":50},[36,172052,2158],{"class":42},[36,172054,1716],{"class":50},[36,172056,630],{"class":42},[36,172058,2260],{"class":50},[36,172060,2158],{"class":42},[36,172062,3180],{"class":62},[36,172064,630],{"class":42},[36,172066,2269],{"class":50},[36,172068,2158],{"class":42},[36,172070,3365],{"class":62},[36,172072,7313],{"class":42},[36,172074,172075],{"class":38,"line":126},[36,172076,35598],{"class":42},[36,172078,172079],{"class":38,"line":131},[36,172080,70],{"emptyLinePlaceholder":69},[36,172082,172083,172085,172087,172089,172091,172093,172095,172097,172099,172101,172103,172105,172107,172109,172111,172113,172115,172117],{"class":38,"line":225},[36,172084,110172],{"class":46},[36,172086,149127],{"class":62},[36,172088,92],{"class":42},[36,172090,171861],{"class":50},[36,172092,630],{"class":42},[36,172094,154037],{"class":50},[36,172096,630],{"class":42},[36,172098,149142],{"class":7598},[36,172100,47],{"class":46},[36,172102,149147],{"class":50},[36,172104,630],{"class":42},[36,172106,171878],{"class":7598},[36,172108,47],{"class":46},[36,172110,10033],{"class":50},[36,172112,16091],{"class":42},[36,172114,33737],{"class":46},[36,172116,150489],{"class":7598},[36,172118,153],{"class":42},[36,172120,172121,172124,172126,172128,172130,172132,172134,172136,172138],{"class":38,"line":235},[36,172122,172123],{"class":42},"    fieldnames ",[36,172125,47],{"class":46},[36,172127,54574],{"class":42},[36,172129,2251],{"class":50},[36,172131,630],{"class":42},[36,172133,2260],{"class":50},[36,172135,630],{"class":42},[36,172137,2269],{"class":50},[36,172139,35598],{"class":42},[36,172141,172142,172144,172146,172149,172151,172153,172156,172158],{"class":38,"line":377},[36,172143,171895],{"class":42},[36,172145,47],{"class":46},[36,172147,172148],{"class":42}," csv.DictWriter(",[36,172150,47703],{"class":7598},[36,172152,630],{"class":42},[36,172154,172155],{"class":7598},"fieldnames",[36,172157,47],{"class":46},[36,172159,172160],{"class":42},"fieldnames)\n",[36,172162,172163],{"class":38,"line":617},[36,172164,172165],{"class":42},"    writer.writeheader()\n",[36,172167,172168],{"class":38,"line":643},[36,172169,171909],{"class":42},[14,172171,172173],{"id":172172},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172175,125631],{},[650,172177,172178,172181,172184],{},[653,172179,172180],{},"读取文本文件。",[653,172182,172183],{},"统计每个单词出现次数。",[653,172185,172186],{},"输出出现次数最多的前 10 个单词。",[19,172188,12414],{},[26,172190,172192],{"className":28,"code":172191,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[33,172193,172194,172204,172208,172221,172237,172241,172251,172260,172264,172276,172296,172305,172309,172327,172331,172361,172365,172381],{"__ignoreMap":31},[36,172195,172196,172198,172200,172202],{"class":38,"line":39},[36,172197,1937],{"class":46},[36,172199,110650],{"class":42},[36,172201,1943],{"class":46},[36,172203,110655],{"class":42},[36,172205,172206],{"class":38,"line":54},[36,172207,70],{"emptyLinePlaceholder":69},[36,172209,172210,172212,172214,172216,172219],{"class":38,"line":66},[36,172211,170372],{"class":42},[36,172213,47],{"class":46},[36,172215,110884],{"class":42},[36,172217,172218],{"class":50},"\"article.txt\"",[36,172220,123],{"class":42},[36,172222,172223,172225,172227,172229,172231,172233,172235],{"class":38,"line":73},[36,172224,170555],{"class":42},[36,172226,47],{"class":46},[36,172228,171432],{"class":42},[36,172230,149142],{"class":7598},[36,172232,47],{"class":46},[36,172234,149147],{"class":50},[36,172236,123],{"class":42},[36,172238,172239],{"class":38,"line":86},[36,172240,70],{"emptyLinePlaceholder":69},[36,172242,172243,172246,172248],{"class":38,"line":126},[36,172244,172245],{"class":42},"words ",[36,172247,47],{"class":46},[36,172249,172250],{"class":42}," content.lower().split()\n",[36,172252,172253,172256,172258],{"class":38,"line":131},[36,172254,172255],{"class":42},"counter ",[36,172257,47],{"class":46},[36,172259,90209],{"class":42},[36,172261,172262],{"class":38,"line":225},[36,172263,70],{"emptyLinePlaceholder":69},[36,172265,172266,172268,172271,172273],{"class":38,"line":235},[36,172267,5410],{"class":46},[36,172269,172270],{"class":42}," word ",[36,172272,28413],{"class":46},[36,172274,172275],{"class":42}," words:\n",[36,172277,172278,172281,172283,172286,172289,172291,172294],{"class":38,"line":377},[36,172279,172280],{"class":42},"    word ",[36,172282,47],{"class":46},[36,172284,172285],{"class":42}," word.strip(",[36,172287,172288],{"class":50},"\".,!?;:",[36,172290,158556],{"class":62},[36,172292,172293],{"class":50},"'()[]\"",[36,172295,123],{"class":42},[36,172297,172298,172300,172302],{"class":38,"line":617},[36,172299,5486],{"class":46},[36,172301,41279],{"class":46},[36,172303,172304],{"class":42}," word:\n",[36,172306,172307],{"class":38,"line":643},[36,172308,150848],{"class":46},[36,172310,172311,172314,172316,172319,172321,172323,172325],{"class":38,"line":921},[36,172312,172313],{"class":42},"    counter[word] ",[36,172315,47],{"class":46},[36,172317,172318],{"class":42}," counter.get(word, ",[36,172320,2751],{"class":62},[36,172322,16091],{"class":42},[36,172324,1885],{"class":46},[36,172326,58047],{"class":62},[36,172328,172329],{"class":38,"line":934},[36,172330,70],{"emptyLinePlaceholder":69},[36,172332,172333,172336,172338,172340,172343,172345,172347,172349,172351,172353,172355,172357,172359],{"class":38,"line":939},[36,172334,172335],{"class":42},"items ",[36,172337,47],{"class":46},[36,172339,165665],{"class":62},[36,172341,172342],{"class":42},"(counter.items(), ",[36,172344,156007],{"class":7598},[36,172346,156010],{"class":46},[36,172348,156013],{"class":42},[36,172350,1906],{"class":62},[36,172352,114541],{"class":42},[36,172354,165589],{"class":7598},[36,172356,47],{"class":46},[36,172358,33830],{"class":62},[36,172360,123],{"class":42},[36,172362,172363],{"class":38,"line":949},[36,172364,70],{"emptyLinePlaceholder":69},[36,172366,172367,172369,172372,172374,172377,172379],{"class":38,"line":962},[36,172368,5410],{"class":46},[36,172370,172371],{"class":42}," word, count ",[36,172373,28413],{"class":46},[36,172375,172376],{"class":42}," items[:",[36,172378,3002],{"class":62},[36,172380,167816],{"class":42},[36,172382,172383,172385],{"class":38,"line":974},[36,172384,89],{"class":62},[36,172386,172387],{"class":42},"(word, count)\n",[14,172389,172391],{"id":172390},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,172393,172395],{"className":28,"code":172394,"language":30,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[33,172396,172397,172403,172413,172417,172429,172433,172437,172445,172455,172461,172465,172495,172505,172509,172513,172521,172551,172575,172579,172583,172591,172620,172625],{"__ignoreMap":31},[36,172398,172399,172401],{"class":38,"line":39},[36,172400,1943],{"class":46},[36,172402,149427],{"class":42},[36,172404,172405,172407,172409,172411],{"class":38,"line":54},[36,172406,1937],{"class":46},[36,172408,110650],{"class":42},[36,172410,1943],{"class":46},[36,172412,110655],{"class":42},[36,172414,172415],{"class":38,"line":66},[36,172416,70],{"emptyLinePlaceholder":69},[36,172418,172419,172421,172423,172425,172427],{"class":38,"line":73},[36,172420,153885],{"class":62},[36,172422,15941],{"class":46},[36,172424,110884],{"class":42},[36,172426,153892],{"class":50},[36,172428,123],{"class":42},[36,172430,172431],{"class":38,"line":86},[36,172432,70],{"emptyLinePlaceholder":69},[36,172434,172435],{"class":38,"line":126},[36,172436,70],{"emptyLinePlaceholder":69},[36,172438,172439,172441,172443],{"class":38,"line":131},[36,172440,76],{"class":46},[36,172442,153909],{"class":79},[36,172444,34306],{"class":42},[36,172446,172447,172449,172451,172453],{"class":38,"line":225},[36,172448,5486],{"class":46},[36,172450,41279],{"class":46},[36,172452,153920],{"class":62},[36,172454,153923],{"class":42},[36,172456,172457,172459],{"class":38,"line":235},[36,172458,736],{"class":46},[36,172460,54186],{"class":42},[36,172462,172463],{"class":38,"line":377},[36,172464,70],{"emptyLinePlaceholder":69},[36,172466,172467,172469,172471,172473,172475,172477,172479,172481,172483,172485,172487,172489,172491,172493],{"class":38,"line":617},[36,172468,36530],{"class":46},[36,172470,149127],{"class":62},[36,172472,92],{"class":42},[36,172474,153885],{"class":62},[36,172476,630],{"class":42},[36,172478,149137],{"class":50},[36,172480,630],{"class":42},[36,172482,149142],{"class":7598},[36,172484,47],{"class":46},[36,172486,149147],{"class":50},[36,172488,16091],{"class":42},[36,172490,33737],{"class":46},[36,172492,150489],{"class":7598},[36,172494,153],{"class":42},[36,172496,172497,172499,172501,172503],{"class":38,"line":643},[36,172498,736],{"class":46},[36,172500,150500],{"class":42},[36,172502,47703],{"class":7598},[36,172504,123],{"class":42},[36,172506,172507],{"class":38,"line":921},[36,172508,70],{"emptyLinePlaceholder":69},[36,172510,172511],{"class":38,"line":934},[36,172512,70],{"emptyLinePlaceholder":69},[36,172514,172515,172517,172519],{"class":38,"line":939},[36,172516,76],{"class":46},[36,172518,154019],{"class":79},[36,172520,154022],{"class":42},[36,172522,172523,172525,172527,172529,172531,172533,172535,172537,172539,172541,172543,172545,172547,172549],{"class":38,"line":949},[36,172524,36530],{"class":46},[36,172526,149127],{"class":62},[36,172528,92],{"class":42},[36,172530,153885],{"class":62},[36,172532,630],{"class":42},[36,172534,154037],{"class":50},[36,172536,630],{"class":42},[36,172538,149142],{"class":7598},[36,172540,47],{"class":46},[36,172542,149147],{"class":50},[36,172544,16091],{"class":42},[36,172546,33737],{"class":46},[36,172548,150489],{"class":7598},[36,172550,153],{"class":42},[36,172552,172553,172555,172557,172559,172561,172563,172565,172567,172569,172571,172573],{"class":38,"line":962},[36,172554,154058],{"class":42},[36,172556,47703],{"class":7598},[36,172558,630],{"class":42},[36,172560,149473],{"class":7598},[36,172562,47],{"class":46},[36,172564,36339],{"class":62},[36,172566,630],{"class":42},[36,172568,154073],{"class":7598},[36,172570,47],{"class":46},[36,172572,1911],{"class":62},[36,172574,123],{"class":42},[36,172576,172577],{"class":38,"line":974},[36,172578,70],{"emptyLinePlaceholder":69},[36,172580,172581],{"class":38,"line":979},[36,172582,70],{"emptyLinePlaceholder":69},[36,172584,172585,172587,172589],{"class":38,"line":994},[36,172586,161777],{"class":42},[36,172588,47],{"class":46},[36,172590,155103],{"class":42},[36,172592,172593,172596,172598,172600,172602,172604,172606,172608,172610,172612,172614,172616,172618],{"class":38,"line":1006},[36,172594,172595],{"class":42},"students.append({",[36,172597,2251],{"class":50},[36,172599,2158],{"class":42},[36,172601,627],{"class":50},[36,172603,630],{"class":42},[36,172605,2260],{"class":50},[36,172607,2158],{"class":42},[36,172609,633],{"class":62},[36,172611,630],{"class":42},[36,172613,2269],{"class":50},[36,172615,2158],{"class":42},[36,172617,638],{"class":62},[36,172619,167213],{"class":42},[36,172621,172622],{"class":38,"line":1011},[36,172623,172624],{"class":42},"save_students(students)\n",[36,172626,172627,172629,172631,172634],{"class":38,"line":1023},[36,172628,371],{"class":62},[36,172630,92],{"class":42},[36,172632,172633],{"class":50},"\"保存成功\"",[36,172635,123],{"class":42},[14,172637,172639],{"id":172638},"_814-易错点","8.14 易错点",[650,172641,172642,172646,172652,172657,172664,172671],{},[653,172643,172644,170905],{},[33,172645,3349],{},[653,172647,172648,172649,676],{},"读写中文要指定 ",[33,172650,172651],{},"encoding=\"utf-8\"",[653,172653,172654,172655,676],{},"打开文件后要关闭，推荐使用 ",[33,172656,110172],{},[653,172658,172659,172660,172663],{},"读取大文件不要直接 ",[33,172661,172662],{},"read()"," 全部内容。",[653,172665,172666,172667,172670],{},"Windows 写 CSV 时建议加 ",[33,172668,172669],{},"newline=\"\"","，避免空行。",[653,172672,172673],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172675,172677],{"id":172676},"_815-本章练习","8.15 本章练习",[650,172679,172680,172687,172692,172695,172698],{},[653,172681,172682,172683,172686],{},"写入一个 ",[33,172684,172685],{},"students.txt","，每行保存一个学生姓名。",[653,172688,106695,172689,172691],{},[33,172690,172685],{}," 并输出所有学生。",[653,172693,172694],{},"把学生列表保存为 JSON 文件。",[653,172696,172697],{},"从 JSON 文件读取学生数据，计算平均分。",[653,172699,172700,172701,172704,172705,172708],{},"写一个日志函数 ",[33,172702,172703],{},"write_log(message)","，每次调用向 ",[33,172706,172707],{},"app.log"," 追加一行。",[2467,172710,172711],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":172713},[172714,172715,172719,172720,172726,172727,172728,172729,172730,172731,172732,172733,172734,172735,172736],{"id":170225,"depth":54,"text":170226},{"id":170266,"depth":54,"text":170267,"children":172716},[172717,172718],{"id":170270,"depth":66,"text":170271},{"id":170304,"depth":66,"text":170305},{"id":170418,"depth":54,"text":170419},{"id":170511,"depth":54,"text":170512,"children":172721},[172722,172723,172724,172725],{"id":170515,"depth":66,"text":170516},{"id":170602,"depth":66,"text":170603},{"id":170672,"depth":66,"text":170673},{"id":170766,"depth":66,"text":170767},{"id":170836,"depth":54,"text":170837},{"id":170899,"depth":54,"text":170900},{"id":171060,"depth":54,"text":171061},{"id":171123,"depth":54,"text":171124},{"id":171239,"depth":54,"text":171240},{"id":171449,"depth":54,"text":171450},{"id":171761,"depth":54,"text":171762},{"id":172172,"depth":54,"text":172173},{"id":172390,"depth":54,"text":172391},{"id":172638,"depth":54,"text":172639},{"id":172676,"depth":54,"text":172677},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170217,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172743,"title":172744,"body":172745,"description":2493,"extension":2494,"meta":174931,"navigation":69,"path":174932,"seo":174933,"stem":174934,"__hash__":174935},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172746,"toc":174898},[172747,172750,172754,172757,172760,172852,172854,172873,172878,172882,172885,172888,172917,172924,172927,172931,172934,172963,172965,173017,173023,173076,173080,173178,173181,173248,173252,173309,173311,173317,173321,173326,173332,173423,173428,173432,173435,173513,173516,173554,173558,173676,173679,173683,173686,173731,173734,173738,173743,173749,173799,173802,173833,173837,173841,173871,173875,173910,173914,173949,173989,173993,174009,174012,174016,174020,174099,174103,174144,174148,174203,174207,174241,174245,174275,174284,174291,174297,174354,174357,174365,174368,174372,174379,174382,174388,174391,174408,174413,174417,174423,174436,174439,174476,174479,174490,174493,174507,174510,174524,174528,174535,174568,174571,174573,174579,174582,174586,174588,174594,174599,174772,174776,174839,174843,174867,174871,174895],[10,172748,172744],{"id":172749},"_9-异常模块与包",[14,172751,172753],{"id":172752},"_91-什么是异常","9.1 什么是异常",[19,172755,172756],{},"异常是程序运行过程中出现的错误。",[19,172758,172759],{},"常见异常：",[2698,172761,172762,172771],{},[2701,172763,172764],{},[2704,172765,172766,172769],{},[2707,172767,172768],{},"异常",[2707,172770,28239],{},[2744,172772,172773,172783,172793,172802,172812,172822,172832,172842],{},[2704,172774,172775,172780],{},[2749,172776,172777],{},[33,172778,172779],{},"NameError",[2749,172781,172782],{},"使用了未定义变量",[2704,172784,172785,172790],{},[2749,172786,172787],{},[33,172788,172789],{},"TypeError",[2749,172791,172792],{},"类型不匹配",[2704,172794,172795,172799],{},[2749,172796,172797],{},[33,172798,156895],{},[2749,172800,172801],{},"值不合法",[2704,172803,172804,172809],{},[2749,172805,172806],{},[33,172807,172808],{},"IndexError",[2749,172810,172811],{},"列表索引越界",[2704,172813,172814,172819],{},[2749,172815,172816],{},[33,172817,172818],{},"KeyError",[2749,172820,172821],{},"字典 key 不存在",[2704,172823,172824,172829],{},[2749,172825,172826],{},[33,172827,172828],{},"FileNotFoundError",[2749,172830,172831],{},"文件不存在",[2704,172833,172834,172839],{},[2749,172835,172836],{},[33,172837,172838],{},"ZeroDivisionError",[2749,172840,172841],{},"除数为 0",[2704,172843,172844,172849],{},[2749,172845,172846],{},[33,172847,172848],{},"ImportError",[2749,172850,172851],{},"导入失败",[19,172853,17510],{},[26,172855,172857],{"className":28,"code":172856,"language":30,"meta":31,"style":31},"num = int(\"abc\")\n",[33,172858,172859],{"__ignoreMap":31},[36,172860,172861,172863,172865,172867,172869,172871],{"class":38,"line":39},[36,172862,157848],{"class":42},[36,172864,47],{"class":46},[36,172866,4775],{"class":62},[36,172868,92],{"class":42},[36,172870,157941],{"class":50},[36,172872,123],{"class":42},[19,172874,172875,172876,676],{},"会触发 ",[33,172877,156895],{},[14,172879,172881],{"id":172880},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172883,172884],{},"如果不处理异常，程序会直接终止。",[19,172886,172887],{},"例如用户输入年龄：",[26,172889,172891],{"className":28,"code":172890,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,172892,172893,172911],{"__ignoreMap":31},[36,172894,172895,172897,172899,172901,172903,172905,172907,172909],{"class":38,"line":39},[36,172896,57],{"class":42},[36,172898,47],{"class":46},[36,172900,4775],{"class":62},[36,172902,92],{"class":42},[36,172904,56169],{"class":62},[36,172906,92],{"class":42},[36,172908,154455],{"class":50},[36,172910,1914],{"class":42},[36,172912,172913,172915],{"class":38,"line":54},[36,172914,371],{"class":62},[36,172916,157822],{"class":42},[19,172918,172919,172920,172923],{},"用户输入 ",[33,172921,172922],{},"abc","，程序就会报错退出。",[19,172925,172926],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172928,172930],{"id":172929},"_93-try-except","9.3 try except",[19,172932,172933],{},"基础语法：",[26,172935,172937],{"className":28,"code":172936,"language":30,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,172938,172939,172946,172951,172958],{"__ignoreMap":31},[36,172940,172941,172944],{"class":38,"line":39},[36,172942,172943],{"class":46},"try",[36,172945,153],{"class":42},[36,172947,172948],{"class":38,"line":54},[36,172949,172950],{"class":42},"    可能出错的代码\n",[36,172952,172953,172956],{"class":38,"line":66},[36,172954,172955],{"class":46},"except",[36,172957,153],{"class":42},[36,172959,172960],{"class":38,"line":73},[36,172961,172962],{"class":42},"    出错后的处理代码\n",[19,172964,17510],{},[26,172966,172968],{"className":28,"code":172967,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,172969,172970,172976,172994,173000,173006],{"__ignoreMap":31},[36,172971,172972,172974],{"class":38,"line":39},[36,172973,172943],{"class":46},[36,172975,153],{"class":42},[36,172977,172978,172980,172982,172984,172986,172988,172990,172992],{"class":38,"line":54},[36,172979,154447],{"class":42},[36,172981,47],{"class":46},[36,172983,4775],{"class":62},[36,172985,92],{"class":42},[36,172987,56169],{"class":62},[36,172989,92],{"class":42},[36,172991,154455],{"class":50},[36,172993,1914],{"class":42},[36,172995,172996,172998],{"class":38,"line":66},[36,172997,89],{"class":62},[36,172999,157822],{"class":42},[36,173001,173002,173004],{"class":38,"line":73},[36,173003,172955],{"class":46},[36,173005,153],{"class":42},[36,173007,173008,173010,173012,173015],{"class":38,"line":86},[36,173009,89],{"class":62},[36,173011,92],{"class":42},[36,173013,173014],{"class":50},"\"年龄必须是数字\"",[36,173016,123],{"class":42},[19,173018,173019,173020,173022],{},"不建议裸写 ",[33,173021,172955],{},"，最好指定异常类型。",[26,173024,173026],{"className":28,"code":173025,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,173027,173028,173034,173052,173058,173066],{"__ignoreMap":31},[36,173029,173030,173032],{"class":38,"line":39},[36,173031,172943],{"class":46},[36,173033,153],{"class":42},[36,173035,173036,173038,173040,173042,173044,173046,173048,173050],{"class":38,"line":54},[36,173037,154447],{"class":42},[36,173039,47],{"class":46},[36,173041,4775],{"class":62},[36,173043,92],{"class":42},[36,173045,56169],{"class":62},[36,173047,92],{"class":42},[36,173049,154455],{"class":50},[36,173051,1914],{"class":42},[36,173053,173054,173056],{"class":38,"line":66},[36,173055,89],{"class":62},[36,173057,157822],{"class":42},[36,173059,173060,173062,173064],{"class":38,"line":73},[36,173061,172955],{"class":46},[36,173063,154287],{"class":62},[36,173065,153],{"class":42},[36,173067,173068,173070,173072,173074],{"class":38,"line":86},[36,173069,89],{"class":62},[36,173071,92],{"class":42},[36,173073,173014],{"class":50},[36,173075,123],{"class":42},[14,173077,173079],{"id":173078},"_94-捕获多个异常","9.4 捕获多个异常",[26,173081,173083],{"className":28,"code":173082,"language":30,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,173084,173085,173091,173112,173132,173139,173147,173158,173167],{"__ignoreMap":31},[36,173086,173087,173089],{"class":38,"line":39},[36,173088,172943],{"class":46},[36,173090,153],{"class":42},[36,173092,173093,173096,173098,173100,173102,173104,173106,173108,173110],{"class":38,"line":54},[36,173094,173095],{"class":42},"    nums ",[36,173097,47],{"class":46},[36,173099,54574],{"class":42},[36,173101,1906],{"class":62},[36,173103,630],{"class":42},[36,173105,1911],{"class":62},[36,173107,630],{"class":42},[36,173109,2634],{"class":62},[36,173111,35598],{"class":42},[36,173113,173114,173117,173119,173121,173123,173125,173127,173130],{"class":38,"line":66},[36,173115,173116],{"class":42},"    index ",[36,173118,47],{"class":46},[36,173120,4775],{"class":62},[36,173122,92],{"class":42},[36,173124,56169],{"class":62},[36,173126,92],{"class":42},[36,173128,173129],{"class":50},"\"请输入索引:\"",[36,173131,1914],{"class":42},[36,173133,173134,173136],{"class":38,"line":73},[36,173135,89],{"class":62},[36,173137,173138],{"class":42},"(nums[index])\n",[36,173140,173141,173143,173145],{"class":38,"line":86},[36,173142,172955],{"class":46},[36,173144,154287],{"class":62},[36,173146,153],{"class":42},[36,173148,173149,173151,173153,173156],{"class":38,"line":126},[36,173150,89],{"class":62},[36,173152,92],{"class":42},[36,173154,173155],{"class":50},"\"索引必须是整数\"",[36,173157,123],{"class":42},[36,173159,173160,173162,173165],{"class":38,"line":131},[36,173161,172955],{"class":46},[36,173163,173164],{"class":62}," IndexError",[36,173166,153],{"class":42},[36,173168,173169,173171,173173,173176],{"class":38,"line":225},[36,173170,89],{"class":62},[36,173172,92],{"class":42},[36,173174,173175],{"class":50},"\"索引越界\"",[36,173177,123],{"class":42},[19,173179,173180],{},"多个异常使用相同处理逻辑：",[26,173182,173184],{"className":28,"code":173183,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,173185,173186,173192,173210,173223,173237],{"__ignoreMap":31},[36,173187,173188,173190],{"class":38,"line":39},[36,173189,172943],{"class":46},[36,173191,153],{"class":42},[36,173193,173194,173196,173198,173200,173202,173204,173206,173208],{"class":38,"line":54},[36,173195,47942],{"class":42},[36,173197,47],{"class":46},[36,173199,4775],{"class":62},[36,173201,92],{"class":42},[36,173203,56169],{"class":62},[36,173205,92],{"class":42},[36,173207,157857],{"class":50},[36,173209,1914],{"class":42},[36,173211,173212,173214,173216,173218,173220],{"class":38,"line":66},[36,173213,89],{"class":62},[36,173215,92],{"class":42},[36,173217,3002],{"class":62},[36,173219,158107],{"class":46},[36,173221,173222],{"class":42}," num)\n",[36,173224,173225,173227,173229,173231,173233,173235],{"class":38,"line":73},[36,173226,172955],{"class":46},[36,173228,4066],{"class":42},[36,173230,156895],{"class":62},[36,173232,630],{"class":42},[36,173234,172838],{"class":62},[36,173236,1147],{"class":42},[36,173238,173239,173241,173243,173246],{"class":38,"line":86},[36,173240,89],{"class":62},[36,173242,92],{"class":42},[36,173244,173245],{"class":50},"\"输入不合法\"",[36,173247,123],{"class":42},[14,173249,173251],{"id":173250},"_95-获取异常信息","9.5 获取异常信息",[26,173253,173255],{"className":28,"code":173254,"language":30,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,173256,173257,173263,173277,173288],{"__ignoreMap":31},[36,173258,173259,173261],{"class":38,"line":39},[36,173260,172943],{"class":46},[36,173262,153],{"class":42},[36,173264,173265,173267,173269,173271,173273,173275],{"class":38,"line":54},[36,173266,47942],{"class":42},[36,173268,47],{"class":46},[36,173270,4775],{"class":62},[36,173272,92],{"class":42},[36,173274,157941],{"class":50},[36,173276,123],{"class":42},[36,173278,173279,173281,173283,173285],{"class":38,"line":66},[36,173280,172955],{"class":46},[36,173282,154287],{"class":62},[36,173284,66951],{"class":46},[36,173286,173287],{"class":42}," e:\n",[36,173289,173290,173292,173294,173296,173299,173301,173303,173305,173307],{"class":38,"line":73},[36,173291,89],{"class":62},[36,173293,92],{"class":42},[36,173295,95],{"class":46},[36,173297,173298],{"class":50},"\"出错了:",[36,173300,101],{"class":62},[36,173302,2637],{"class":42},[36,173304,107],{"class":62},[36,173306,604],{"class":50},[36,173308,123],{"class":42},[19,173310,148796],{},[26,173312,173315],{"className":173313,"code":173314,"language":7570,"meta":31},[7568],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,173316,173314],{"__ignoreMap":31},[14,173318,173320],{"id":173319},"_96-else和finally","9.6 else和finally",[19,173322,173323,173325],{},[33,173324,4105],{},"：没有异常时执行。",[19,173327,173328,173331],{},[33,173329,173330],{},"finally","：无论是否异常都会执行。",[26,173333,173335],{"className":28,"code":173334,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,173336,173337,173343,173361,173369,173379,173385,173406,173412],{"__ignoreMap":31},[36,173338,173339,173341],{"class":38,"line":39},[36,173340,172943],{"class":46},[36,173342,153],{"class":42},[36,173344,173345,173347,173349,173351,173353,173355,173357,173359],{"class":38,"line":54},[36,173346,47942],{"class":42},[36,173348,47],{"class":46},[36,173350,4775],{"class":62},[36,173352,92],{"class":42},[36,173354,56169],{"class":62},[36,173356,92],{"class":42},[36,173358,157857],{"class":50},[36,173360,1914],{"class":42},[36,173362,173363,173365,173367],{"class":38,"line":66},[36,173364,172955],{"class":46},[36,173366,154287],{"class":62},[36,173368,153],{"class":42},[36,173370,173371,173373,173375,173377],{"class":38,"line":73},[36,173372,89],{"class":62},[36,173374,92],{"class":42},[36,173376,155275],{"class":50},[36,173378,123],{"class":42},[36,173380,173381,173383],{"class":38,"line":86},[36,173382,4105],{"class":46},[36,173384,153],{"class":42},[36,173386,173387,173389,173391,173393,173396,173398,173400,173402,173404],{"class":38,"line":126},[36,173388,89],{"class":62},[36,173390,92],{"class":42},[36,173392,95],{"class":46},[36,173394,173395],{"class":50},"\"输入正确:",[36,173397,101],{"class":62},[36,173399,4073],{"class":42},[36,173401,107],{"class":62},[36,173403,604],{"class":50},[36,173405,123],{"class":42},[36,173407,173408,173410],{"class":38,"line":131},[36,173409,173330],{"class":46},[36,173411,153],{"class":42},[36,173413,173414,173416,173418,173421],{"class":38,"line":225},[36,173415,89],{"class":62},[36,173417,92],{"class":42},[36,173419,173420],{"class":50},"\"程序结束\"",[36,173422,123],{"class":42},[19,173424,173425,173427],{},[33,173426,173330],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173429,173431],{"id":173430},"_97-抛出异常","9.7 抛出异常",[19,173433,173434],{},"程序可以主动抛出异常。",[26,173436,173438],{"className":28,"code":173437,"language":30,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,173439,173440,173449,173461,173474,173494,173498,173502],{"__ignoreMap":31},[36,173441,173442,173444,173447],{"class":38,"line":39},[36,173443,76],{"class":46},[36,173445,173446],{"class":79}," set_age",[36,173448,163476],{"class":42},[36,173450,173451,173453,173455,173457,173459],{"class":38,"line":54},[36,173452,5486],{"class":46},[36,173454,18080],{"class":42},[36,173456,3463],{"class":46},[36,173458,899],{"class":62},[36,173460,153],{"class":42},[36,173462,173463,173465,173467,173469,173472],{"class":38,"line":66},[36,173464,105772],{"class":46},[36,173466,154287],{"class":62},[36,173468,92],{"class":42},[36,173470,173471],{"class":50},"\"年龄不能为负数\"",[36,173473,123],{"class":42},[36,173475,173476,173478,173480,173482,173484,173486,173488,173490,173492],{"class":38,"line":73},[36,173477,89],{"class":62},[36,173479,92],{"class":42},[36,173481,95],{"class":46},[36,173483,164044],{"class":50},[36,173485,101],{"class":62},[36,173487,115],{"class":42},[36,173489,107],{"class":62},[36,173491,604],{"class":50},[36,173493,123],{"class":42},[36,173495,173496],{"class":38,"line":86},[36,173497,70],{"emptyLinePlaceholder":69},[36,173499,173500],{"class":38,"line":126},[36,173501,70],{"emptyLinePlaceholder":69},[36,173503,173504,173507,173509,173511],{"class":38,"line":131},[36,173505,173506],{"class":42},"set_age(",[36,173508,3087],{"class":46},[36,173510,1906],{"class":62},[36,173512,123],{"class":42},[19,173514,173515],{},"调用者可以捕获：",[26,173517,173519],{"className":28,"code":173518,"language":30,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,173520,173521,173527,173538,173548],{"__ignoreMap":31},[36,173522,173523,173525],{"class":38,"line":39},[36,173524,172943],{"class":46},[36,173526,153],{"class":42},[36,173528,173529,173532,173534,173536],{"class":38,"line":54},[36,173530,173531],{"class":42},"    set_age(",[36,173533,3087],{"class":46},[36,173535,1906],{"class":62},[36,173537,123],{"class":42},[36,173539,173540,173542,173544,173546],{"class":38,"line":66},[36,173541,172955],{"class":46},[36,173543,154287],{"class":62},[36,173545,66951],{"class":46},[36,173547,173287],{"class":42},[36,173549,173550,173552],{"class":38,"line":73},[36,173551,89],{"class":62},[36,173553,69346],{"class":42},[14,173555,173557],{"id":173556},"_98-自定义异常","9.8 自定义异常",[26,173559,173561],{"className":28,"code":173560,"language":30,"meta":31,"style":31},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[33,173562,173563,173577,173581,173585,173589,173597,173607,173618,173628,173632,173636,173642,173659,173670],{"__ignoreMap":31},[36,173564,173565,173567,173570,173572,173575],{"class":38,"line":39},[36,173566,147],{"class":46},[36,173568,173569],{"class":79}," BalanceNotEnoughError",[36,173571,92],{"class":42},[36,173573,173574],{"class":62},"Exception",[36,173576,1147],{"class":42},[36,173578,173579],{"class":38,"line":54},[36,173580,266],{"class":46},[36,173582,173583],{"class":38,"line":66},[36,173584,70],{"emptyLinePlaceholder":69},[36,173586,173587],{"class":38,"line":73},[36,173588,70],{"emptyLinePlaceholder":69},[36,173590,173591,173593,173595],{"class":38,"line":86},[36,173592,76],{"class":46},[36,173594,944],{"class":79},[36,173596,164873],{"class":42},[36,173598,173599,173601,173603,173605],{"class":38,"line":126},[36,173600,5486],{"class":46},[36,173602,893],{"class":42},[36,173604,986],{"class":46},[36,173606,164650],{"class":42},[36,173608,173609,173611,173614,173616],{"class":38,"line":131},[36,173610,105772],{"class":46},[36,173612,173613],{"class":42}," BalanceNotEnoughError(",[36,173615,1001],{"class":50},[36,173617,123],{"class":42},[36,173619,173620,173622,173624,173626],{"class":38,"line":225},[36,173621,6474],{"class":46},[36,173623,164880],{"class":42},[36,173625,3087],{"class":46},[36,173627,931],{"class":42},[36,173629,173630],{"class":38,"line":235},[36,173631,70],{"emptyLinePlaceholder":69},[36,173633,173634],{"class":38,"line":377},[36,173635,70],{"emptyLinePlaceholder":69},[36,173637,173638,173640],{"class":38,"line":617},[36,173639,172943],{"class":46},[36,173641,153],{"class":42},[36,173643,173644,173646,173648,173651,173653,173655,173657],{"class":38,"line":643},[36,173645,164551],{"class":42},[36,173647,47],{"class":46},[36,173649,173650],{"class":42}," withdraw(",[36,173652,1070],{"class":62},[36,173654,630],{"class":42},[36,173656,1059],{"class":62},[36,173658,123],{"class":42},[36,173660,173661,173663,173666,173668],{"class":38,"line":921},[36,173662,172955],{"class":46},[36,173664,173665],{"class":42}," BalanceNotEnoughError ",[36,173667,33737],{"class":46},[36,173669,173287],{"class":42},[36,173671,173672,173674],{"class":38,"line":934},[36,173673,89],{"class":62},[36,173675,69346],{"class":42},[19,173677,173678],{},"入门阶段大多数情况使用内置异常即可。",[14,173680,173682],{"id":173681},"_99-traceback","9.9 traceback",[19,173684,173685],{},"调试时可以输出完整异常堆栈。",[26,173687,173689],{"className":28,"code":173688,"language":30,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,173690,173691,173698,173702,173708,173718,173726],{"__ignoreMap":31},[36,173692,173693,173695],{"class":38,"line":39},[36,173694,1943],{"class":46},[36,173696,173697],{"class":42}," traceback\n",[36,173699,173700],{"class":38,"line":54},[36,173701,70],{"emptyLinePlaceholder":69},[36,173703,173704,173706],{"class":38,"line":66},[36,173705,172943],{"class":46},[36,173707,153],{"class":42},[36,173709,173710,173712,173714,173716],{"class":38,"line":73},[36,173711,4378],{"class":62},[36,173713,92],{"class":42},[36,173715,157941],{"class":50},[36,173717,123],{"class":42},[36,173719,173720,173722,173724],{"class":38,"line":86},[36,173721,172955],{"class":46},[36,173723,154287],{"class":62},[36,173725,153],{"class":42},[36,173727,173728],{"class":38,"line":126},[36,173729,173730],{"class":42},"    traceback.print_exc()\n",[19,173732,173733],{},"日志系统中常把异常堆栈记录到文件。",[14,173735,173737],{"id":173736},"_910-什么是模块","9.10 什么是模块",[19,173739,173740,173741,128322],{},"模块就是一个 ",[33,173742,148691],{},[19,173744,173745,173746,26989],{},"例如创建 ",[33,173747,173748],{},"my_math.py",[26,173750,173752],{"className":28,"code":173751,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,173753,173754,173762,173772,173776,173780,173789],{"__ignoreMap":31},[36,173755,173756,173758,173760],{"class":38,"line":39},[36,173757,76],{"class":46},[36,173759,1872],{"class":79},[36,173761,1875],{"class":42},[36,173763,173764,173766,173768,173770],{"class":38,"line":54},[36,173765,6474],{"class":46},[36,173767,1882],{"class":42},[36,173769,1885],{"class":46},[36,173771,1888],{"class":42},[36,173773,173774],{"class":38,"line":66},[36,173775,70],{"emptyLinePlaceholder":69},[36,173777,173778],{"class":38,"line":73},[36,173779,70],{"emptyLinePlaceholder":69},[36,173781,173782,173784,173787],{"class":38,"line":86},[36,173783,76],{"class":46},[36,173785,173786],{"class":79}," sub",[36,173788,1875],{"class":42},[36,173790,173791,173793,173795,173797],{"class":38,"line":126},[36,173792,6474],{"class":46},[36,173794,1882],{"class":42},[36,173796,3087],{"class":46},[36,173798,1888],{"class":42},[19,173800,173801],{},"在另一个文件中导入：",[26,173803,173805],{"className":28,"code":173804,"language":30,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,173806,173807,173814,173818],{"__ignoreMap":31},[36,173808,173809,173811],{"class":38,"line":39},[36,173810,1943],{"class":46},[36,173812,173813],{"class":42}," my_math\n",[36,173815,173816],{"class":38,"line":54},[36,173817,70],{"emptyLinePlaceholder":69},[36,173819,173820,173822,173825,173827,173829,173831],{"class":38,"line":66},[36,173821,371],{"class":62},[36,173823,173824],{"class":42},"(my_math.add(",[36,173826,1906],{"class":62},[36,173828,630],{"class":42},[36,173830,1911],{"class":62},[36,173832,1914],{"class":42},[14,173834,173836],{"id":173835},"_911-import导入","9.11 import导入",[1752,173838,173840],{"id":173839},"_9111-导入模块","9.11.1 导入模块",[26,173842,173844],{"className":28,"code":173843,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,173845,173846,173852,173856],{"__ignoreMap":31},[36,173847,173848,173850],{"class":38,"line":39},[36,173849,1943],{"class":46},[36,173851,47677],{"class":42},[36,173853,173854],{"class":38,"line":54},[36,173855,70],{"emptyLinePlaceholder":69},[36,173857,173858,173860,173863,173865,173867,173869],{"class":38,"line":66},[36,173859,371],{"class":62},[36,173861,173862],{"class":42},"(random.randint(",[36,173864,1906],{"class":62},[36,173866,630],{"class":42},[36,173868,3002],{"class":62},[36,173870,1914],{"class":42},[1752,173872,173874],{"id":173873},"_9112-导入指定内容","9.11.2 导入指定内容",[26,173876,173878],{"className":28,"code":173877,"language":30,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,173879,173880,173891,173895],{"__ignoreMap":31},[36,173881,173882,173884,173886,173888],{"class":38,"line":39},[36,173883,1937],{"class":46},[36,173885,60144],{"class":42},[36,173887,1943],{"class":46},[36,173889,173890],{"class":42}," randint\n",[36,173892,173893],{"class":38,"line":54},[36,173894,70],{"emptyLinePlaceholder":69},[36,173896,173897,173899,173902,173904,173906,173908],{"class":38,"line":66},[36,173898,371],{"class":62},[36,173900,173901],{"class":42},"(randint(",[36,173903,1906],{"class":62},[36,173905,630],{"class":42},[36,173907,3002],{"class":62},[36,173909,1914],{"class":42},[1752,173911,173913],{"id":173912},"_9113-起别名","9.11.3 起别名",[26,173915,173917],{"className":28,"code":173916,"language":30,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,173918,173919,173930,173934],{"__ignoreMap":31},[36,173920,173921,173923,173925,173927],{"class":38,"line":39},[36,173922,1943],{"class":46},[36,173924,60144],{"class":42},[36,173926,33737],{"class":46},[36,173928,173929],{"class":42}," rd\n",[36,173931,173932],{"class":38,"line":54},[36,173933,70],{"emptyLinePlaceholder":69},[36,173935,173936,173938,173941,173943,173945,173947],{"class":38,"line":66},[36,173937,371],{"class":62},[36,173939,173940],{"class":42},"(rd.randint(",[36,173942,1906],{"class":62},[36,173944,630],{"class":42},[36,173946,3002],{"class":62},[36,173948,1914],{"class":42},[26,173950,173952],{"className":28,"code":173951,"language":30,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,173953,173954,173970,173974],{"__ignoreMap":31},[36,173955,173956,173958,173960,173962,173965,173967],{"class":38,"line":39},[36,173957,1937],{"class":46},[36,173959,60144],{"class":42},[36,173961,1943],{"class":46},[36,173963,173964],{"class":42}," randint ",[36,173966,33737],{"class":46},[36,173968,173969],{"class":42}," rint\n",[36,173971,173972],{"class":38,"line":54},[36,173973,70],{"emptyLinePlaceholder":69},[36,173975,173976,173978,173981,173983,173985,173987],{"class":38,"line":66},[36,173977,371],{"class":62},[36,173979,173980],{"class":42},"(rint(",[36,173982,1906],{"class":62},[36,173984,630],{"class":42},[36,173986,3002],{"class":62},[36,173988,1914],{"class":42},[1752,173990,173992],{"id":173991},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,173994,173996],{"className":28,"code":173995,"language":30,"meta":31,"style":31},"from random import *\n",[33,173997,173998],{"__ignoreMap":31},[36,173999,174000,174002,174004,174006],{"class":38,"line":39},[36,174001,1937],{"class":46},[36,174003,60144],{"class":42},[36,174005,1943],{"class":46},[36,174007,174008],{"class":46}," *\n",[19,174010,174011],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174013,174015],{"id":174014},"_912-常用内置模块","9.12 常用内置模块",[1752,174017,174019],{"id":174018},"_9121-random","9.12.1 random",[26,174021,174023],{"className":28,"code":174022,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,174024,174025,174031,174035,174049,174068],{"__ignoreMap":31},[36,174026,174027,174029],{"class":38,"line":39},[36,174028,1943],{"class":46},[36,174030,47677],{"class":42},[36,174032,174033],{"class":38,"line":54},[36,174034,70],{"emptyLinePlaceholder":69},[36,174036,174037,174039,174041,174043,174045,174047],{"class":38,"line":66},[36,174038,371],{"class":62},[36,174040,173862],{"class":42},[36,174042,1906],{"class":62},[36,174044,630],{"class":42},[36,174046,3002],{"class":62},[36,174048,1914],{"class":42},[36,174050,174051,174053,174056,174058,174060,174062,174064,174066],{"class":38,"line":73},[36,174052,371],{"class":62},[36,174054,174055],{"class":42},"(random.choice([",[36,174057,627],{"class":50},[36,174059,630],{"class":42},[36,174061,1716],{"class":50},[36,174063,630],{"class":42},[36,174065,161792],{"class":50},[36,174067,35495],{"class":42},[36,174069,174070,174072,174075,174077,174079,174081,174083,174085,174087,174089,174091,174093,174095,174097],{"class":38,"line":86},[36,174071,371],{"class":62},[36,174073,174074],{"class":42},"(random.sample([",[36,174076,1906],{"class":62},[36,174078,630],{"class":42},[36,174080,1911],{"class":62},[36,174082,630],{"class":42},[36,174084,2634],{"class":62},[36,174086,630],{"class":42},[36,174088,2850],{"class":62},[36,174090,630],{"class":42},[36,174092,2875],{"class":62},[36,174094,114541],{"class":42},[36,174096,1911],{"class":62},[36,174098,1914],{"class":42},[1752,174100,174102],{"id":174101},"_9122-time","9.12.2 time",[26,174104,174106],{"className":28,"code":174105,"language":30,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,174107,174108,174114,174118,174125,174133],{"__ignoreMap":31},[36,174109,174110,174112],{"class":38,"line":39},[36,174111,1943],{"class":46},[36,174113,34183],{"class":42},[36,174115,174116],{"class":38,"line":54},[36,174117,70],{"emptyLinePlaceholder":69},[36,174119,174120,174122],{"class":38,"line":66},[36,174121,371],{"class":62},[36,174123,174124],{"class":42},"(time.time())\n",[36,174126,174127,174129,174131],{"class":38,"line":73},[36,174128,97412],{"class":42},[36,174130,1906],{"class":62},[36,174132,123],{"class":42},[36,174134,174135,174137,174139,174142],{"class":38,"line":86},[36,174136,371],{"class":62},[36,174138,92],{"class":42},[36,174140,174141],{"class":50},"\"1秒后执行\"",[36,174143,123],{"class":42},[1752,174145,174147],{"id":174146},"_9123-datetime","9.12.3 datetime",[26,174149,174151],{"className":28,"code":174150,"language":30,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,174152,174153,174165,174169,174179,174186],{"__ignoreMap":31},[36,174154,174155,174157,174160,174162],{"class":38,"line":39},[36,174156,1937],{"class":46},[36,174158,174159],{"class":42}," datetime ",[36,174161,1943],{"class":46},[36,174163,174164],{"class":42}," datetime\n",[36,174166,174167],{"class":38,"line":54},[36,174168,70],{"emptyLinePlaceholder":69},[36,174170,174171,174174,174176],{"class":38,"line":66},[36,174172,174173],{"class":42},"now ",[36,174175,47],{"class":46},[36,174177,174178],{"class":42}," datetime.now()\n",[36,174180,174181,174183],{"class":38,"line":73},[36,174182,371],{"class":62},[36,174184,174185],{"class":42},"(now)\n",[36,174187,174188,174190,174193,174196,174198,174201],{"class":38,"line":86},[36,174189,371],{"class":62},[36,174191,174192],{"class":42},"(now.strftime(",[36,174194,174195],{"class":50},"\"%Y-%m-",[36,174197,158752],{"class":62},[36,174199,174200],{"class":50}," %H:%M:%S\"",[36,174202,1914],{"class":42},[1752,174204,174206],{"id":174205},"_9124-os","9.12.4 os",[26,174208,174210],{"className":28,"code":174209,"language":30,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,174211,174212,174218,174222,174229],{"__ignoreMap":31},[36,174213,174214,174216],{"class":38,"line":39},[36,174215,1943],{"class":46},[36,174217,47654],{"class":42},[36,174219,174220],{"class":38,"line":54},[36,174221,70],{"emptyLinePlaceholder":69},[36,174223,174224,174226],{"class":38,"line":66},[36,174225,371],{"class":62},[36,174227,174228],{"class":42},"(os.getcwd())\n",[36,174230,174231,174233,174236,174239],{"class":38,"line":73},[36,174232,371],{"class":62},[36,174234,174235],{"class":42},"(os.listdir(",[36,174237,174238],{"class":50},"\".\"",[36,174240,1914],{"class":42},[1752,174242,174244],{"id":174243},"_9125-sys","9.12.5 sys",[26,174246,174248],{"className":28,"code":174247,"language":30,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,174249,174250,174257,174261,174268],{"__ignoreMap":31},[36,174251,174252,174254],{"class":38,"line":39},[36,174253,1943],{"class":46},[36,174255,174256],{"class":42}," sys\n",[36,174258,174259],{"class":38,"line":54},[36,174260,70],{"emptyLinePlaceholder":69},[36,174262,174263,174265],{"class":38,"line":66},[36,174264,371],{"class":62},[36,174266,174267],{"class":42},"(sys.version)\n",[36,174269,174270,174272],{"class":38,"line":73},[36,174271,371],{"class":62},[36,174273,174274],{"class":42},"(sys.path)\n",[14,174276,174278,174279,174281,174282,604],{"id":174277},"_913-if-name-main","9.13 if ",[667,174280,104],{}," == \"",[667,174283,104398],{},[19,174285,174286,174287,174290],{},"模块被直接运行和被导入时，",[33,174288,174289],{},"__name__"," 的值不同。",[19,174292,174293,174294,26989],{},"创建 ",[33,174295,174296],{},"my_module.py",[26,174298,174300],{"className":28,"code":174299,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,174301,174302,174310,174320,174324,174328,174340],{"__ignoreMap":31},[36,174303,174304,174306,174308],{"class":38,"line":39},[36,174305,76],{"class":46},[36,174307,1872],{"class":79},[36,174309,1875],{"class":42},[36,174311,174312,174314,174316,174318],{"class":38,"line":54},[36,174313,6474],{"class":46},[36,174315,1882],{"class":42},[36,174317,1885],{"class":46},[36,174319,1888],{"class":42},[36,174321,174322],{"class":38,"line":66},[36,174323,70],{"emptyLinePlaceholder":69},[36,174325,174326],{"class":38,"line":73},[36,174327,70],{"emptyLinePlaceholder":69},[36,174329,174330,174332,174334,174336,174338],{"class":38,"line":86},[36,174331,3948],{"class":46},[36,174333,33575],{"class":62},[36,174335,103899],{"class":46},[36,174337,103902],{"class":50},[36,174339,153],{"class":42},[36,174341,174342,174344,174346,174348,174350,174352],{"class":38,"line":126},[36,174343,89],{"class":62},[36,174345,168661],{"class":42},[36,174347,1906],{"class":62},[36,174349,630],{"class":42},[36,174351,1911],{"class":62},[36,174353,1914],{"class":42},[19,174355,174356],{},"作用：",[650,174358,174359,174362],{},[653,174360,174361],{},"直接运行该文件时，执行测试代码。",[653,174363,174364],{},"被其他文件导入时，不执行测试代码。",[19,174366,174367],{},"这是写模块时很常用的习惯。",[14,174369,174371],{"id":174370},"_914-包","9.14 包",[19,174373,174374,174375,174378],{},"包是包含 ",[33,174376,174377],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174380,174381],{},"目录结构：",[26,174383,174386],{"className":174384,"code":174385,"language":7570,"meta":31},[7568],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,174387,174385],{"__ignoreMap":31},[19,174389,174390],{},"导入：",[26,174392,174394],{"className":28,"code":174393,"language":30,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,174395,174396],{"__ignoreMap":31},[36,174397,174398,174400,174403,174405],{"class":38,"line":39},[36,174399,1937],{"class":46},[36,174401,174402],{"class":42}," utils.file_utils ",[36,174404,1943],{"class":46},[36,174406,174407],{"class":42}," read_file\n",[19,174409,174410,174412],{},[33,174411,174377],{}," 可以为空，也可以写包初始化逻辑。",[14,174414,174416],{"id":174415},"_915-第三方包","9.15 第三方包",[19,174418,174419,174420,174422],{},"第三方包通过 ",[33,174421,26201],{}," 安装。",[26,174424,174426],{"className":26192,"code":174425,"language":26194,"meta":31,"style":31},"pip install requests\n",[33,174427,174428],{"__ignoreMap":31},[36,174429,174430,174432,174434],{"class":38,"line":39},[36,174431,26201],{"class":79},[36,174433,26204],{"class":50},[36,174435,148437],{"class":50},[19,174437,174438],{},"使用：",[26,174440,174442],{"className":28,"code":174441,"language":30,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,174443,174444,174450,174454,174469],{"__ignoreMap":31},[36,174445,174446,174448],{"class":38,"line":39},[36,174447,1943],{"class":46},[36,174449,148437],{"class":42},[36,174451,174452],{"class":38,"line":54},[36,174453,70],{"emptyLinePlaceholder":69},[36,174455,174456,174459,174461,174464,174467],{"class":38,"line":66},[36,174457,174458],{"class":42},"response ",[36,174460,47],{"class":46},[36,174462,174463],{"class":42}," requests.get(",[36,174465,174466],{"class":50},"\"https:\u002F\u002Fwww.example.com\"",[36,174468,123],{"class":42},[36,174470,174471,174473],{"class":38,"line":73},[36,174472,371],{"class":62},[36,174474,174475],{"class":42},"(response.status_code)\n",[19,174477,174478],{},"查看已安装包：",[26,174480,174482],{"className":26192,"code":174481,"language":26194,"meta":31,"style":31},"pip list\n",[33,174483,174484],{"__ignoreMap":31},[36,174485,174486,174488],{"class":38,"line":39},[36,174487,26201],{"class":79},[36,174489,121294],{"class":50},[19,174491,174492],{},"导出项目依赖：",[26,174494,174495],{"className":26192,"code":148632,"language":26194,"meta":31,"style":31},[33,174496,174497],{"__ignoreMap":31},[36,174498,174499,174501,174503,174505],{"class":38,"line":39},[36,174500,26201],{"class":79},[36,174502,148641],{"class":50},[36,174504,28592],{"class":46},[36,174506,148646],{"class":50},[19,174508,174509],{},"安装项目依赖：",[26,174511,174512],{"className":26192,"code":148652,"language":26194,"meta":31,"style":31},[33,174513,174514],{"__ignoreMap":31},[36,174515,174516,174518,174520,174522],{"class":38,"line":39},[36,174517,26201],{"class":79},[36,174519,26204],{"class":50},[36,174521,121978],{"class":62},[36,174523,148646],{"class":50},[14,174525,174527],{"id":174526},"_916-模块搜索路径","9.16 模块搜索路径",[19,174529,174530,174531,174534],{},"Python 导入模块时会在 ",[33,174532,174533],{},"sys.path"," 中查找。",[26,174536,174538],{"className":28,"code":174537,"language":30,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,174539,174540,174546,174550,174562],{"__ignoreMap":31},[36,174541,174542,174544],{"class":38,"line":39},[36,174543,1943],{"class":46},[36,174545,174256],{"class":42},[36,174547,174548],{"class":38,"line":54},[36,174549,70],{"emptyLinePlaceholder":69},[36,174551,174552,174554,174557,174559],{"class":38,"line":66},[36,174553,5410],{"class":46},[36,174555,174556],{"class":42}," path ",[36,174558,28413],{"class":46},[36,174560,174561],{"class":42}," sys.path:\n",[36,174563,174564,174566],{"class":38,"line":73},[36,174565,89],{"class":62},[36,174567,171290],{"class":42},[19,174569,174570],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174572,159684],{},[26,174574,174577],{"className":174575,"code":174576,"language":7570,"meta":31},[7568],"random.py\njson.py\ntime.py\n",[33,174578,174576],{"__ignoreMap":31},[19,174580,174581],{},"这些文件名可能导致导入异常。",[14,174583,174585],{"id":174584},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174587,174381],{},[26,174589,174592],{"className":174590,"code":174591,"language":7570,"meta":31},[7568],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[33,174593,174591],{"__ignoreMap":31},[19,174595,174596,26989],{},[33,174597,174598],{},"utils\u002Ffile_utils.py",[26,174600,174602],{"className":28,"code":174601,"language":30,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[33,174603,174604,174610,174620,174624,174628,174638,174648,174656,174662,174666,174693,174703,174707,174711,174721,174747],{"__ignoreMap":31},[36,174605,174606,174608],{"class":38,"line":39},[36,174607,1943],{"class":46},[36,174609,149427],{"class":42},[36,174611,174612,174614,174616,174618],{"class":38,"line":54},[36,174613,1937],{"class":46},[36,174615,110650],{"class":42},[36,174617,1943],{"class":46},[36,174619,110655],{"class":42},[36,174621,174622],{"class":38,"line":66},[36,174623,70],{"emptyLinePlaceholder":69},[36,174625,174626],{"class":38,"line":73},[36,174627,70],{"emptyLinePlaceholder":69},[36,174629,174630,174632,174635],{"class":38,"line":86},[36,174631,76],{"class":46},[36,174633,174634],{"class":79}," read_json",[36,174636,174637],{"class":42},"(path):\n",[36,174639,174640,174643,174645],{"class":38,"line":126},[36,174641,174642],{"class":42},"    path ",[36,174644,47],{"class":46},[36,174646,174647],{"class":42}," Path(path)\n",[36,174649,174650,174652,174654],{"class":38,"line":131},[36,174651,5486],{"class":46},[36,174653,41279],{"class":46},[36,174655,171371],{"class":42},[36,174657,174658,174660],{"class":38,"line":225},[36,174659,736],{"class":46},[36,174661,54186],{"class":42},[36,174663,174664],{"class":38,"line":235},[36,174665,70],{"emptyLinePlaceholder":69},[36,174667,174668,174670,174672,174675,174677,174679,174681,174683,174685,174687,174689,174691],{"class":38,"line":377},[36,174669,36530],{"class":46},[36,174671,149127],{"class":62},[36,174673,174674],{"class":42},"(path, ",[36,174676,149137],{"class":50},[36,174678,630],{"class":42},[36,174680,149142],{"class":7598},[36,174682,47],{"class":46},[36,174684,149147],{"class":50},[36,174686,16091],{"class":42},[36,174688,33737],{"class":46},[36,174690,150489],{"class":7598},[36,174692,153],{"class":42},[36,174694,174695,174697,174699,174701],{"class":38,"line":617},[36,174696,736],{"class":46},[36,174698,150500],{"class":42},[36,174700,47703],{"class":7598},[36,174702,123],{"class":42},[36,174704,174705],{"class":38,"line":643},[36,174706,70],{"emptyLinePlaceholder":69},[36,174708,174709],{"class":38,"line":921},[36,174710,70],{"emptyLinePlaceholder":69},[36,174712,174713,174715,174718],{"class":38,"line":934},[36,174714,76],{"class":46},[36,174716,174717],{"class":79}," write_json",[36,174719,174720],{"class":42},"(path, data):\n",[36,174722,174723,174725,174727,174729,174731,174733,174735,174737,174739,174741,174743,174745],{"class":38,"line":939},[36,174724,36530],{"class":46},[36,174726,149127],{"class":62},[36,174728,174674],{"class":42},[36,174730,154037],{"class":50},[36,174732,630],{"class":42},[36,174734,149142],{"class":7598},[36,174736,47],{"class":46},[36,174738,149147],{"class":50},[36,174740,16091],{"class":42},[36,174742,33737],{"class":46},[36,174744,150489],{"class":7598},[36,174746,153],{"class":42},[36,174748,174749,174752,174754,174756,174758,174760,174762,174764,174766,174768,174770],{"class":38,"line":949},[36,174750,174751],{"class":42},"        json.dump(data, ",[36,174753,47703],{"class":7598},[36,174755,630],{"class":42},[36,174757,149473],{"class":7598},[36,174759,47],{"class":46},[36,174761,36339],{"class":62},[36,174763,630],{"class":42},[36,174765,154073],{"class":7598},[36,174767,47],{"class":46},[36,174769,1911],{"class":62},[36,174771,123],{"class":42},[19,174773,174774,26989],{},[33,174775,156668],{},[26,174777,174779],{"className":28,"code":174778,"language":30,"meta":31,"style":31},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[33,174780,174781,174792,174796,174809,174829],{"__ignoreMap":31},[36,174782,174783,174785,174787,174789],{"class":38,"line":39},[36,174784,1937],{"class":46},[36,174786,174402],{"class":42},[36,174788,1943],{"class":46},[36,174790,174791],{"class":42}," read_json, write_json\n",[36,174793,174794],{"class":38,"line":54},[36,174795,70],{"emptyLinePlaceholder":69},[36,174797,174798,174800,174802,174805,174807],{"class":38,"line":66},[36,174799,161777],{"class":42},[36,174801,47],{"class":46},[36,174803,174804],{"class":42}," read_json(",[36,174806,153892],{"class":50},[36,174808,123],{"class":42},[36,174810,174811,174813,174815,174817,174819,174821,174823,174825,174827],{"class":38,"line":73},[36,174812,172595],{"class":42},[36,174814,2251],{"class":50},[36,174816,2158],{"class":42},[36,174818,627],{"class":50},[36,174820,630],{"class":42},[36,174822,2269],{"class":50},[36,174824,2158],{"class":42},[36,174826,638],{"class":62},[36,174828,167213],{"class":42},[36,174830,174831,174834,174836],{"class":38,"line":86},[36,174832,174833],{"class":42},"write_json(",[36,174835,153892],{"class":50},[36,174837,174838],{"class":42},", students)\n",[14,174840,174842],{"id":174841},"_918-易错点","9.18 易错点",[650,174844,174845,174848,174853,174858,174861,174864],{},[653,174846,174847],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[653,174849,174850,174851,676],{},"能指定异常类型就不要裸写 ",[33,174852,172955],{},[653,174854,174855,174857],{},[33,174856,173330],{}," 无论是否出错都会执行。",[653,174859,174860],{},"模块文件名不要和标准库重名。",[653,174862,174863],{},"导入自己写的模块时，要注意运行目录。",[653,174865,174866],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174868,174870],{"id":174869},"_919-本章练习","9.19 本章练习",[650,174872,174873,174876,174879,174885,174892],{},[653,174874,174875],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[653,174877,174878],{},"写函数读取文件，如果文件不存在则返回空字符串。",[653,174880,174293,174881,174884],{},[33,174882,174883],{},"math_utils.py","，实现加减乘除函数并导入使用。",[653,174886,174887,174888,174891],{},"创建一个 ",[33,174889,174890],{},"utils"," 包，把 JSON 读写函数放进去。",[653,174893,174894],{},"写一个程序，捕获除零异常和输入格式异常。",[2467,174896,174897],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":174899},[174900,174901,174902,174903,174904,174905,174906,174907,174908,174909,174910,174916,174923,174925,174926,174927,174928,174929,174930],{"id":172752,"depth":54,"text":172753},{"id":172880,"depth":54,"text":172881},{"id":172929,"depth":54,"text":172930},{"id":173078,"depth":54,"text":173079},{"id":173250,"depth":54,"text":173251},{"id":173319,"depth":54,"text":173320},{"id":173430,"depth":54,"text":173431},{"id":173556,"depth":54,"text":173557},{"id":173681,"depth":54,"text":173682},{"id":173736,"depth":54,"text":173737},{"id":173835,"depth":54,"text":173836,"children":174911},[174912,174913,174914,174915],{"id":173839,"depth":66,"text":173840},{"id":173873,"depth":66,"text":173874},{"id":173912,"depth":66,"text":173913},{"id":173991,"depth":66,"text":173992},{"id":174014,"depth":54,"text":174015,"children":174917},[174918,174919,174920,174921,174922],{"id":174018,"depth":66,"text":174019},{"id":174101,"depth":66,"text":174102},{"id":174146,"depth":66,"text":174147},{"id":174205,"depth":66,"text":174206},{"id":174243,"depth":66,"text":174244},{"id":174277,"depth":54,"text":174924},"9.13 if name == \"main\"",{"id":174370,"depth":54,"text":174371},{"id":174415,"depth":54,"text":174416},{"id":174526,"depth":54,"text":174527},{"id":174584,"depth":54,"text":174585},{"id":174841,"depth":54,"text":174842},{"id":174869,"depth":54,"text":174870},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172744,"description":2493},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174937,"title":174938,"body":174939,"description":175102,"extension":2494,"meta":175103,"navigation":69,"path":175104,"seo":175105,"stem":175106,"__hash__":175107},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174940,"toc":175097},[174941,174944,174947,174950,174961,174963,175037,175040,175043,175046,175049,175052,175055,175058,175061,175064,175067],[10,174942,174938],{"id":174943},"python教程",[19,174945,174946],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174948,174949],{},"建议学习环境：",[650,174951,174952,174955,174958],{},[653,174953,174954],{},"Python 版本：Python 3.10 及以上。",[653,174956,174957],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[653,174959,174960],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174962,119417],{"id":119417},[650,174964,174965,174971,174977,174983,174989,174995,175001,175007,175013,175019,175025,175031],{},[653,174966,174967],{},[2796,174968,174970],{"href":174969},".\u002Fch1-Python","Python环境与第一个程序",[653,174972,174973],{},[2796,174974,174976],{"href":174975},".\u002Fch2","基础语法、变量与字符串",[653,174978,174979],{},[2796,174980,174982],{"href":174981},".\u002Fch3","判断语句",[653,174984,174985],{},[2796,174986,174988],{"href":174987},".\u002Fch4","循环语句",[653,174990,174991],{},[2796,174992,174994],{"href":174993},".\u002Fch5","函数基础",[653,174996,174997],{},[2796,174998,175000],{"href":174999},".\u002Fch6","数据容器",[653,175002,175003],{},[2796,175004,175006],{"href":175005},".\u002Fch7","函数进阶",[653,175008,175009],{},[2796,175010,175012],{"href":175011},".\u002Fch8","文件操作",[653,175014,175015],{},[2796,175016,175018],{"href":175017},".\u002Fch9","异常、模块与包",[653,175020,175021],{},[2796,175022,175024],{"href":175023},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[653,175026,175027],{},[2796,175028,175030],{"href":175029},".\u002Fch11","面向对象基础",[653,175032,175033],{},[2796,175034,175036],{"href":175035},".\u002Fch12","综合案例与复习路线",[14,175038,175039],{"id":175039},"学习路线",[19,175041,175042],{},"第一阶段：能运行程序。",[19,175044,175045],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175047,175048],{},"第二阶段：能组织数据。",[19,175050,175051],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175053,175054],{},"第三阶段：能封装逻辑。",[19,175056,175057],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175059,175060],{},"第四阶段：能做小项目。",[19,175062,175063],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175065,175066],{"id":175066},"参考资料",[650,175068,175069,175076,175083,175090],{},[653,175070,175071,175072],{},"黑马程序员 Python 入门教程推荐：",[2796,175073,175074],{"href":175074,"rel":175075},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26235],[653,175077,175078,175079],{},"Python 官方中文教程：",[2796,175080,175081],{"href":175081,"rel":175082},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26235],[653,175084,175085,175086],{},"Python 标准库文档：",[2796,175087,175088],{"href":175088,"rel":175089},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26235],[653,175091,175092,175093],{},"pyecharts 文档：",[2796,175094,175095],{"href":175095,"rel":175096},"https:\u002F\u002Fpyecharts.org\u002F",[26235],{"title":31,"searchDepth":54,"depth":54,"links":175098},[175099,175100,175101],{"id":119417,"depth":54,"text":119417},{"id":175039,"depth":54,"text":175039},{"id":175066,"depth":54,"text":175066},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25748},"\u002Fwiki\u002F2024-10-10-python",{"title":174938,"description":175102},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331487743]